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/08 02:37:50 UTC

svn commit: r763056 - in /webservices/juddi/branches/v3_trunk: juddi-core/src/main/java/org/apache/juddi/api/impl/ juddi-core/src/main/java/org/apache/juddi/model/ juddi-core/src/main/java/org/apache/juddi/validation/ juddi-core/src/main/resources/ jud...

Author: jfaath
Date: Wed Apr  8 00:37:49 2009
New Revision: 763056

URL: http://svn.apache.org/viewvc?rev=763056&view=rev
Log:
working on subscription api: saving subscriptions

Added:
    webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_080_SubscriptionTest.java   (with props)
    webservices/juddi/branches/v3_trunk/uddi-client/src/test/java/org/apache/juddi/client/UDDI_080_SubscriptionTest.java   (with props)
Removed:
    webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_080_SubscriberSaveTest.java
    webservices/juddi/branches/v3_trunk/uddi-client/src/test/java/org/apache/juddi/client/UDDI_080_SubscriberSaveTest.java
Modified:
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessDescr.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ContactDescr.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDescr.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDocDescr.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OverviewDocDescr.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceDescr.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/Subscription.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelDescr.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelInstanceInfoDescr.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/UddiEntityPublisher.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateCustodyTransfer.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateUDDIApi.java
    webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/messages_en.properties
    webservices/juddi/branches/v3_trunk/uddi-tck/src/main/java/org/uddi/api_v3/tck/TckSubscriber.java
    webservices/juddi/branches/v3_trunk/uddi-tck/src/main/resources/uddi_data/subscription/subscription1.xml

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=763056&r1=763055&r2=763056&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 Wed Apr  8 00:37:49 2009
@@ -32,13 +32,15 @@
 import org.uddi.v3_service.DispositionReportFaultMessage;
 import org.uddi.v3_service.UDDISubscriptionPortType;
 import org.apache.juddi.mapping.MappingApiToModel;
+import org.apache.juddi.model.UddiEntityPublisher;
 import org.apache.juddi.query.PersistenceManager;
+import org.apache.juddi.validation.ValidateSubscription;
 
 
 @WebService(serviceName="UDDISubscriptionService", 
 			endpointInterface="org.uddi.v3_service.UDDISubscriptionPortType",
 			targetNamespace = "urn:uddi-org:sub_v3_portType")
-public class UDDISubscriptionImpl implements UDDISubscriptionPortType {
+public class UDDISubscriptionImpl extends AuthenticatedService implements UDDISubscriptionPortType {
 
 
 	public void deleteSubscription(DeleteSubscription body)
@@ -96,52 +98,21 @@
 	public void saveSubscription(String authInfo,
 			Holder<List<Subscription>> subscription)
 			throws DispositionReportFaultMessage {
-        EntityManager em = PersistenceManager.getEntityManager();
-        EntityTransaction tx = em.getTransaction();
-        tx.begin();
-        
-        if (subscription != null) {
-	        List<org.uddi.sub_v3.Subscription> apiSubscriptionList = subscription.value;
-	        for (org.uddi.sub_v3.Subscription apiSubscription : apiSubscriptionList) {
-	        	org.apache.juddi.model.Subscription modelSubscription = new org.apache.juddi.model.Subscription();
-	        	if ((apiSubscription.getSubscriptionKey() != null) 
-	        			&& (!"".equals(apiSubscription.getSubscriptionKey()))) {
-	        		modelSubscription = em.find(org.apache.juddi.model.Subscription.class, 
-	        				apiSubscription.getSubscriptionKey());
-	        	}
-	        	MappingApiToModel.mapSubscription(apiSubscription, modelSubscription);
-		        em.persist(modelSubscription);	        
-	        }
-        }
-	        
-        tx.commit();
-        em.close();
 
-	}
-	
-	public void saveSubscription(String authInfo,
-			SaveSubscription subscription)
-			throws DispositionReportFaultMessage {
+		EntityManager em = PersistenceManager.getEntityManager();
+		EntityTransaction tx = em.getTransaction();
+		tx.begin();
 
-        List<org.uddi.sub_v3.Subscription> apiSubscriptionList = subscription.getSubscription();
+		UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
+		new ValidateSubscription(publisher).validateSubscriptions(em, subscription.value);
 		
-        EntityManager em = PersistenceManager.getEntityManager();
-        EntityTransaction tx = em.getTransaction();
-        tx.begin();
-        if (apiSubscriptionList != null) {
-	        for (org.uddi.sub_v3.Subscription apiSubscription : apiSubscriptionList) {
-	        	org.apache.juddi.model.Subscription modelSubscription = null;
-	        	if ((apiSubscription.getSubscriptionKey() != null) 
-	        			&& (!"".equals(apiSubscription.getSubscriptionKey()))) {
-	        		modelSubscription = em.find(org.apache.juddi.model.Subscription.class, 
-	        				apiSubscription.getSubscriptionKey());
-	        	}
-	        	MappingApiToModel.mapSubscription(apiSubscription, modelSubscription);    
-		        em.persist(modelSubscription);
-	        }
-        }
-        
-        tx.commit();
-        em.close();
+		List<org.uddi.sub_v3.Subscription> apiSubscriptionList = subscription.value;
+		for (org.uddi.sub_v3.Subscription apiSubscription : apiSubscriptionList) {
+			
+		}
+
+		tx.commit();
+		em.close();
 	}
+	
 }

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessDescr.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessDescr.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessDescr.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessDescr.java Wed Apr  8 00:37:49 2009
@@ -80,7 +80,7 @@
 		this.langCode = langCode;
 	}
 
