You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by jf...@apache.org on 2009/04/23 04:00:06 UTC

svn commit: r767757 - /webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java

Author: jfaath
Date: Thu Apr 23 02:00:06 2009
New Revision: 767757

URL: http://svn.apache.org/viewvc?rev=767757&view=rev
Log:
getSubscriptionResults for the get_*Detail filters

Modified:
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java?rev=767757&r1=767756&r2=767757&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java Thu Apr 23 02:00:06 2009
@@ -31,12 +31,19 @@
 import javax.xml.ws.Holder;
 
 import org.uddi.api_v3.BindingDetail;
+import org.uddi.api_v3.BusinessDetail;
 import org.uddi.api_v3.BusinessList;
 import org.uddi.api_v3.FindBinding;
 import org.uddi.api_v3.FindBusiness;
 import org.uddi.api_v3.FindService;
 import org.uddi.api_v3.FindTModel;
+import org.uddi.api_v3.GetBindingDetail;
+import org.uddi.api_v3.GetBusinessDetail;
+import org.uddi.api_v3.GetServiceDetail;
+import org.uddi.api_v3.GetTModelDetail;
+import org.uddi.api_v3.ServiceDetail;
 import org.uddi.api_v3.ServiceList;
+import org.uddi.api_v3.TModelDetail;
 import org.uddi.api_v3.TModelList;
 import org.uddi.sub_v3.DeleteSubscription;
 import org.uddi.sub_v3.GetSubscriptionResults;
@@ -92,8 +99,16 @@
 	}
 
 
