View Javadoc
1   /**
2   The contents of this file are subject to the Mozilla Public License Version 1.1 
3   (the "License"); you may not use this file except in compliance with the License. 
4   You may obtain a copy of the License at http://www.mozilla.org/MPL/ 
5   Software distributed under the License is distributed on an "AS IS" basis, 
6   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 
7   specific language governing rights and limitations under the License. 
8   
9   The Original Code is "HapiContextSupport.java".  Description: 
10  "Abstract base class for subclasses supporting the access to a HapiContext." 
11  
12  The Initial Developer of the Original Code is University Health Network. Copyright (C) 
13  2001.  All Rights Reserved. 
14  
15  Contributor(s): ______________________________________. 
16  
17  Alternatively, the contents of this file may be used under the terms of the 
18  GNU General Public License (the  "GPL"), in which case the provisions of the GPL are 
19  applicable instead of those above.  If you wish to allow use of your version of this 
20  file only under the terms of the GPL and not to allow others to use your version 
21  of this file under the MPL, indicate your decision by deleting  the provisions above 
22  and replace  them with the notice and other provisions required by the GPL License.  
23  If you do not delete the provisions above, a recipient may use your version of 
24  this file under either the MPL or the GPL. 
25   */
26  package ca.uhn.hl7v2;
27  
28  import java.io.IOException;
29  import java.util.concurrent.ExecutorService;
30  
31  import ca.uhn.hl7v2.app.Connection;
32  import ca.uhn.hl7v2.app.ConnectionHub;
33  import ca.uhn.hl7v2.app.HL7Service;
34  import ca.uhn.hl7v2.app.ServerConfiguration;
35  import ca.uhn.hl7v2.conf.store.CodeStoreRegistry;
36  import ca.uhn.hl7v2.conf.store.ProfileStore;
37  import ca.uhn.hl7v2.llp.LowerLayerProtocol;
38  import ca.uhn.hl7v2.model.Message;
39  import ca.uhn.hl7v2.parser.*;
40  import ca.uhn.hl7v2.util.SocketFactory;
41  import ca.uhn.hl7v2.validation.ValidationContext;
42  import ca.uhn.hl7v2.validation.ValidationExceptionHandlerFactory;
43  import ca.uhn.hl7v2.validation.Validator;
44  import ca.uhn.hl7v2.validation.builder.ValidationRuleBuilder;
45  
46  /**
47   * Abstract base class for subclasses supporting the access to a HapiContext.
48   * 
49   * @author Christian Ohr
50   */
51  public abstract class HapiContextSupport {
52  
53  	private HapiContext context;
54  
55  	public HapiContextSupport(HapiContext context) {
56  		super();
57  		this.context = context;
58  	}
59  
60  	/**
61  	 * Returns a unmodifiable instance of HapiContext
62  	 */
63  	public final HapiContext getHapiContext() {
64  		return unmodifiableContext(context);
65  	}
66  
67  	/**
68  	 * Only for internal purposes: associate a new {@link HapiContext} with an existing
69  	 * service object.
70  	 * 
71  	 * @param context new {@link HapiContext}
72  	 */
73  	protected void setHapiContext(HapiContext context) {
74  		this.context = context;
75  	}
76  
77  	/**
78  	 * Supports the intention that HapiContext instances should not be altered e.g. from within a
79  	 * Parser instance, but only explicitly from where the HapiContext instance is actually owned.
80  	 * 
81  	 * @param context context to be made unmodifiable
82  	 * @return an unmodifiable HapiContext
83  	 */
84  	private static HapiContext/hl7v2/HapiContext.html#HapiContext">HapiContext unmodifiableContext(HapiContext context) {
85  		return new UnmodifiableHapiContext(context);
86  	}
87  
88  	private static class UnmodifiableHapiContext implements HapiContext {
89  
90  		private final HapiContext context;
91  		
92  		public UnmodifiableHapiContext(HapiContext context) {
93  			this.context = context;
94  		}
95  
96  		public CodeStoreRegistry getCodeStoreRegistry() {
97              return context.getCodeStoreRegistry();
98          }
99  
100 		public ca.uhn.hl7v2.conf.check.Validator getConformanceValidator() {
101             return context.getConformanceValidator();
102         }
103 
104         /**
105          * @deprecated
106          */
107 		public ConnectionHub getConnectionHub() {
108 			return context.getConnectionHub();
109 		}
110 
111 		public ExecutorService getExecutorService() {
112 			return context.getExecutorService();
113 		}
114 
115 		public GenericParser getGenericParser() {
116 			return context.getGenericParser();
117 		}
118 
119 		public LowerLayerProtocol getLowerLayerProtocol() {
120 			return context.getLowerLayerProtocol();
121 		}
122 
123 		public <R> Validator<R> getMessageValidator() {
124 			return context.getMessageValidator();
125 		}
126 
127 		public ModelClassFactory getModelClassFactory() {
128 			return context.getModelClassFactory();
129 		}
130 
131 		public ParserConfiguration getParserConfiguration() {
132 			return context.getParserConfiguration();
133 		}
134 
135 		public PipeParser getPipeParser() {
136 			return context.getPipeParser();
137 		}
138 
139 		public ProfileStore getProfileStore() {
140             return context.getProfileStore();
141         }
142 
143 		public SocketFactory getSocketFactory() {
144 			return context.getSocketFactory();
145 		}
146 
147 		public ValidationContext getValidationContext() {
148 			return context.getValidationContext();
149 		}
150 
151 		public <R> ValidationExceptionHandlerFactory<R> getValidationExceptionHandlerFactory() {
152 			return context.getValidationExceptionHandlerFactory();
153 		}
154 
155 		public ValidationRuleBuilder getValidationRuleBuilder() {
156 			return context.getValidationRuleBuilder();
157 		}
158 
159 		public XMLParser getXMLParser() {
160 			return context.getXMLParser();
161 		}
162 
163 		public Connection newClient(String host, int port, boolean tls) throws HL7Exception {
164 			return context.newClient(host, port, tls);
165 		}
166 
167         public Connection newClient(String host, int outboundPort, int inboundPort, boolean tls) throws HL7Exception {
168 			return context.newClient(host, outboundPort, inboundPort, tls);
169 		}
170 
171         public Connection newLazyClient(String host, int port, boolean tls) throws HL7Exception {
172             return context.newLazyClient(host, port, tls);
173         }
174 
175         public Connection newLazyClient(String host, int outboundPort, int inboundPort, boolean tls) throws HL7Exception {
176             return context.newLazyClient(host, outboundPort, inboundPort, tls);
177         }
178 
179         public HL7Service newServer(int port, boolean tls) {
180 			return context.newServer(port, tls);
181 		}
182 
183 		public HL7Service newServer(int port, boolean tls, boolean acceptAll){
184 			return context.newServer(port, tls, acceptAll);	
185 		}
186 
187         public HL7Service newServer(int inboundPort, int outboundPort, boolean tls) {
188 			return context.newServer(inboundPort, outboundPort, tls);
189 		}
190 
191         public Message newMessage(String eventType, String triggerEvent, Version version) throws HL7Exception {
192             return context.newMessage(eventType, triggerEvent, version);
193         }
194 
195         public <T extends Message> T newMessage(Class<T> clazz) throws HL7Exception {
196             return context.newMessage(clazz);
197         }
198 
199         public void setCodeStoreRegistry(CodeStoreRegistry store) {
200             throw new UnsupportedOperationException("Read-only instance");
201         }
202 
203         public void setExecutorService(ExecutorService executorService) {
204 			throw new UnsupportedOperationException("Read-only instance");
205 		}
206         
207         public void setLowerLayerProtocol(LowerLayerProtocol llp) {
208 			throw new UnsupportedOperationException("Read-only instance");
209 		}
210 
211 		public void setModelClassFactory(ModelClassFactory modelClassFactory) {
212 			throw new UnsupportedOperationException("Read-only instance");
213 		}
214 
215 		public void setParserConfiguration(ParserConfiguration configuration) {
216 			throw new UnsupportedOperationException("Read-only instance");
217 		}
218 
219 		public void setProfileStore(ProfileStore store) {
220             throw new UnsupportedOperationException("Read-only instance");
221         }
222 
223 		public void setSocketFactory(SocketFactory socketFactory) {
224 			throw new UnsupportedOperationException("Read-only instance");
225 		}
226 
227 		public void setValidationContext(String contextClassName) {
228 			throw new UnsupportedOperationException("Read-only instance");
229 		}
230 
231 		public void setValidationContext(ValidationContext context) {
232 			throw new UnsupportedOperationException("Read-only instance");
233 		}
234 
235 		public <R> void setValidationExceptionHandlerFactory(
236 				ValidationExceptionHandlerFactory<R> factory) {
237 			context.setValidationExceptionHandlerFactory(factory);
238 		}
239 
240 		public void setValidationRuleBuilder(String builderClassName) {
241 			throw new UnsupportedOperationException("Read-only instance");
242 		}
243 
244 		public void setValidationRuleBuilder(ValidationRuleBuilder ruleBuilder) {
245 			throw new UnsupportedOperationException("Read-only instance");
246 		}
247 
248 		public ServerConfiguration getServerConfiguration() {
249 			return context.getServerConfiguration();
250 		}
251 
252 		public void setServerConfiguration(ServerConfiguration theServerConfiguration) {
253 			throw new UnsupportedOperationException("Read-only instance");
254 		}
255 
256         public void close() throws IOException {
257             context.close();
258         }
259     }
260 
261 }