-	@Column(name = "descr", nullable = false)
+	@Column(name = "descr", nullable = false, length = 1024)
 	public String getDescr() {
 		return this.descr;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ContactDescr.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ContactDescr.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ContactDescr.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ContactDescr.java Wed Apr  8 00:37:49 2009
@@ -79,7 +79,7 @@
 		this.langCode = langCode;
 	}
 
-	@Column(name = "descr", nullable = false)
+	@Column(name = "descr", nullable = false, length = 1024)
 	public String getDescr() {
 		return this.descr;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDescr.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDescr.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDescr.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDescr.java Wed Apr  8 00:37:49 2009
@@ -79,7 +79,7 @@
 		this.langCode = langCode;
 	}
 
-	@Column(name = "descr", nullable = false)
+	@Column(name = "descr", nullable = false, length = 1024)
 	public String getDescr() {
 		return this.descr;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDocDescr.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDocDescr.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDocDescr.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/InstanceDetailsDocDescr.java Wed Apr  8 00:37:49 2009
@@ -83,7 +83,7 @@
 		this.langCode = langCode;
 	}
 
-	@Column(name = "descr", nullable = false)
+	@Column(name = "descr", nullable = false, length = 1024)
 	public String getDescr() {
 		return this.descr;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OverviewDocDescr.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OverviewDocDescr.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OverviewDocDescr.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OverviewDocDescr.java Wed Apr  8 00:37:49 2009
@@ -81,7 +81,7 @@
 		this.langCode = langCode;
 	}
 
-	@Column(name = "descr", nullable = false)
+	@Column(name = "descr", nullable = false, length = 1024)
 	public String getDescr() {
 		return this.descr;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceDescr.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceDescr.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceDescr.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceDescr.java Wed Apr  8 00:37:49 2009
@@ -78,7 +78,7 @@
 		this.langCode = langCode;
 	}
 