-	public SubscriptionResultsList getSubscriptionResults(
-			GetSubscriptionResults body) throws DispositionReportFaultMessage {
+	/* (non-Javadoc)
+	 * @see org.uddi.v3_service.UDDISubscriptionPortType#getSubscriptionResults(org.uddi.sub_v3.GetSubscriptionResults)
+	 * 
+	 * Notes: Does it make sense to refresh the subscription matches on a call to this method?  I don't think so, the user theoretically had
+	 * a set of entities in mind when the subscription was saved and the snapshot should remain just that - a snapshot of the entities at the
+	 * time of the subscription save.  The result of this policy is that if an entity is deleted, that deleted result will appear in the keyBag
+	 * on every call to this method.  To resolve this, the user can renew the subscription at which time the "match" snapshot will be refreshed.
+	 * 
+	 */
+	public SubscriptionResultsList getSubscriptionResults(GetSubscriptionResults body) throws DispositionReportFaultMessage {
 
 		EntityManager em = PersistenceManager.getEntityManager();
         EntityTransaction tx = em.getTransaction();
@@ -114,6 +129,9 @@
 
 		SubscriptionResultsList result = new SubscriptionResultsList();
 		
+		Date startPointDate = new Date(body.getCoveragePeriod().getStartPoint().toGregorianCalendar().getTimeInMillis());
+		Date endPointDate = new Date(body.getCoveragePeriod().getEndPoint().toGregorianCalendar().getTimeInMillis());
+		
 		if (subscriptionFilter.getFindBinding() != null) {
 			//Get the current matching keys
 			List<?> currentMatchingKeys = getSubscriptionMatches(subscriptionFilter, em);
@@ -123,6 +141,7 @@
 			List<String> missingKeys = getMissingKeys(currentMatchingKeys, modelSubscription.getSubscriptionMatches());
 			if (missingKeys != null && missingKeys.size() > 0) {
 				KeyBag missingKeyBag = new KeyBag();
+				missingKeyBag.setDeleted(true);
 				for (String key : missingKeys)
 					missingKeyBag.getBindingKey().add(key);
 				
@@ -130,20 +149,17 @@
 			}
 			
 			// Re-setting the subscription matches to the new matching key collection
-			modelSubscription.getSubscriptionMatches().clear();
-			for (Object key : currentMatchingKeys) {
-				SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);
-				modelSubscription.getSubscriptionMatches().add(subMatch);
-			}
+			//modelSubscription.getSubscriptionMatches().clear();
+			//for (Object key : currentMatchingKeys) {
+			//	SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);
+			//	modelSubscription.getSubscriptionMatches().add(subMatch);
+			//}
 			
 			// Now, finding the necessary entities, within the coverage period limits
 			FindBinding fb = subscriptionFilter.getFindBinding();
 			org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
 			findQualifiers.mapApiFindQualifiers(fb.getFindQualifiers());
 			
-			Date startPointDate = new Date(body.getCoveragePeriod().getStartPoint().toGregorianCalendar().getTimeInMillis());
-			Date endPointDate = new Date(body.getCoveragePeriod().getEndPoint().toGregorianCalendar().getTimeInMillis());
-			
 			BindingDetail bindingDetail = InquiryHelper.getBindingDetailFromKeys(fb, findQualifiers, em, currentMatchingKeys, startPointDate, endPointDate);
 			
 			result.setBindingDetail(bindingDetail);
@@ -156,6 +172,7 @@
 			List<String> missingKeys = getMissingKeys(currentMatchingKeys, modelSubscription.getSubscriptionMatches());
 			if (missingKeys != null && missingKeys.size() > 0) {
 				KeyBag missingKeyBag = new KeyBag();
+				missingKeyBag.setDeleted(true);
 				for (String key : missingKeys)
 					missingKeyBag.getBusinessKey().add(key);
 
@@ -163,20 +180,17 @@
 			}
 			
 			// Re-setting the subscription matches to the new matching key collection
-			modelSubscription.getSubscriptionMatches().clear();
-			for (Object key : currentMatchingKeys) {
-				SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);
-				modelSubscription.getSubscriptionMatches().add(subMatch);
-			}
+			//modelSubscription.getSubscriptionMatches().clear();
+			//for (Object key : currentMatchingKeys) {
+			//	SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);
+			//	modelSubscription.getSubscriptionMatches().add(subMatch);
+			//}
 			
 			// Now, finding the necessary entities, within the coverage period limits
 			FindBusiness fb = subscriptionFilter.getFindBusiness();
 			org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
 			findQualifiers.mapApiFindQualifiers(fb.getFindQualifiers());
 			
-			Date startPointDate = new Date(body.getCoveragePeriod().getStartPoint().toGregorianCalendar().getTimeInMillis());
-			Date endPointDate = new Date(body.getCoveragePeriod().getEndPoint().toGregorianCalendar().getTimeInMillis());
-			
 			BusinessList businessList = InquiryHelper.getBusinessListFromKeys(fb, findQualifiers, em, currentMatchingKeys, startPointDate, endPointDate);
 			
 			result.setBusinessList(businessList);
@@ -189,6 +203,7 @@
 			List<String> missingKeys = getMissingKeys(currentMatchingKeys, modelSubscription.getSubscriptionMatches());
 			if (missingKeys != null && missingKeys.size() > 0) {
 				KeyBag missingKeyBag = new KeyBag();
+				missingKeyBag.setDeleted(true);
 				for (String key : missingKeys)
 					missingKeyBag.getServiceKey().add(key);
 
@@ -196,20 +211,17 @@
 			}
 			
 			// Re-setting the subscription matches to the new matching key collection
-			modelSubscription.getSubscriptionMatches().clear();
-			for (Object key : currentMatchingKeys) {
-				SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);
-				modelSubscription.getSubscriptionMatches().add(subMatch);
-			}
+			//modelSubscription.getSubscriptionMatches().clear();
+			//for (Object key : currentMatchingKeys) {
+			//	SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);
+			//	modelSubscription.getSubscriptionMatches().add(subMatch);
+			//}
 			
 			// Now, finding the necessary entities, within the coverage period limits
 			FindService fs = subscriptionFilter.getFindService();
 			org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
 			findQualifiers.mapApiFindQualifiers(fs.getFindQualifiers());
 			
-			Date startPointDate = new Date(body.getCoveragePeriod().getStartPoint().toGregorianCalendar().getTimeInMillis());
-			Date endPointDate = new Date(body.getCoveragePeriod().getEndPoint().toGregorianCalendar().getTimeInMillis());
-			
 			ServiceList serviceList = InquiryHelper.getServiceListFromKeys(fs, findQualifiers, em, currentMatchingKeys, startPointDate, endPointDate);
 			
 			result.setServiceList(serviceList);
@@ -221,6 +233,7 @@
 			List<String> missingKeys = getMissingKeys(currentMatchingKeys, modelSubscription.getSubscriptionMatches());
 			if (missingKeys != null && missingKeys.size() > 0) {
 				KeyBag missingKeyBag = new KeyBag();
+				missingKeyBag.setDeleted(true);
 				for (String key : missingKeys)
 					missingKeyBag.getTModelKey().add(key);
 
@@ -228,20 +241,17 @@
 			}
 			
 			// Re-setting the subscription matches to the new matching key collection
