001 /**
002 The contents of this file are subject to the Mozilla Public License Version 1.1
003 (the "License"); you may not use this file except in compliance with the License.
004 You may obtain a copy of the License at http://www.mozilla.org/MPL/
005 Software distributed under the License is distributed on an "AS IS" basis,
006 WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
007 specific language governing rights and limitations under the License.
008
009 The Original Code is "MinLLPWriter.java". Description:
010 "Title: MinLLPWriter
011 Description: Writes HL7 messages to an OutputStream
012 Copyright: Copyright (c) 2001
013 Company: University Health Network
014 @author Damian Horton
015 @version 1.1"
016
017 The Initial Developer of the Original Code is University Health Network. Copyright (C)
018 2001. All Rights Reserved.
019
020 Contributor(s): ______________________________________.
021
022 Alternatively, the contents of this file may be used under the terms of the
023 GNU General Public License (the �GPL�), in which case the provisions of the GPL are
024 applicable instead of those above. If you wish to allow use of your version of this
025 file only under the terms of the GPL and not to allow others to use your version
026 of this file under the MPL, indicate your decision by deleting the provisions above
027 and replace them with the notice and other provisions required by the GPL License.
028 If you do not delete the provisions above, a recipient may use your version of
029 this file under either the MPL or the GPL.
030
031 */
032
033 package ca.uhn.hl7v2.llp;
034
035 import java.io.*;
036 import java.nio.charset.Charset;
037
038 /**
039 * Title: MinLLPWriter
040 * Description: Writes HL7 messages to an OutputStream. The character set defaults to US-ASCII.
041 * It can be chaged by setting the system property ca.uhn.hl7v2.llp.charset to another value that
042 * is the name of a valid java.nio.charset.Charset. If this property is set to "default", then
043 * the system default is used.
044 *
045 * Copyright: Copyright (c) 2001
046 * Company: University Health Network
047 * @author Damian Horton; mods by Bryan Tripp
048 * @version 1.1
049 */
050
051 public class MinLLPWriter implements HL7Writer
052 {
053 /**
054 * @see MinLLPReader#CHARSET_KEY
055 */
056 public static final String CHARSET_KEY = MinLLPReader.CHARSET_KEY;
057
058 BufferedWriter myWriter; //reads from the input stream given in the
059 //constructor
060 boolean messageStarted = false; //whether or not the necessary characters to
061 //initialize the message have already been buffered
062
063 private OutputStream myOutputStream;
064
065 private Charset charset;
066
067 /**
068 * Creates a MinLLPWriter with no output stream specified - <code>setOutputStream</code>
069 * must be called before attempting to write any messages.
070 */
071 public MinLLPWriter() {
072 }
073
074 /**
075 * Creates a MinLLPWriter, specifying the underlying output stream.
076 */
077 public MinLLPWriter(OutputStream out) throws IOException {
078 setOutputStream(out);
079 }
080
081 /**
082 * Creates a MinLLPWriter, specifying the underlying output stream.
083 */
084 public MinLLPWriter(OutputStream out, Charset theCharset) throws IOException {
085 charset = theCharset;
086 setOutputStream(out);
087 }
088
089 /**
090 * Sets the underlying output stream to which messages are written.
091 */
092 public synchronized void setOutputStream(OutputStream out) throws IOException
093 {
094 myOutputStream = out;
095 myWriter = new BufferedWriter(getWriter(out));
096 }
097
098 /**
099 * Sends a complete message to the underlying output stream, delimited
100 * according to the minimal lower layer protocol.
101 */
102 public synchronized void writeMessage(String message) throws LLPException, IOException
103 {
104 myWriter.write('\u000b');
105 myWriter.write(message);
106 myWriter.write('\u001c' + "\r");
107 myWriter.flush();
108 }
109
110 /**
111 * Sends a complete message to the underlying output stream, delimited
112 * according to the minimal lower layer protocol, using the specified character set.
113 */
114 public synchronized void writeMessage(String message, String charset) throws LLPException, IOException
115 {
116 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(myOutputStream, charset));
117 writer.write('\u000b');
118 writer.write(message);
119 writer.write('\u001c' + "\r");
120 writer.flush();
121 }
122
123 public synchronized void close() throws java.io.IOException
124 {
125 myWriter.close();
126 }
127
128 private OutputStreamWriter getWriter(OutputStream theStream) throws IOException {
129
130 if (charset != null) {
131 return new OutputStreamWriter(theStream, charset);
132 } else {
133 String charsetString = System.getProperty(CHARSET_KEY, "US-ASCII");
134 if (charsetString.equals("default")) {
135 return new OutputStreamWriter(theStream);
136 } else {
137 return new OutputStreamWriter(theStream, charsetString);
138 }
139 }
140 }
141
142 }