-	@Column(name = "descr", nullable = false)
+	@Column(name = "descr", nullable = false, length = 1024)
 	public String getDescr() {
 		return this.descr;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/Subscription.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/Subscription.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/Subscription.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/Subscription.java Wed Apr  8 00:37:49 2009
@@ -15,13 +15,19 @@
  * limitations under the License.
  */
 
+import java.util.Date;
+
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;
+import javax.persistence.Lob;
 import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
 
 /**
  * @author <a href="mailto:kurt@apache.org">Kurt T Stam</a>
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
  */
 @Entity
 @Table(name = "juddiv3_subscription")
@@ -29,8 +35,11 @@
 
 	private static final long serialVersionUID = 1L;
 	private String subscriptionKey;
+	private String subscriptionFilter;
 	private String bindingKey;
 	private String notificationInterval;
+	private Integer maxEntities;
+	private Date expiresAfter;
 
 	public Subscription() {
 	}
@@ -47,28 +56,50 @@
 	public String getSubscriptionKey() {
 		return this.subscriptionKey;
 	}
-
 	public void setSubscriptionKey(String subscriptionKey) {
 		this.subscriptionKey = subscriptionKey;
 	}
 
+	@Lob
+	@Column(name = "subscription_filter", nullable = false)
+	public String getSubscriptionFilter() {
+		return subscriptionFilter;
+	}
+	public void setSubscriptionFilter(String subscriptionFilter) {
+		this.subscriptionFilter = subscriptionFilter;
+	}
+	
 	@Column(name = "binding_key", nullable = false, length = 255)
 	public String getBindingKey() {
 		return this.bindingKey;
 	}
-
 	public void setBindingKey(String bindingKey) {
 		this.bindingKey = bindingKey;
 	}
 
 	@Column(name = "notification_interval", nullable = false)
-
 	public String getNotificationInterval() {
 		return this.notificationInterval;
 	}
-
 	public void setNotificationInterval(String notificationInterval) {
 		this.notificationInterval = notificationInterval;
 	}
 
+	@Column(name = "max_entities")
+	public Integer getMaxEntities() {
+		return maxEntities;
+	}
+	public void setMaxEntities(Integer maxEntities) {
+		this.maxEntities = maxEntities;
+	}
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "expires_after", length = 29)
+	public Date getExpiresAfter() {
+		return expiresAfter;
+	}
+	public void setExpiresAfter(Date expiresAfter) {
+		this.expiresAfter = expiresAfter;
+	}
+
 }

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelDescr.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelDescr.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelDescr.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelDescr.java Wed Apr  8 00:37:49 2009
@@ -79,7 +79,7 @@
 		this.langCode = langCode;
 	}
 
-	@Column(name = "descr", nullable = false)
+	@Column(name = "descr", nullable = false, length = 1024)
 	public String getDescr() {
 		return this.descr;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelInstanceInfoDescr.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelInstanceInfoDescr.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelInstanceInfoDescr.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelInstanceInfoDescr.java Wed Apr  8 00:37:49 2009
@@ -78,7 +78,7 @@
 		this.langCode = langCode;
 	}
 
-	@Column(name = "descr", nullable = false)
+	@Column(name = "descr", nullable = false, length = 1024)
 	public String getDescr() {
 		return this.descr;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/UddiEntityPublisher.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/UddiEntityPublisher.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/UddiEntityPublisher.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/UddiEntityPublisher.java Wed Apr  8 00:37:49 2009
@@ -51,7 +51,7 @@
 	}
 	
 	@Id
-	@Column(name = "authorized_name", nullable = false, length = 20)
+	@Column(name = "authorized_name", nullable = false, length = 255)
 	public String getAuthorizedName() {
 		return this.authorizedName;
 	}

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateCustodyTransfer.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateCustodyTransfer.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateCustodyTransfer.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateCustodyTransfer.java Wed Apr  8 00:37:49 2009
@@ -1,3 +1,20 @@
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
 package org.apache.juddi.validation;
 
 import java.util.ArrayList;
@@ -25,6 +42,9 @@
 import org.uddi.custody_v3.TransferEntities;
 import org.uddi.v3_service.DispositionReportFaultMessage;
 
