1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package ca.uhn.hl7v2.llp;
28
29 import java.io.BufferedInputStream;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.nio.charset.Charset;
33
34 import static ca.uhn.hl7v2.llp.MllpConstants.CHARSET_KEY;
35
36
37
38
39 abstract class Hl7DecoderReader<T extends MllpDecoder> implements HL7Reader {
40
41 private InputStream in;
42 private final T decoder;
43 private Charset charset;
44
45 public Hl7DecoderReader() {
46 decoder = initDecoder();
47 }
48
49 public Hl7DecoderReader(InputStream in) throws IOException {
50 setInputStream(in);
51 decoder = initDecoder();
52 }
53
54 public Hl7DecoderReader(InputStream in, Charset charset) throws IOException {
55 setInputStream(in);
56 this.charset = charset;
57 this.decoder = initDecoder();
58 }
59
60 protected abstract T initDecoder();
61
62 protected Charset getCharset() {
63 if (charset == null) {
64 String charsetString = System.getProperty(CHARSET_KEY, "US-ASCII");
65 if (charsetString.equals("default")) {
66 charset = Charset.defaultCharset();
67 } else {
68 charset = Charset.forName(charsetString);
69 }
70 }
71 return charset;
72 }
73
74 public void setInputStream(InputStream in) {
75 if (in == null) throw new NullPointerException("InputStream is null");
76 this.in = new BufferedInputStream(in);
77 }
78
79 public void close() throws IOException {
80 if (in != null) in.close();
81 }
82
83 public String getMessage() throws IOException, LLPException {
84 return decoder.getMessage(in);
85 }
86
87 protected T getDecoder() {
88 return decoder;
89 }
90
91 }