From cbbb016910fb4b843db35d5a8000cc4fa13954b1 Mon Sep 17 00:00:00 2001
From: bdaniel <bdaniel@13f79535-47bb-0310-9956-ffa450edef68>
Date: Thu, 15 Jul 2010 07:02:34 +0000
Subject: [PATCH] Validate that the noListener intent isn't specified on a
 service

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@964321 13f79535-47bb-0310-9956-ffa450edef68
---
 .../impl/CompositePolicyBuilderImpl.java       | 18 +++++++++++++++++-
 .../builder-validation-messages.properties     |  1 +
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java b/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
index bb8ea62a87..8370db00df 100644
--- a/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
+++ b/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
@@ -36,11 +36,13 @@ import org.apache.tuscany.sca.assembly.builder.BuilderContext;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
 import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
+import org.apache.tuscany.sca.assembly.xml.Constants;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.monitor.Monitor;
 import org.apache.tuscany.sca.policy.Intent;
 import org.apache.tuscany.sca.policy.PolicySet;
 import org.apache.tuscany.sca.policy.PolicySubject;
+import org.apache.tuscany.sca.policy.util.PolicyHelper;
 
 /**
  * A composite builder that computes policy sets based on attached intents and policy sets.
@@ -126,6 +128,9 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
                                 // Remove any direct policy sets if an external one has been applied
                                 removeDirectPolicySetsIfExternalExists(ep, context);
                                 
+                                // Validate that noListener is not specified on a service endpoint
+                                checkForNoListenerIntent(ep, context);
+                                
                                 // check that all intents are resolved
                                 checkIntentsResolved(ep, context);
 
@@ -213,7 +218,18 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
         }
     }
     
-    private void removeDirectPolicySetsIfExternalExists(PolicySubject subject,
+    private void checkForNoListenerIntent(Endpoint ep, BuilderContext context) {
+		PolicyHelper helper = new PolicyHelper();
+		if ( helper.getIntent(ep, Constants.NOLISTENER_INTENT) != null ) {
+			  error(context.getMonitor(), 
+                      "NoListenerIntentSpecifiedOnService", 
+                      this,
+                      ep.toString());
+		} 				
+		
+	}
+
+	private void removeDirectPolicySetsIfExternalExists(PolicySubject subject,
 			BuilderContext context) {
     	boolean foundExternalPolicySet = false;
 		for (PolicySet ps : subject.getPolicySets() ) {
diff --git a/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties b/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties
index 68b5787653..62280ac5c0 100644
--- a/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties
+++ b/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties
@@ -31,4 +31,5 @@ PolicySetNotFoundAtBuild = PolicySet {0} is not defined in SCA definitions
 IntentNotSatisfiedAtBuild  = The intent {0} associated with policy subject {1} has no matching policy set
 MutuallyExclusiveIntentsAtBuild = [POL40009,ASM60009,ASM60010,JCA70001,JCA70003] Intent {0} and {1} are mutually exclusive
 IntentNotFoundAtBuild = Intent {0} is not defined in SCA definitions
+NoListenerIntentSpecifiedOnService = The noListener intent may only be specified on a reference.