+/**
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
 public class ValidateCustodyTransfer extends ValidateUDDIApi {
 
 	public ValidateCustodyTransfer(UddiEntityPublisher publisher) {

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java Wed Apr  8 00:37:49 2009
@@ -304,7 +304,6 @@
 			}
 		}
 	}
-
 	
 	public void validateBusinessEntity(EntityManager em, org.uddi.api_v3.BusinessEntity businessEntity) throws DispositionReportFaultMessage {
 		
@@ -345,7 +344,7 @@
 
 		if (!entityExists) {
 			// Check to make sure key isn't used by another entity.
-			if (em.find(UddiEntity.class, entityKey) != null)
+			if (!isUniqueKey(em, entityKey))
 				throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey));
 		}
 		
@@ -498,7 +497,7 @@
 
 			if (!entityExists) {
 				// Check to make sure key isn't used by another entity.
-				if (em.find(UddiEntity.class, entityKey) != null)
+				if (!isUniqueKey(em, entityKey))
 					throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey));
 			}
 			
@@ -629,7 +628,7 @@
 
 		if (!entityExists) {
 			// Check to make sure key isn't used by another entity.
-			if (em.find(UddiEntity.class, entityKey) != null)
+			if (!isUniqueKey(em, entityKey))
 				throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey));
 		}
 		
@@ -698,7 +697,7 @@
 
 		if (!entityExists) {
 			// Check to make sure key isn't used by another entity.
-			if (em.find(UddiEntity.class, entityKey) != null)
+			if (!isUniqueKey(em, entityKey))
 				throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey));
 		}
 		

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateSubscription.java Wed Apr  8 00:37:49 2009
@@ -17,7 +17,20 @@
 
  package org.apache.juddi.validation;
 
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.apache.juddi.error.ErrorMessage;
+import org.apache.juddi.error.FatalErrorException;
+import org.apache.juddi.error.KeyUnavailableException;
+import org.apache.juddi.error.ValueNotAllowedException;
+import org.apache.juddi.keygen.KeyGenerator;
+import org.apache.juddi.keygen.KeyGeneratorFactory;
 import org.apache.juddi.model.UddiEntityPublisher;
+import org.uddi.sub_v3.SaveSubscription;
+import org.uddi.sub_v3.SubscriptionFilter;
+import org.uddi.v3_service.DispositionReportFaultMessage;
 
 /**
  * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
@@ -28,4 +41,119 @@
 		super(publisher);
 	}
 
+	public void validateSubscriptions(EntityManager em, List<org.uddi.sub_v3.Subscription> entityList) throws DispositionReportFaultMessage {
+
+		// No null or empty list
+		if (entityList == null || entityList.size() == 0)
+			throw new ValueNotAllowedException(new ErrorMessage("errors.savesubscription.NoInput"));
+		
+		for (org.uddi.sub_v3.Subscription entity : entityList) {
+			validateSubscription(em, entity);
+		}
+	}
+	
+	public void validateSubscription(EntityManager em, org.uddi.sub_v3.Subscription subscription) throws DispositionReportFaultMessage {
+
+		// A supplied subscription can't be null
+		if (subscription == null)
+			throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.NullInput"));
+		
+		boolean entityExists = false;
+		String entityKey = subscription.getSubscriptionKey();
+		if (entityKey == null || entityKey.length() == 0) {
+			KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator();
+			entityKey = keyGen.generate();
+			subscription.setSubscriptionKey(entityKey);
+		}
+		else {
+			// Per section 4.4: keys must be case-folded
+			entityKey = entityKey.toLowerCase();
+			subscription.setSubscriptionKey(entityKey);
+
+			Object obj = em.find(org.apache.juddi.model.Subscription.class, entityKey);
+			if (obj != null) {
+				entityExists = true;
+
+				// Subscriptions don't specify ownership.  Therefore, anyone can change a subscription (if they have the key).  
+				// This could be implemented by adding the authorizedName field to the model class.
+				// Make sure publisher owns this entity.
+				//if (!publisher.isOwner((UddiEntity)obj))
+				//	throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey));
+			}
+			else {
+				// Inside this block, we have a key proposed by the publisher on a new entity
+
+				// Validate key and then check to see that the proposed key is valid for this publisher
+				ValidateUDDIKey.validateUDDIv3Key(entityKey);
+				if (!publisher.isValidPublisherKey(em, entityKey))
+					throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey));
+
+			}
+			
+		}
+
+		if (!entityExists) {
+			// Check to make sure key isn't used by another entity.
+			if (!isUniqueKey(em, entityKey))
+				throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey));
+		}
+		
+		
+		validateSubscriptionFilter(subscription.getSubscriptionFilter(), entityExists);
+	}
+
+	public void validateSubscriptionFilter(SubscriptionFilter subscriptionFilter, boolean entityExists) throws DispositionReportFaultMessage {
+		if (!entityExists && subscriptionFilter == null)
+			throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.NoFilterOnNewSubscription"));
+			
+		int filterCount = 0;
+		ValidateInquiry validateInquiry = new ValidateInquiry(publisher);
+		if (subscriptionFilter.getFindBinding() != null) {
+			filterCount++;
+			validateInquiry.validateFindBinding(subscriptionFilter.getFindBinding());
+		}
+		if (subscriptionFilter.getFindBusiness() != null) {
+			filterCount++;
+			validateInquiry.validateFindBusiness(subscriptionFilter.getFindBusiness());
+		}
+		if (subscriptionFilter.getFindService() != null) {
+			filterCount++;
+			validateInquiry.validateFindService(subscriptionFilter.getFindService());
+		}
+		if (subscriptionFilter.getFindTModel() != null) {
+			filterCount++;
+			validateInquiry.validateFindTModel(subscriptionFilter.getFindTModel(), false);
+		}
+		if (subscriptionFilter.getFindRelatedBusinesses() != null) {
+			filterCount++;
+			validateInquiry.validateFindRelatedBusinesses(subscriptionFilter.getFindRelatedBusinesses(), false);
+		}
+		if (subscriptionFilter.getGetBindingDetail() != null) {
+			filterCount++;
+			validateInquiry.validateGetBindingDetail(subscriptionFilter.getGetBindingDetail());
+		}
+		if (subscriptionFilter.getGetBusinessDetail() != null) {
+			filterCount++;
+			validateInquiry.validateGetBusinessDetail(subscriptionFilter.getGetBusinessDetail());
+		}
+		if (subscriptionFilter.getGetServiceDetail() != null) {
+			filterCount++;
+			validateInquiry.validateGetServiceDetail(subscriptionFilter.getGetServiceDetail());
+		}
+		if (subscriptionFilter.getGetTModelDetail() != null) {
+			filterCount++;
+			validateInquiry.validateGetTModelDetail(subscriptionFilter.getGetTModelDetail());
+		}
+		if (subscriptionFilter.getGetAssertionStatusReport() != null) {
+			filterCount++;
+		}
+		
+		if (!entityExists && filterCount == 0)
+			throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.NoFilterOnNewSubscription"));
+		
+		if (filterCount > 1)
+			throw new ValueNotAllowedException(new ErrorMessage("errors.subscription.TooManyFilters", String.valueOf(filterCount)));
+		
+	}
+	
 }

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateUDDIApi.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateUDDIApi.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateUDDIApi.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/validation/ValidateUDDIApi.java Wed Apr  8 00:37:49 2009
@@ -18,8 +18,12 @@
 package org.apache.juddi.validation;
 
 
+import javax.persistence.EntityManager;
+
+import org.apache.juddi.model.Subscription;
 import org.apache.juddi.error.ErrorMessage;
 import org.apache.juddi.error.UnsupportedException;
+import org.apache.juddi.model.UddiEntity;
 import org.apache.juddi.model.UddiEntityPublisher;
 import org.uddi.v3_service.DispositionReportFaultMessage;
 
@@ -46,4 +50,15 @@
 		throw new UnsupportedException(new ErrorMessage("errors.Unsupported"));
 	}
 	
+	public static boolean isUniqueKey(EntityManager em, String entityKey) {
+		Object obj = em.find(UddiEntity.class, entityKey);
+		if (obj != null)
+			return false;
+		
+		obj = em.find(Subscription.class, entityKey);
+		if (obj != null)
+			return false;
+		
+		return true;
+	}
 }

Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/messages_en.properties
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/messages_en.properties?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/messages_en.properties (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/resources/messages_en.properties Wed Apr  8 00:37:49 2009
@@ -146,6 +146,10 @@
 errors.transferentities.TokenNotFound=The supplied transfer token was not found
 errors.transferentities.TokenExpired=The supplied transfer token has expired
 errors.transferentities.KeyMismatch=A supplied key does not match a key associated with the transfer request
+errors.savesubscription.NoInput=At least one Subscription must be provided
+errors.subscription.NullInput=The subscription structure cannot be blank
+errors.subscription.NoFilterOnNewSubscription=No subscription filter was provided on this new subscription request
+errors.subscription.TooManyFilters=Only one filter is allowed per subscription request
 
 #-- jUDDI-specific publisher messages
 errors.savepublisher.NoInput=At least one Publisher must be provided

Added: webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_080_SubscriptionTest.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_080_SubscriptionTest.java?rev=763056&view=auto
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_080_SubscriptionTest.java (added)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_080_SubscriptionTest.java Wed Apr  8 00:37:49 2009
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2001-2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.api.impl;
+
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.uddi.api_v3.tck.TckBusiness;
+import org.uddi.api_v3.tck.TckPublisher;
+import org.uddi.api_v3.tck.TckPublisherAssertion;
+import org.uddi.api_v3.tck.TckSecurity;
+import org.uddi.api_v3.tck.TckSubscriber;
+import org.uddi.api_v3.tck.TckTModel;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.v3_service.UDDISecurityPortType;
+
+/**
+ * @author <a href="mailto:tcunningh@apache.org">Tom Cunningham</a>
+ * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
+ */
+public class API_080_SubscriptionTest 
+{
+	private TckSubscriber tckSubscriber = new TckSubscriber(new UDDISubscriptionImpl(), new UDDISecurityImpl());
+	private static Logger logger = Logger.getLogger(API_060_PublisherAssertionTest.class);
+	
+	private static API_080_SubscriptionTest api010  = new API_080_SubscriptionTest();
+
+	@Test
+	public void saveSubscriber() {
+		tckSubscriber.saveSubscription();
+	}
+
+	@Test
+	public void deleteSubscriber() {
+		tckSubscriber.deleteSubscription();
+	}
+}

