source: ccr/trunk/nhin-vista/projects/NHINC/Current/Product/Production/Gateway/SubscriptionDteEjb/src/java/gov/hhs/fha/nhinc/subscription/dte/NhinSubscribeBuilder.java@ 507

Last change on this file since 507 was 507, checked in by George Lilly, 15 years ago

NHIN gateway and adaptor for use on linux with VistA EHR and RPMS

File size: 11.2 KB
Line 
1package gov.hhs.fha.nhinc.subscription.dte;
2
3//import gov.hhs.fha.nhinc.NHINCLib.NullChecker;
4import gov.hhs.fha.nhinc.common.subscription.CriterionType;
5import gov.hhs.fha.nhinc.common.subscription.KeyValuePairType;
6import gov.hhs.fha.nhinc.common.subscription.SubscriptionItemType;
7import gov.hhs.fha.nhinc.nhinclib.NullChecker;
8import gov.hhs.fha.nhinc.util.format.DocumentClassCodeParser;
9import gov.hhs.healthit.nhin.cdc.CdcBioPackageSubscriptionCriteriaType;
10import gov.hhs.healthit.nhin.cdc.CdcBioPackageSubscriptionCriteriaType.Frequency;
11import gov.hhs.healthit.nhin.cdc.MessageTypesType;
12import java.math.BigInteger;
13import java.util.ArrayList;
14import java.util.List;
15import javax.xml.bind.JAXBElement;
16//import javax.xml.parsers.DocumentBuilderFactory;
17//import javax.xml.parsers.ParserConfigurationException;
18import javax.xml.ws.wsaddressing.W3CEndpointReference;
19//import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
20import oasis.names.tc.ebxml_regrep.xsd.rim._3.AdhocQueryType;
21import oasis.names.tc.ebxml_regrep.xsd.rim._3.SlotType1;
22import oasis.names.tc.ebxml_regrep.xsd.rim._3.ValueListType;
23import org.oasis_open.docs.wsn.b_2.FilterType;
24import org.oasis_open.docs.wsn.b_2.Subscribe;
25
26//import gov.hhs.healthit.nhin.cdc.CdcBioPackageSubscriptionCriteriaType.Frequency;
27import org.oasis_open.docs.wsn.b_2.Subscribe.SubscriptionPolicy;
28//import gov.hhs.healthit.nhin.cdc.MessageTypesType;
29//import oasis.names.tc.ebxml_regrep.xsd.rim._3.SlotType1;
30//import oasis.names.tc.ebxml_regrep.xsd.rim._3.ValueListType;
31//
32//import gov.hhs.fha.nhinc.subscription.*;
33//import gov.hhs.fha.nhinc.util.format.DocumentClassCodeParser;
34//import gov.hhs.healthit.nhin.cdc.CdcBioPackageSubscriptionCriteriaType;
35//import java.math.BigInteger;
36//import java.util.ArrayList;
37//import java.util.List;
38//import javax.xml.bind.JAXBElement;
39//import javax.xml.parsers.DocumentBuilderFactory;
40//import javax.xml.parsers.ParserConfigurationException;
41//import javax.xml.ws.wsaddressing.W3CEndpointReference;
42//import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
43//import oasis.names.tc.ebxml_regrep.xsd.rim._3.AdhocQueryType;
44//import oasis.names.tc.ebxml_regrep.xsd.rim._3.AdhocQueryType;
45//import oasis.names.tc.ebxml_regrep.xsd.rim._3.SlotType1;
46//import org.oasis_open.docs.wsn.b_2.*;
47//import org.oasis_open.docs.wsn.b_2.Subscribe.SubscriptionPolicy;
48/**
49 *
50 * @author rayj
51 */
52public class NhinSubscribeBuilder {
53
54 private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(NhinSubscribeBuilder.class);
55
56 public static Subscribe transformInternalSubscriptionItemToNhinSubscribe(SubscriptionItemType subscriptionItem) {
57 log.debug("begin transformInternalSubscriptionItemToNhinSubscribe");
58 Subscribe nhinSubscribe = null;
59
60 String topic = TopicHelper.GetTopicValue(subscriptionItem);
61 if (topic == null) {
62 topic = "";
63 }
64 if (topic.contentEquals("nhin-cdc:CdcBioPackage")) {
65 nhinSubscribe = transformInternalSubscriptionItemToNhinSubscribeCdc(subscriptionItem);
66 } else {
67 nhinSubscribe = transformInternalSubscriptionItemToNhinSubscribeDocument(subscriptionItem);
68 }
69
70 log.debug("end transformInternalSubscriptionItemToNhinSubscribe");
71 return nhinSubscribe;
72 }
73
74 public static Subscribe transformInternalSubscriptionItemToNhinSubscribeCdc(SubscriptionItemType subscriptionItem) {
75 log.debug("begin transformInternalSubscriptionItemToNhinSubscribeCdc");
76 Subscribe nhinSubscribe = new Subscribe();
77
78 String notificationConsumerEndpointAddress = Configuration.getlocalNotificationConsumerEndpointAddress();
79 String userAddress = SubscriptionItemHelper.getSubscriberUserAddress(subscriptionItem);
80 AppendConsumerReference(nhinSubscribe, notificationConsumerEndpointAddress, userAddress);
81
82 //filter
83 gov.hhs.fha.nhinc.common.subscription.TopicExpressionType internalTopic = TopicHelper.GetTopic(subscriptionItem);
84 if (internalTopic == null) {
85 internalTopic = TopicBuilder.createCdcBioPackageTopic();
86 }
87 FilterType filter = new FilterType();
88 org.oasis_open.docs.wsn.b_2.TopicExpressionType topicExpression = new org.oasis_open.docs.wsn.b_2.TopicExpressionType();
89
90 topicExpression.setDialect(internalTopic.getDialect());
91 topicExpression.getContent().add(internalTopic.getValue());
92
93 org.oasis_open.docs.wsn.b_2.ObjectFactory factory = new org.oasis_open.docs.wsn.b_2.ObjectFactory();
94 JAXBElement<org.oasis_open.docs.wsn.b_2.TopicExpressionType> topicExpressionJB = factory.createTopicExpression(topicExpression);
95 filter.getAny().add(topicExpressionJB);
96 nhinSubscribe.setFilter(filter);
97
98 //subscription policy
99 SubscriptionPolicy nhinSubscriptionPolicy = new SubscriptionPolicy();
100 CdcBioPackageSubscriptionCriteriaType subscriptionCriteria = new CdcBioPackageSubscriptionCriteriaType();
101
102 Frequency frequency = new Frequency();
103 subscriptionCriteria.setFrequency(frequency);
104
105 MessageTypesType messageTypes = new MessageTypesType();
106 subscriptionCriteria.setMessageTypes(messageTypes);
107 BigInteger valueNumeric;
108
109 for (KeyValuePairType policyItem : subscriptionItem.getSubscriptionCriteria().getSubscriptionPolicy().getGenericPolicyItems().getKeyValuePair()) {
110 if ("FrequenceUnits".contentEquals(policyItem.getKey())) {
111 valueNumeric = convertToBigInteger(policyItem.getValue());
112 frequency.setFrequencyUnits(valueNumeric);
113 } else if ("FrequenceDuration".contentEquals(policyItem.getKey())) {
114 frequency.setFrequencyDuration(policyItem.getValue());
115 } else if ("SizeThreshold".contentEquals(policyItem.getKey())) {
116 valueNumeric = convertToBigInteger(policyItem.getValue());
117 subscriptionCriteria.setSizeThreshold(valueNumeric);
118 } else if ("MessageType".contentEquals(policyItem.getKey())) {
119 subscriptionCriteria.getMessageTypes().getMessageType().add(policyItem.getValue());
120 } else {
121 }
122 }
123
124 gov.hhs.healthit.nhin.cdc.ObjectFactory cdcSubscriptionCriteriaFactory = new gov.hhs.healthit.nhin.cdc.ObjectFactory();
125 JAXBElement<CdcBioPackageSubscriptionCriteriaType> subscriptionCriteriaJB = cdcSubscriptionCriteriaFactory.createCdcBioPackageSubscriptionCriteria(subscriptionCriteria);
126
127 nhinSubscriptionPolicy.getAny().add(subscriptionCriteriaJB);
128 nhinSubscribe.setSubscriptionPolicy(nhinSubscriptionPolicy);
129
130 log.debug("end transformInternalSubscriptionItemToNhinSubscribeCdc");
131 return nhinSubscribe;
132 }
133
134 private static BigInteger convertToBigInteger(String value) {
135 BigInteger valueNumericBigInteger = new BigInteger(value);
136 return valueNumericBigInteger;
137 }
138
139 public static Subscribe transformInternalSubscriptionItemToNhinSubscribeDocument(SubscriptionItemType subscriptionItem) {
140 log.debug("begin transformInternalSubscriptionItemToNhinSubscribeDocument");
141 Subscribe nhinSubscribe = new Subscribe();
142
143 String notificationConsumerEndpointAddress = Configuration.getlocalNotificationConsumerEndpointAddress();
144 String userAddress = SubscriptionItemHelper.getSubscriberUserAddress(subscriptionItem);
145 AppendConsumerReference(nhinSubscribe, notificationConsumerEndpointAddress, userAddress);
146
147 // Add topic expression
148 //filter
149 gov.hhs.fha.nhinc.common.subscription.TopicExpressionType internalTopic = TopicHelper.GetTopic(subscriptionItem);
150 if (internalTopic == null) {
151 internalTopic = TopicBuilder.createDocumentTopic();
152 }
153 FilterType filter = new FilterType();
154 org.oasis_open.docs.wsn.b_2.TopicExpressionType topicExpression = new org.oasis_open.docs.wsn.b_2.TopicExpressionType();
155
156 topicExpression.setDialect(internalTopic.getDialect());
157 topicExpression.getContent().add(internalTopic.getValue());
158
159 org.oasis_open.docs.wsn.b_2.ObjectFactory wsntFactory = new org.oasis_open.docs.wsn.b_2.ObjectFactory();
160 JAXBElement<org.oasis_open.docs.wsn.b_2.TopicExpressionType> topicExpressionJB = wsntFactory.createTopicExpression(topicExpression);
161 filter.getAny().add(topicExpressionJB);
162 nhinSubscribe.setFilter(filter);
163
164 //begin adhoc query
165 oasis.names.tc.ebxml_regrep.xsd.rim._3.ObjectFactory factory = new oasis.names.tc.ebxml_regrep.xsd.rim._3.ObjectFactory();
166 AdhocQueryType adhocQuery = factory.createAdhocQueryType();
167
168 adhocQuery.setId(Constants.AdhocQueryId);
169
170 String adhocQueryFormttedPatientId = SubscriptionItemHelper.getSubscriptionCriteriaSubscribeePatientInAdhocQueryFormat(subscriptionItem);
171 if (NullChecker.isNotNullish(adhocQueryFormttedPatientId)) {
172 adhocQuery.getSlot().add(SlotTypeFactory(Constants.PatientIdSlotName, adhocQueryFormttedPatientId));
173 }
174
175
176
177 List<String> documentClassCodeList = new ArrayList<String>();
178 List<CriterionType> criterionList = extractCriterionList(subscriptionItem);
179 if (criterionList != null) {
180 for (CriterionType criterion : criterionList) {
181 if (criterion.getKey().contentEquals(Constants.DocumentClassCodeSlotName)) {
182 documentClassCodeList.add(criterion.getValue());
183 }
184 }
185 }
186 String documentClassCode = DocumentClassCodeParser.buildDocumentClassCodeItem(documentClassCodeList);
187 SlotType1 slot = SlotTypeFactory(Constants.DocumentClassCodeSlotName, documentClassCode);
188 adhocQuery.getSlot().add(slot);
189
190 AppendAdhocQuery(nhinSubscribe, adhocQuery);
191
192 log.debug("end transformInternalSubscriptionItemToNhinSubscribeDocument");
193 return nhinSubscribe;
194 }
195
196 private static List<CriterionType> extractCriterionList(SubscriptionItemType subscriptionItem) {
197 List<CriterionType> criterionList = null;
198 if (subscriptionItem != null && subscriptionItem.getSubscriptionCriteria() != null && subscriptionItem.getSubscriptionCriteria().getCriteria() != null) {
199 criterionList = subscriptionItem.getSubscriptionCriteria().getCriteria().getCriterion();
200 }
201 return criterionList;
202 }
203
204 public static void AppendAdhocQuery(Subscribe subscribe, AdhocQueryType adhocQuery) {
205 oasis.names.tc.ebxml_regrep.xsd.rim._3.ObjectFactory factory = new oasis.names.tc.ebxml_regrep.xsd.rim._3.ObjectFactory();
206 JAXBElement<AdhocQueryType> adhodQueryElem = factory.createAdhocQuery(adhocQuery);
207 subscribe.getAny().add(adhodQueryElem);
208 }
209
210 public static void AppendConsumerReference(Subscribe subscribe, String notificationConsumerEndpointAddress, String userAddress) {
211 W3CEndpointReference ref = ConsumerReferenceHelper.CreateConsumerReference(notificationConsumerEndpointAddress, userAddress);
212 subscribe.setConsumerReference(ref);
213 }
214
215 public static SlotType1 SlotTypeFactory(String slotName, String slotValue) {
216 SlotType1 slot = new SlotType1();
217 slot.setName(slotName);
218
219 ValueListType valueList = new ValueListType();
220 slot.setValueList(valueList);
221
222 valueList.getValue().add(slotValue);
223
224 return slot;
225 }
226}
Note: See TracBrowser for help on using the repository browser.