source: ccr/trunk/nhin-vista/projects/NHINC/Current/Product/Production/Gateway/SubscriptionRepository/src/gov/hhs/fha/nhinc/subscription/repository/manager/Manager.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: 9.1 KB
Line 
1package gov.hhs.fha.nhinc.subscription.repository.manager;
2
3import gov.hhs.fha.nhinc.properties.PropertyAccessException;
4import gov.hhs.fha.nhinc.subscription.repository.SubscriptionRepositoryException;
5import gov.hhs.fha.nhinc.subscription.repository.data.ReferenceParameter;
6import gov.hhs.fha.nhinc.subscription.repository.data.SubscriptionItem;
7import gov.hhs.fha.nhinc.subscription.repository.data.SubscriptionRecord;
8import gov.hhs.fha.nhinc.subscription.repository.data.SubscriptionRecordList;
9import gov.hhs.fha.nhinc.subscription.repository.data.SubscriptionReference;
10import gov.hhs.fha.nhinc.properties.PropertyAccessor;
11import gov.hhs.fha.nhinc.connectmgr.ConnectionManagerCache;
12import gov.hhs.fha.nhinc.connectmgr.data.CMBusinessEntity;
13import gov.hhs.fha.nhinc.connectmgr.data.CMBusinessService;
14import java.util.Iterator;
15import org.apache.commons.logging.Log;
16import org.apache.commons.logging.LogFactory;
17
18/**
19 * Data manager for file-based subscriptions.
20 *
21 * @author dunnek
22 */
23public class Manager {
24
25 private static Log log = LogFactory.getLog(DataSaver.class);
26 public static final String CONST_DEFAULT_SUBSCRIBE_LIST = "subscriptionList.xml";
27 private static final String CONST_UNSUBSCRIBE_SERVICE_NAME = "subscriptionmanager";
28
29 // Initalize to defalut list
30 private static String dataSource = CONST_DEFAULT_SUBSCRIBE_LIST;
31
32 /**
33 * Default constructor - the default subscription list is used.
34 */
35 public Manager() {
36 super();
37 }
38
39 /**
40 * Parameterized constructor
41 *
42 * @param dataSourceName File name to use for the subscription list
43 */
44 public Manager(String dataSourceName) {
45 dataSource = dataSourceName;
46 }
47
48 /**
49 * Load the default subscription list
50 *
51 * @return Subscription list
52 */
53 public SubscriptionRecordList loadSubscriptionList() {
54 return new DataSaver().loadList(dataSource);
55 }
56
57 /**
58 * Load a subscription list using the provided source name
59 *
60 * @param dataSourceName Name of the file containing the subscriptions
61 * @return Subscription list
62 */
63 public SubscriptionRecordList loadSubscriptionList(String dataSourceName) {
64 return new DataSaver().loadList(dataSourceName);
65 }
66
67 /**
68 * Add a subscription to the default subscription list
69 *
70 * @param subscriptionRecord New subscription record to add
71 */
72 public void addSubscription(SubscriptionRecord subscriptionRecord) {
73 SubscriptionRecordList subscriptions;
74
75 subscriptions = loadSubscriptionList(dataSource);
76
77 addSubscription(subscriptionRecord, subscriptions);
78 }
79
80 /**
81 * Add a subscription to the provided subscription list
82 *
83 * @param subscriptionRecord New subscription record
84 * @param subscriptionRecordList Subscription record list
85 */
86 public void addSubscription(SubscriptionRecord subscriptionRecord, SubscriptionRecordList subscriptionRecordList) {
87 String subscriptionId = null;
88 CMBusinessEntity oCMBusinessEntity = null;
89 String url = null;
90 String myCommunityId = null;
91
92 if ((subscriptionRecord != null) && (subscriptionRecord.getSubscription() != null)) {
93 SubscriptionItem subscriptionItem = subscriptionRecord.getSubscription();
94
95 SubscriptionReference subscriptionReference = subscriptionItem.getSubscriptionReference();
96 if (subscriptionReference == null) {
97 subscriptionReference = new SubscriptionReference();
98 subscriptionItem.setSubscriptionReference(subscriptionReference);
99 subscriptionId = generateSubscriptionId();
100 ReferenceParameter param = new ReferenceParameter();
101 param.setNamespacePrefix("nhin");
102 param.setNamespace("http://www.hhs.gov/healthit/nhin");
103 param.setElementName("SubscriptionId");
104 param.setValue(subscriptionId);
105 try {
106 subscriptionReference.addReferenceParameter(param);
107 } catch (SubscriptionRepositoryException ex) {
108 log.error("Error adding subscription reference parameter to list", ex);
109 }
110
111 try {
112 myCommunityId = PropertyAccessor.getProperty("gateway", "localHomeCommunityId");
113 if (myCommunityId != null) {
114 try {
115 oCMBusinessEntity = ConnectionManagerCache.getBusinessEntityByServiceName(myCommunityId, CONST_UNSUBSCRIBE_SERVICE_NAME);
116 if (oCMBusinessEntity != null &&
117 oCMBusinessEntity.getBusinessServices() != null &&
118 oCMBusinessEntity.getBusinessServices().getBusinessService() != null &&
119 oCMBusinessEntity.getBusinessServices().getBusinessService().size() > 0 &&
120 oCMBusinessEntity.getBusinessServices().getBusinessService().get(0) != null) {
121 CMBusinessService busService = oCMBusinessEntity.getBusinessServices().getBusinessService().get(0);
122
123 if (busService != null &&
124 busService.getBindingTemplates() != null &&
125 busService.getBindingTemplates().getBindingTemplate() != null &&
126 busService.getBindingTemplates().getBindingTemplate().size() > 0 &&
127 busService.getBindingTemplates().getBindingTemplate().get(0) != null &&
128 busService.getBindingTemplates().getBindingTemplate().get(0).getEndpointURL() != null &&
129 busService.getBindingTemplates().getBindingTemplate().get(0).getEndpointURL().length() > 0) {
130 url = busService.getBindingTemplates().getBindingTemplate().get(0).getEndpointURL();
131 }
132 }
133 } catch (Throwable t) {
134 String sErrorMessage = "Failed to retrieve business entity. Error: " + t.getMessage();
135 log.error(sErrorMessage, t);
136 }
137 }
138 if (url != null &&
139 url.length() > 0) {
140 log.info("Returning Endpoint URL: " + url);
141 subscriptionReference.setSubscriptionManagerEndpointAddress(url);
142 } else {
143 log.error("URL not defined for service " + CONST_UNSUBSCRIBE_SERVICE_NAME);
144 subscriptionReference.setSubscriptionManagerEndpointAddress("https://www.somewhere.org/SubscriptionManager");
145 }
146 } catch (PropertyAccessException ex) {
147 log.error("Failed to retrieve the subscription manager endpoint address: " + ex.getMessage(), ex);
148 subscriptionReference.setSubscriptionManagerEndpointAddress("https://www.somewhere.org/SubscriptionManager");
149 }
150 }
151 }
152
153 subscriptionRecordList.add(subscriptionRecord);
154
155 saveSubscriptions(subscriptionRecordList);
156 }
157
158 /**
159 * Remove a subscription from a given subscription list
160 *
161 * @param subRef Subscription reference
162 * @param subscriptionRecordList Subscription record list
163 */
164 public void removeSubscription(SubscriptionReference subRef, SubscriptionRecordList subscriptionRecordList) {
165 if ((subscriptionRecordList != null) && (!subscriptionRecordList.isEmpty()) && (subRef != null) && (!subRef.getReferenceParameters().isEmpty())) {
166 SubscriptionRecordList removeList = new SubscriptionRecordList();
167
168 for (SubscriptionRecord subscriptionRecord : subscriptionRecordList) {
169 if ((subscriptionRecord != null) && (subscriptionRecord.getSubscription() != null) && (subscriptionRecord.getSubscription().getSubscriptionReference() != null) && (subRef.getReferenceParameters().containsAll(subscriptionRecord.getSubscription().getSubscriptionReference().getReferenceParameters()))) {
170 removeList.add(subscriptionRecord);
171 }
172 }
173
174 for (Iterator removeIter = removeList.iterator(); removeIter.hasNext();) {
175 subscriptionRecordList.remove(removeIter.next());
176 }
177
178 saveSubscriptions(subscriptionRecordList);
179 }
180 }
181
182 /**
183 * Remove a subscription from the default file repository
184 *
185 * @param subRef Subscription reference
186 */
187 public void removeSubscription(SubscriptionReference subRef) {
188 SubscriptionRecordList subscriptions;
189
190 subscriptions = loadSubscriptionList(dataSource);
191
192 removeSubscription(subRef, subscriptions);
193 }
194
195 private void saveSubscriptions(SubscriptionRecordList subscriptionList) {
196 new DataSaver().saveList(subscriptionList, dataSource);
197 }
198
199 private String generateSubscriptionId() {
200
201 java.rmi.server.UID uid = new java.rmi.server.UID();
202 return uid.toString();
203 }
204}
Note: See TracBrowser for help on using the repository browser.