Propchange: webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/api/impl/API_080_SubscriptionTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: webservices/juddi/branches/v3_trunk/uddi-client/src/test/java/org/apache/juddi/client/UDDI_080_SubscriptionTest.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/uddi-client/src/test/java/org/apache/juddi/client/UDDI_080_SubscriptionTest.java?rev=763056&view=auto
==============================================================================
--- webservices/juddi/branches/v3_trunk/uddi-client/src/test/java/org/apache/juddi/client/UDDI_080_SubscriptionTest.java (added)
+++ webservices/juddi/branches/v3_trunk/uddi-client/src/test/java/org/apache/juddi/client/UDDI_080_SubscriptionTest.java Wed Apr  8 00:37:49 2009
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2001-2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.client;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.helpers.Loader;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.uddi.api_v3.client.config.ClientConfig;
+import org.uddi.api_v3.client.config.Property;
+import org.uddi.api_v3.client.transport.Transport;
+import org.uddi.api_v3.tck.TckSubscriber;
+import org.uddi.v3_service.UDDISecurityPortType;
+import org.uddi.v3_service.UDDISubscriptionPortType;
+
+/**
+ * @author <a href="mailto:tcunningh@apache.org">Tom Cunningham</a>
+ * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
+ */
+public class UDDI_080_SubscriptionTest 
+{
+	private static Logger logger = Logger.getLogger(UDDI_080_SubscriptionTest.class);
+	private static TckSubscriber tckSubscriber = null;
+	
+	@BeforeClass
+	public static void setup() {
+		logger.debug("Getting subscriber proxy..");
+		try {
+	    	 String clazz = ClientConfig.getConfiguration().getString(Property.UDDI_PROXY_TRANSPORT,Property.DEFAULT_UDDI_PROXY_TRANSPORT);
+	         Class<?> transportClass = Loader.loadClass(clazz);
+	         if (transportClass!=null) {
+	        	 Transport transport = (Transport) transportClass.newInstance();
+	        	 
+	        	 UDDISecurityPortType security = transport.getSecurityService();
+	        	 UDDISubscriptionPortType subscriber = transport.getSubscriptionService();
+	        	 tckSubscriber = new TckSubscriber(subscriber, security);
+	         } else {
+	        	 Assert.fail();
+	         }
+	     } catch (Exception e) {
+	    	 logger.error(e.getMessage(), e);
+			 Assert.fail("Could not obtain authInfo token.");
+	     } 
+	}
+	
+	@Test 
+	public void saveSubscription() {
+		tckSubscriber.saveSubscription();
+	}
+
+	@Test
+	public void deleteSubscription() {
+		tckSubscriber.deleteSubscription();
+	}
+}

