Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/EncodingHelper.java @ 418:528b6780a8bd
A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 22 Mar 2012 21:02:20 +0100 |
parents | ee8264d80747 |
children | 909306e412e2 |
comparison
equal
deleted
inserted
replaced
417:ccd7d25e5aea | 418:528b6780a8bd |
---|---|
46 sessionContext = ctx; | 46 sessionContext = ctx; |
47 decoder = fsEncoding.newDecoder(); | 47 decoder = fsEncoding.newDecoder(); |
48 encoder = fsEncoding.newEncoder(); | 48 encoder = fsEncoding.newEncoder(); |
49 } | 49 } |
50 | 50 |
51 /** | |
52 * Translate file names from manifest to amazing Unicode string | |
53 */ | |
51 public String fromManifest(byte[] data, int start, int length) { | 54 public String fromManifest(byte[] data, int start, int length) { |
52 try { | 55 return decodeWithSystemDefaultFallback(data, start, length); |
53 return decoder.decode(ByteBuffer.wrap(data, start, length)).toString(); | |
54 } catch (CharacterCodingException ex) { | |
55 sessionContext.getLog().error(getClass(), ex, String.format("Use of charset %s failed, resort to system default", charset().name())); | |
56 // resort to system-default | |
57 return new String(data, start, length); | |
58 } | |
59 } | 56 } |
60 | 57 |
61 /** | 58 /** |
62 * @return byte representation of the string directly comparable to bytes in manifest | 59 * @return byte representation of the string directly comparable to bytes in manifest |
63 */ | 60 */ |
64 public byte[] toManifest(String s) { | 61 public byte[] toManifest(String s) { |
65 if (s == null) { | 62 if (s == null) { |
78 // resort to system-default | 75 // resort to system-default |
79 return s.getBytes(); | 76 return s.getBytes(); |
80 } | 77 } |
81 } | 78 } |
82 | 79 |
83 public String fromDirstate(byte[] data, int start, int length) throws CharacterCodingException { // FIXME perhaps, log is enough, and charset() may be private? | 80 /** |
84 return decoder.decode(ByteBuffer.wrap(data, start, length)).toString(); | 81 * Translate file names from dirstate to amazing Unicode string |
82 */ | |
83 public String fromDirstate(byte[] data, int start, int length) { | |
84 return decodeWithSystemDefaultFallback(data, start, length); | |
85 } | 85 } |
86 | 86 |
87 public Charset charset() { | 87 private String decodeWithSystemDefaultFallback(byte[] data, int start, int length) { |
88 try { | |
89 return decoder.decode(ByteBuffer.wrap(data, start, length)).toString(); | |
90 } catch (CharacterCodingException ex) { | |
91 sessionContext.getLog().error(getClass(), ex, String.format("Use of charset %s failed, resort to system default", charset().name())); | |
92 // resort to system-default | |
93 return new String(data, start, length); | |
94 } | |
95 } | |
96 | |
97 private Charset charset() { | |
88 return encoder.charset(); | 98 return encoder.charset(); |
89 } | 99 } |
90 | 100 |
91 } | 101 } |