-			modelSubscription.getSubscriptionMatches().clear();
-			for (Object key : currentMatchingKeys) {
-				SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);
-				modelSubscription.getSubscriptionMatches().add(subMatch);
-			}
+			//modelSubscription.getSubscriptionMatches().clear();
+			//for (Object key : currentMatchingKeys) {
+			//	SubscriptionMatch subMatch = new SubscriptionMatch(modelSubscription, (String)key);
+			//	modelSubscription.getSubscriptionMatches().add(subMatch);
+			//}
 			
 			// Now, finding the necessary entities, within the coverage period limits
 			FindTModel ft = subscriptionFilter.getFindTModel();
 			org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
 			findQualifiers.mapApiFindQualifiers(ft.getFindQualifiers());
 			
-			Date startPointDate = new Date(body.getCoveragePeriod().getStartPoint().toGregorianCalendar().getTimeInMillis());
-			Date endPointDate = new Date(body.getCoveragePeriod().getEndPoint().toGregorianCalendar().getTimeInMillis());
-			
 			TModelList tmodelList = InquiryHelper.getTModelListFromKeys(ft, findQualifiers, em, currentMatchingKeys, startPointDate, endPointDate);
 			
 			result.setTModelList(tmodelList);
@@ -250,18 +260,126 @@
 		if (subscriptionFilter.getFindRelatedBusinesses() != null) {
 		}
 		if (subscriptionFilter.getGetBindingDetail() != null) {
+			GetBindingDetail getDetail = subscriptionFilter.getGetBindingDetail();
+
+			
+			BindingDetail bindingDetail = new BindingDetail();
+			KeyBag missingKeyBag = new KeyBag();
+			missingKeyBag.setDeleted(true);
+			for (String key : getDetail.getBindingKey()) {
+				org.apache.juddi.model.BindingTemplate modelBindingTemplate = em.find(org.apache.juddi.model.BindingTemplate.class, key);
+				if (modelBindingTemplate != null) {
+					
+					if (startPointDate.after(modelBindingTemplate.getModifiedIncludingChildren()))
+						continue;
+					
+					if (endPointDate.before(modelBindingTemplate.getModifiedIncludingChildren()))
+						continue;
+					
+					org.uddi.api_v3.BindingTemplate apiBindingTemplate = new org.uddi.api_v3.BindingTemplate();
+					MappingModelToApi.mapBindingTemplate(modelBindingTemplate, apiBindingTemplate);
+					bindingDetail.getBindingTemplate().add(apiBindingTemplate);
+				}
+				else
+					missingKeyBag.getBindingKey().add(key);
+			}
+			
+			result.setBindingDetail(bindingDetail);
+			
+			if (missingKeyBag.getBindingKey() != null && missingKeyBag.getBindingKey().size() > 0)
+				result.getKeyBag().add(missingKeyBag);
+			
 		}
 		if (subscriptionFilter.getGetBusinessDetail() != null) {
+			GetBusinessDetail getDetail = subscriptionFilter.getGetBusinessDetail();
+
+			BusinessDetail businessDetail = new BusinessDetail();
+			KeyBag missingKeyBag = new KeyBag();
+			missingKeyBag.setDeleted(true);
+			for (String key : getDetail.getBusinessKey()) {
+				org.apache.juddi.model.BusinessEntity modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, key);
+				if (modelBusinessEntity != null) {
+					
+					if (startPointDate.after(modelBusinessEntity.getModifiedIncludingChildren()))
+						continue;
+					
+					if (endPointDate.before(modelBusinessEntity.getModifiedIncludingChildren()))
+						continue;
+					
+					org.uddi.api_v3.BusinessEntity apiBusinessEntity = new org.uddi.api_v3.BusinessEntity();
+					MappingModelToApi.mapBusinessEntity(modelBusinessEntity, apiBusinessEntity);
+					businessDetail.getBusinessEntity().add(apiBusinessEntity);
+				}
+				else
+					missingKeyBag.getBusinessKey().add(key);
+			}
+			
+			result.setBusinessDetail(businessDetail);
+			
+			if (missingKeyBag.getBusinessKey() != null && missingKeyBag.getBusinessKey().size() > 0)
+				result.getKeyBag().add(missingKeyBag);
 		}
 		if (subscriptionFilter.getGetServiceDetail() != null) {
+			GetServiceDetail getDetail = subscriptionFilter.getGetServiceDetail();
+
+			ServiceDetail serviceDetail = new ServiceDetail();
+			KeyBag missingKeyBag = new KeyBag();
+			missingKeyBag.setDeleted(true);
+			for (String key : getDetail.getServiceKey()) {
+				org.apache.juddi.model.BusinessService modelBusinessService = em.find(org.apache.juddi.model.BusinessService.class, key);
+				if (modelBusinessService != null) {
+					
+					if (startPointDate.after(modelBusinessService.getModifiedIncludingChildren()))
+						continue;
+					
+					if (endPointDate.before(modelBusinessService.getModifiedIncludingChildren()))
+						continue;
+					
+					org.uddi.api_v3.BusinessService apiBusinessService = new org.uddi.api_v3.BusinessService();
+					MappingModelToApi.mapBusinessService(modelBusinessService, apiBusinessService);
+					serviceDetail.getBusinessService().add(apiBusinessService);
+				}
+				else
+					missingKeyBag.getServiceKey().add(key);
+			}
+			
+			result.setServiceDetail(serviceDetail);
+			
+			if (missingKeyBag.getServiceKey() != null && missingKeyBag.getServiceKey().size() > 0)
+				result.getKeyBag().add(missingKeyBag);
 		}
 		if (subscriptionFilter.getGetTModelDetail() != null) {
+			GetTModelDetail getDetail = subscriptionFilter.getGetTModelDetail();
+
+			TModelDetail tmodelDetail = new TModelDetail();
+			KeyBag missingKeyBag = new KeyBag();
+			missingKeyBag.setDeleted(true);
+			for (String key : getDetail.getTModelKey()) {
+				org.apache.juddi.model.Tmodel modelTModel = em.find(org.apache.juddi.model.Tmodel.class, key);
+				if (modelTModel != null) {
+					
+					if (startPointDate.after(modelTModel.getModifiedIncludingChildren()))
+						continue;
+					
+					if (endPointDate.before(modelTModel.getModifiedIncludingChildren()))
+						continue;
+					
+					org.uddi.api_v3.TModel apiTModel = new org.uddi.api_v3.TModel();
+					MappingModelToApi.mapTModel(modelTModel, apiTModel);
+					tmodelDetail.getTModel().add(apiTModel);
+				}
+				else
+					missingKeyBag.getTModelKey().add(key);
+			}
+			
+			result.setTModelDetail(tmodelDetail);
+			
+			if (missingKeyBag.getTModelKey() != null && missingKeyBag.getTModelKey().size() > 0)
+				result.getKeyBag().add(missingKeyBag);
 		}
 		if (subscriptionFilter.getGetAssertionStatusReport() != null) {
 		}
 		