Propchange: webservices/juddi/branches/v3_trunk/uddi-client/src/test/java/org/apache/juddi/client/UDDI_080_SubscriptionTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: webservices/juddi/branches/v3_trunk/uddi-tck/src/main/java/org/uddi/api_v3/tck/TckSubscriber.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/uddi-tck/src/main/java/org/uddi/api_v3/tck/TckSubscriber.java?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/uddi-tck/src/main/java/org/uddi/api_v3/tck/TckSubscriber.java (original)
+++ webservices/juddi/branches/v3_trunk/uddi-tck/src/main/java/org/uddi/api_v3/tck/TckSubscriber.java Wed Apr  8 00:37:49 2009
@@ -14,6 +14,11 @@
  */
 package org.uddi.api_v3.tck;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.ws.Holder;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.uddi.sub_v3.SaveSubscription;
@@ -37,24 +42,25 @@
 		this.security = security;
 	}
 
-	public void saveSubscriber() {
+	public void saveSubscription() {
 		try {
 			String authInfo = TckSecurity.getAuthToken(security, "root", "");
-			
-			SaveSubscription ss = new SaveSubscription();
-			ss.setAuthInfo(authInfo);
 
 			Subscription subIn = (Subscription)EntityCreator.buildFromDoc(SUBSCRIPTION_XML, "org.uddi.sub_v3");
-			ss.getSubscription().add(subIn);
-			subscription.saveSubscription(authInfo, null);
+			List<Subscription> subscriptionList = new ArrayList<Subscription>();
+			subscriptionList.add(subIn);
+			Holder<List<Subscription>> subscriptionHolder = new Holder<List<Subscription>>();
+			subscriptionHolder.value = subscriptionList;
+			
+			subscription.saveSubscription(authInfo, subscriptionHolder);
+			
 		} catch (Exception e) {
 			e.printStackTrace();
 			Assert.fail("No exception should be thrown");		
 		}
 	}
 
-	@Test
-	public void deleteSubscriber() {
+	public void deleteSubscription() {
 		try {
 			String authInfo = TckSecurity.getAuthToken(security, "root", "");
 			System.out.println("AUTHINFO=" + authInfo);

Modified: webservices/juddi/branches/v3_trunk/uddi-tck/src/main/resources/uddi_data/subscription/subscription1.xml
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/uddi-tck/src/main/resources/uddi_data/subscription/subscription1.xml?rev=763056&r1=763055&r2=763056&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/uddi-tck/src/main/resources/uddi_data/subscription/subscription1.xml (original)
+++ webservices/juddi/branches/v3_trunk/uddi-tck/src/main/resources/uddi_data/subscription/subscription1.xml Wed Apr  8 00:37:49 2009
@@ -14,23 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- */ -->
-<subscription xmlns="urn:uddi-org:sub_v3" xmlns:xml="http://www.w3.org/XML/1998/namespace"
-	subscriptionKey="uddi:juddi.apache.org:joepublisher:subscription">
-	<subscriptionFilter>
-		<find_service xmlns="urn:uddi-org:api_v3">
-			<findQualifiers>
-				<findQualifier> uddi:uddi.org:findqualifier:sql99:like
-				</findQualifier>
-			</findQualifiers>
-			<categoryBag>
-				<keyedReference tModeKey="uddi:uddi.org:ubr:taxonomy:naics"
-					keyName="Motor Vehicle Parts" keyValue="42112_" />
-			</categoryBag>
-		</find_service>
-	</subscriptionFilter>
-	<bindingKey> bindingKeyOfTheClientsNotifySubscriptionListenerService 
-	</bindingKey>
-	<notificationInterval>P5D</notificationInterval>
-	<maxEntities>1000</maxEntities>
+ */
+-->
+<subscription xmlns="urn:uddi-org:sub_v3" xmlns:xml="http://www.w3.org/XML/1998/namespace" subscriptionKey="uddi:juddi.apache.org:joepublisher:subscription">
+  <subscriptionFilter>
+    <find_service xmlns="urn:uddi-org:api_v3">
+      <findQualifiers>
+        <findQualifier>uddi:uddi.org:findqualifier:sql99:like</findQualifier>
+      </findQualifiers>
+      <categoryBag>
+        <keyedReference tModelKey="uddi:uddi.org:ubr:taxonomy:naics" keyName="Motor Vehicle Parts" keyValue="42112_" />
+      </categoryBag>
+    </find_service>
+  </subscriptionFilter>
+  <bindingKey>bindingKeyOfTheClientsNotifySubscriptionListenerService</bindingKey>
+  <notificationInterval>P5D</notificationInterval>
+  <maxEntities>1000</maxEntities>
 </subscription>
\ No newline at end of file



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