View Javadoc
1   /*
2    * Copyright 2010 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *     
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.openehealth.ipf.platform.camel.ihe.hl7v3;
17  
18  import org.apache.camel.Exchange;
19  import org.apache.camel.Processor;
20  import org.openehealth.ipf.commons.ihe.hl7v3.Hl7v3InteractionId;
21  import org.openehealth.ipf.commons.xml.CombinedXmlValidator;
22  
23  import static org.openehealth.ipf.commons.ihe.hl7v3.PDQV3.Interactions.ITI_47;
24  import static org.openehealth.ipf.commons.ihe.hl7v3.PIXV3.Interactions.ITI_44_PIX;
25  import static org.openehealth.ipf.commons.ihe.hl7v3.PIXV3.Interactions.ITI_45;
26  import static org.openehealth.ipf.commons.ihe.hl7v3.PIXV3.Interactions.ITI_46;
27  import static org.openehealth.ipf.commons.ihe.hl7v3.QED.Interactions.PCC_1;
28  import static org.openehealth.ipf.commons.ihe.hl7v3.XCPD.Interactions.ITI_55;
29  import static org.openehealth.ipf.commons.ihe.hl7v3.XCPD.Interactions.ITI_56;
30  import static org.openehealth.ipf.platform.camel.core.adapter.ValidatorAdapter.validationEnabled;
31  
32  /**
33   * Validating processors for HL7v3-based IPF components.
34   * @author Dmytro Rud
35   */
36  abstract public class PixPdqV3CamelValidators {
37      private static final CombinedXmlValidator VALIDATOR = new CombinedXmlValidator();
38  
39      private static final Processor ITI_44_REQUEST_VALIDATOR  = validatingProcessor(ITI_44_PIX, true);
40      private static final Processor ITI_44_RESPONSE_VALIDATOR = validatingProcessor(ITI_44_PIX, false);
41      private static final Processor ITI_45_REQUEST_VALIDATOR  = validatingProcessor(ITI_45, true);
42      private static final Processor ITI_45_RESPONSE_VALIDATOR = validatingProcessor(ITI_45, false);
43      private static final Processor ITI_46_REQUEST_VALIDATOR  = validatingProcessor(ITI_46, true);
44      private static final Processor ITI_46_RESPONSE_VALIDATOR = validatingProcessor(ITI_46, false);
45      private static final Processor ITI_47_REQUEST_VALIDATOR  = validatingProcessor(ITI_47, true);
46      private static final Processor ITI_47_RESPONSE_VALIDATOR = validatingProcessor(ITI_47, false);
47  
48      private static final Processor ITI_55_REQUEST_VALIDATOR  = validatingProcessor(ITI_55, true);
49      private static final Processor ITI_55_RESPONSE_VALIDATOR = validatingProcessor(ITI_55, false);
50      private static final Processor ITI_56_REQUEST_VALIDATOR  = validatingProcessor(ITI_56, true);
51      private static final Processor ITI_56_RESPONSE_VALIDATOR = validatingProcessor(ITI_56, false);
52  
53      private static final Processor PCC_1_REQUEST_VALIDATOR   = validatingProcessor(PCC_1, true);
54      private static final Processor PCC_1_RESPONSE_VALIDATOR  = validatingProcessor(PCC_1, false);
55  
56      
57      /**
58       * Returns a validating processor for ITI-44 request messages
59       * (Patient Identity Feed v3).
60       */
61      public static Processor iti44RequestValidator() {
62          return ITI_44_REQUEST_VALIDATOR;
63      }
64      
65      /**
66       * Returns a validating processor for ITI-44 response messages
67       * (Patient Identity Feed v3).
68       */
69      public static Processor iti44ResponseValidator() {
70          return ITI_44_RESPONSE_VALIDATOR;
71      }
72  
73      /**
74       * Returns a validating processor for ITI-45 request messages
75       * (Patient Identity Query v3).
76       */
77      public static Processor iti45RequestValidator() {
78          return ITI_45_REQUEST_VALIDATOR;
79      }
80      
81      /**
82       * Returns a validating processor for ITI-45 response messages
83       * (Patient Identity Query v3).
84       */
85      public static Processor iti45ResponseValidator() {
86          return ITI_45_RESPONSE_VALIDATOR;
87      }
88  
89      /**
90       * Returns a validating processor for ITI-46 request messages
91       * (Patient Identity Update Notification v3).
92       */
93      public static Processor iti46RequestValidator() {
94          return ITI_46_REQUEST_VALIDATOR;
95      }
96      
97      /**
98       * Returns a validating processor for ITI-46 response messages
99       * (Patient Identity Update Notification v3).
100      */
101     public static Processor iti46ResponseValidator() {
102         return ITI_46_RESPONSE_VALIDATOR;
103     }
104 
105     /**
106      * Returns a validating processor for ITI-47 request messages
107      * (Patient Demographics Query v3).
108      */
109     public static Processor iti47RequestValidator() {
110         return ITI_47_REQUEST_VALIDATOR;
111     }
112     
113     /**
114      * Returns a validating processor for ITI-47 response messages
115      * (Patient Demographics Query v3).
116      */
117     public static Processor iti47ResponseValidator() {
118         return ITI_47_RESPONSE_VALIDATOR;
119     }
120     
121     /**
122      * Returns a validating processor for ITI-55 request messages
123      * (Cross-Gateway Patient Discovery).
124      */
125     public static Processor iti55RequestValidator() {
126         return ITI_55_REQUEST_VALIDATOR;
127     }
128 
129     /**
130      * Returns a validating processor for ITI-55 response messages
131      * (Cross-Gateway Patient Discovery).
132      */
133     public static Processor iti55ResponseValidator() {
134         return ITI_55_RESPONSE_VALIDATOR;
135     }
136 
137     /**
138      * Returns a validating processor for ITI-56 request messages
139      * (Patient Location Query).
140      */
141     public static Processor iti56RequestValidator() {
142         return ITI_56_REQUEST_VALIDATOR;
143     }
144 
145     /**
146      * Returns a validating processor for ITI-56 response messages
147      * (Patient Location Query).
148      */
149     public static Processor iti56ResponseValidator() {
150         return ITI_56_RESPONSE_VALIDATOR;
151     }
152 
153     /**
154      * Returns a validating processor for PCC-1 request messages
155      * (Query for Existing Data).
156      */
157     public static Processor pcc1RequestValidator() {
158         return PCC_1_REQUEST_VALIDATOR;
159     }
160 
161     /**
162      * Returns a validating processor for PCC-1 response messages
163      * (Query for Existing Data).
164      */
165     public static Processor pcc1ResponseValidator() {
166         return PCC_1_RESPONSE_VALIDATOR;
167     }
168 
169 
170     private static Processor validatingProcessor(
171             final Hl7v3InteractionId interactionId,
172             final boolean request)
173     {
174         return exchange -> doValidation(exchange, interactionId, request);
175     }
176 
177     private static void doValidation(
178             Exchange exchange,
179             Hl7v3InteractionId interactionId,
180             boolean request)
181     {
182         if (! validationEnabled(exchange)) {
183             return;
184         }
185         String message = exchange.getIn().getBody(String.class);
186         VALIDATOR.validate(message, request
187                 ? interactionId.getRequestValidationProfile()
188                 : interactionId.getResponseValidationProfile());
189     }
190 }