-		
-		
         tx.commit();
         em.close();
 
@@ -298,6 +416,13 @@
 	}
 
 
+	/* (non-Javadoc)
+	 * @see org.uddi.v3_service.UDDISubscriptionPortType#saveSubscription(java.lang.String, javax.xml.ws.Holder)
+	 * 
+	 * Notes: The matching keys are saved on a new subscription (or renewed subscription) for the find_* filters only.  With the other filter 
+	 * types, taking a snapshot of the matches doesn't make sense.
+	 * 
+	 */
 	public void saveSubscription(String authInfo,
 			Holder<List<Subscription>> subscription)
 			throws DispositionReportFaultMessage {
@@ -402,7 +527,8 @@
 	}
 
 	/**
-	 * Will take a snapshot of the keys that match the subscription filter return them.
+	 * Will take a snapshot of the keys that match the subscription filter return them.  Currently, keys are only returned for the find_*
+	 * filters.  It seems redundant to return the keys in the get_*Detail filters.
 	 * 
 	 * @param subscriptionFilter
 	 * @param em
@@ -438,16 +564,20 @@
 			// TODO: should we bother taking a snapshot of these?
 		}
 		if (subscriptionFilter.getGetBindingDetail() != null) {
-			keys = subscriptionFilter.getGetBindingDetail().getBindingKey();
+			//keys = subscriptionFilter.getGetBindingDetail().getBindingKey();
+			// Nothing needs to be done
 		}
 		if (subscriptionFilter.getGetBusinessDetail() != null) {
-			keys = subscriptionFilter.getGetBusinessDetail().getBusinessKey();
+			//keys = subscriptionFilter.getGetBusinessDetail().getBusinessKey();
+			// Nothing needs to be done
 		}
 		if (subscriptionFilter.getGetServiceDetail() != null) {
-			keys = subscriptionFilter.getGetServiceDetail().getServiceKey();
+			//keys = subscriptionFilter.getGetServiceDetail().getServiceKey();
+			// Nothing needs to be done
 		}
 		if (subscriptionFilter.getGetTModelDetail() != null) {
-			keys = subscriptionFilter.getGetTModelDetail().getTModelKey();
+			//keys = subscriptionFilter.getGetTModelDetail().getTModelKey();
+			// Nothing needs to be done
 		}
 		if (subscriptionFilter.getGetAssertionStatusReport() != null) {
 			// Nothing needs to be done



---------------------------------------------------------------------
To unsubscribe, e-mail: juddi-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: juddi-cvs-help@ws.apache.org