View Javadoc
1   /*
2    * Copyright 2012 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.commons.ihe.xds.core.transform.requests.query;
17  
18  import org.openehealth.ipf.commons.ihe.xds.core.ebxml.EbXMLAdhocQueryRequest;
19  import org.openehealth.ipf.commons.ihe.xds.core.requests.query.DocumentsQuery;
20  
21  import static org.openehealth.ipf.commons.ihe.xds.core.metadata.Timestamp.toHL7;
22  import static org.openehealth.ipf.commons.ihe.xds.core.transform.requests.QueryParameter.*;
23  
24  /**
25   * Transforms between an {@link DocumentsQuery} derivative and {@link EbXMLAdhocQueryRequest}.
26   * @author Jens Riemschneider
27   */
28  abstract class DocumentsQueryTransformer<T extends DocumentsQuery> extends AbstractStoredQueryTransformer<T> {
29  
30      /**
31       * Transforms the query into its ebXML representation.
32       * <p>
33       * Does not perform any transformation if one of the parameters is <code>null</code>. 
34       * @param query
35       *          the query. Can be <code>null</code>.
36       * @param ebXML
37       *          the ebXML representation. Can be <code>null</code>.
38       */
39      public void toEbXML(T query, EbXMLAdhocQueryRequest ebXML) {
40          if (query == null || ebXML == null) {
41              return;
42          }
43  
44          super.toEbXML(query, ebXML);
45  
46          QuerySlotHelper slots = new QuerySlotHelper(ebXML);
47          
48          slots.fromStringList(DOC_ENTRY_AUTHOR_PERSON, query.getAuthorPersons());
49  
50          slots.fromNumber(DOC_ENTRY_CREATION_TIME_FROM, toHL7(query.getCreationTime().getFrom()));
51          slots.fromNumber(DOC_ENTRY_CREATION_TIME_TO, toHL7(query.getCreationTime().getTo()));
52  
53          slots.fromNumber(DOC_ENTRY_SERVICE_START_TIME_FROM, toHL7(query.getServiceStartTime().getFrom()));
54          slots.fromNumber(DOC_ENTRY_SERVICE_START_TIME_TO, toHL7(query.getServiceStartTime().getTo()));
55          
56          slots.fromNumber(DOC_ENTRY_SERVICE_STOP_TIME_FROM, toHL7(query.getServiceStopTime().getFrom()));
57          slots.fromNumber(DOC_ENTRY_SERVICE_STOP_TIME_TO, toHL7(query.getServiceStopTime().getTo()));
58  
59          slots.fromCode(DOC_ENTRY_FORMAT_CODE, query.getFormatCodes());
60          slots.fromCode(DOC_ENTRY_CLASS_CODE, query.getClassCodes());
61          slots.fromCode(DOC_ENTRY_TYPE_CODE, query.getTypeCodes());
62          slots.fromCode(DOC_ENTRY_HEALTHCARE_FACILITY_TYPE_CODE, query.getHealthcareFacilityTypeCodes());
63          slots.fromCode(DOC_ENTRY_PRACTICE_SETTING_CODE, query.getPracticeSettingCodes());
64          slots.fromCode(DOC_ENTRY_EVENT_CODE, query.getEventCodes());
65          slots.fromCode(DOC_ENTRY_CONFIDENTIALITY_CODE, query.getConfidentialityCodes());
66      }
67      
68      /**
69       * Transforms the ebXML representation of a query into a query object.
70       * <p>
71       * Does not perform any transformation if one of the parameters is <code>null</code>. 
72       * @param query
73       *          the query. Can be <code>null</code>.
74       * @param ebXML
75       *          the ebXML representation. Can be <code>null</code>.
76       */
77      public void fromEbXML(T query, EbXMLAdhocQueryRequest ebXML) {
78          if (query == null || ebXML == null) {
79              return;
80          }
81  
82          super.fromEbXML(query, ebXML);
83  
84          QuerySlotHelper slots = new QuerySlotHelper(ebXML);
85          
86          query.setClassCodes(slots.toCodeList(DOC_ENTRY_CLASS_CODE));
87          query.setTypeCodes(slots.toCodeList(DOC_ENTRY_TYPE_CODE));
88          query.setPracticeSettingCodes(slots.toCodeList(DOC_ENTRY_PRACTICE_SETTING_CODE));
89          query.setHealthcareFacilityTypeCodes(slots.toCodeList(DOC_ENTRY_HEALTHCARE_FACILITY_TYPE_CODE));
90          query.setFormatCodes(slots.toCodeList(DOC_ENTRY_FORMAT_CODE));
91  
92          query.setEventCodes(slots.toCodeQueryList(DOC_ENTRY_EVENT_CODE, DOC_ENTRY_EVENT_CODE_SCHEME));
93          query.setConfidentialityCodes(slots.toCodeQueryList(DOC_ENTRY_CONFIDENTIALITY_CODE, DOC_ENTRY_CONFIDENTIALITY_CODE_SCHEME));
94          
95          query.setAuthorPersons(slots.toStringList(DOC_ENTRY_AUTHOR_PERSON));
96          
97          query.getCreationTime().setFrom(slots.toNumber(DOC_ENTRY_CREATION_TIME_FROM));
98          query.getCreationTime().setTo(slots.toNumber(DOC_ENTRY_CREATION_TIME_TO));
99          
100         query.getServiceStartTime().setFrom(slots.toNumber(DOC_ENTRY_SERVICE_START_TIME_FROM));
101         query.getServiceStartTime().setTo(slots.toNumber(DOC_ENTRY_SERVICE_START_TIME_TO));
102 
103         query.getServiceStopTime().setFrom(slots.toNumber(DOC_ENTRY_SERVICE_STOP_TIME_FROM));
104         query.getServiceStopTime().setTo(slots.toNumber(DOC_ENTRY_SERVICE_STOP_TIME_TO));
105     }
106 }