You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2009/12/02 01:55:43 UTC

svn commit: r886027 - in /tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl: ComponentBuilderImpl.java ComponentPolicyBuilderImpl.java CompositePolicyBuilderImpl.java

Author: rfeng
Date: Wed Dec  2 00:55:43 2009
New Revision: 886027

URL: http://svn.apache.org/viewvc?rev=886027&view=rev
Log:
Tidy up the policy builders (the composite policy builder now only deals with strctural hierarchy)

Modified:
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java?rev=886027&r1=886026&r2=886027&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java Wed Dec  2 00:55:43 2009
@@ -153,14 +153,8 @@
             // configure services based on the calculated component type
             configureReferences(component, context);
             
-            // Inherit the intents and policySets from the componentType
             // NOTE: configureServices/configureReferences may add callback references and services
-            for(ComponentReference componentReference: component.getReferences()) {
-                policyBuilder.configure(componentReference, context);
-            }
-            for(ComponentService componentService: component.getServices()) {
-                policyBuilder.configure(componentService, context);
-            }
+            policyBuilder.configure(component, context);
             
         } finally {
             monitor.popContext();

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java?rev=886027&r1=886026&r2=886027&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java Wed Dec  2 00:55:43 2009
@@ -20,24 +20,29 @@
 package org.apache.tuscany.sca.builder.impl;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.CompositeReference;
 import org.apache.tuscany.sca.assembly.CompositeService;
+import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
 import org.apache.tuscany.sca.assembly.builder.BuilderContext;
 import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
 import org.apache.tuscany.sca.assembly.builder.Messages;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.definitions.Definitions;
 import org.apache.tuscany.sca.monitor.Monitor;
-import org.apache.tuscany.sca.monitor.Problem;
-import org.apache.tuscany.sca.monitor.Problem.Severity;
 import org.apache.tuscany.sca.policy.Intent;
 import org.apache.tuscany.sca.policy.IntentMap;
 import org.apache.tuscany.sca.policy.PolicyExpression;
@@ -69,16 +74,7 @@
      * @param model
      */
     protected void warning(Monitor monitor, String message, Object model, Object... messageParameters) {
-        if (monitor != null) {
-            Problem problem =
-                monitor.createProblem(this.getClass().getName(),
-                                      Messages.ASSEMBLY_VALIDATION,
-                                      Severity.WARNING,
-                                      model,
-                                      message,
-                                      messageParameters);
-            monitor.problem(problem);
-        }
+        Monitor.warning(monitor, this, Messages.ASSEMBLY_VALIDATION, message, messageParameters);
     }
 
     /**
@@ -90,30 +86,39 @@
      * @param model
      */
     protected void error(Monitor monitor, String message, Object model, Object... messageParameters) {
-        if (monitor != null) {
-            Problem problem =
-                monitor.createProblem(this.getClass().getName(),
-                                      Messages.ASSEMBLY_VALIDATION,
-                                      Severity.ERROR,
-                                      model,
-                                      message,
-                                      messageParameters);
-            monitor.problem(problem);
-        }
+        Monitor.error(monitor, this, Messages.ASSEMBLY_VALIDATION, message, messageParameters);
     }
 
     /**
      * Inherit the intents and policySets from the list of models
+     * @param ignoreExclusiveIntents TODO
+     * @param models
      * @param intents
      * @param policySets
-     * @param models
      */
-    protected void inherit(PolicySubject policySubject, Object... models) {
+    protected void inherit(PolicySubject policySubject, boolean ignoreExclusiveIntents, Object... models) {
         for (Object model : models) {
             if (model instanceof PolicySubject) {
                 PolicySubject subject = (PolicySubject)model;
-                // FIXME: We should ignore the mutually exclusive intents from different levels
-                policySubject.getRequiredIntents().addAll(subject.getRequiredIntents());
+
+                if (ignoreExclusiveIntents) {
+                    policySubject.getRequiredIntents().addAll(subject.getRequiredIntents());
+                } else {
+                    Set<Intent> intents = new HashSet<Intent>();
+                    for (Intent i1 : subject.getRequiredIntents()) {
+                        boolean exclusive = false;
+                        for (Intent i2 : policySubject.getRequiredIntents()) {
+                            if (i1.getExcludedIntents().contains(i2) || i2.getExcludedIntents().contains(i1)) {
+                                exclusive = true;
+                                break;
+                            }
+                        }
+                        if (!exclusive) {
+                            intents.add(i1);
+                        }
+                    }
+                    policySubject.getRequiredIntents().addAll(intents);
+                }
                 policySubject.getPolicySets().addAll(subject.getPolicySets());
             }
         }
@@ -126,16 +131,40 @@
         if (subject2 != null) {
             resolveAndCheck(subject2, context);
         }
-        inherit(subject1, subject2);
+        inherit(subject1, false, subject2);
         checkMutualExclusion(subject1, context);
     }
 
     protected void configure(ComponentService componentService, BuilderContext context) {
-        configure(componentService, componentService.getService(), context);
+        Service service = componentService.getService();
+        if (service != null) {
+            configure(componentService, service, context);
+            configureBindings(componentService, service, context);
+        }
+    }
+
+    private void configureBindings(Contract componentContract, Contract componentTypeContract, BuilderContext context) {
+        if (componentTypeContract == null) {
+            return;
+        }
+        Map<String, Binding> componentTypeContractBindings = new HashMap<String, Binding>();
+        for (Binding binding : componentTypeContract.getBindings()) {
+            componentTypeContractBindings.put(binding.getName(), binding);
+        }
+        for (Binding binding : componentContract.getBindings()) {
+            Binding componentTypeBinding = componentTypeContractBindings.get(binding.getName());
+            if (binding instanceof PolicySubject) {
+                inherit((PolicySubject)binding, false, componentTypeBinding, context);
+            }
+        }
     }
 
     protected void configure(ComponentReference componentReference, BuilderContext context) {
-        configure(componentReference, componentReference.getReference(), context);
+        Reference reference = componentReference.getReference();
+        if (reference != null) {
+            configure(componentReference, reference, context);
+            configureBindings(componentReference, reference, context);
+        }
     }
 
     protected void configure(CompositeService compositeService, BuilderContext context) {
@@ -148,6 +177,18 @@
         }
     }
 
+    public void configure(Component component, BuilderContext context) {
+        // Inherit the intents and policySets from the componentType
+        configure(component, component.getImplementation(), context);
+        // Inherit the intents and policySets from the componentType
+        for (ComponentReference componentReference : component.getReferences()) {
+            configure(componentReference, context);
+        }
+        for (ComponentService componentService : component.getServices()) {
+            configure(componentService, context);
+        }
+    }
+
     /**
      * Check if a single policy subject requires multually exclusive intents
      * @param subject1 - the policy subject to check
@@ -229,7 +270,7 @@
         }
     }
 
-    protected Intent resolve(Definitions definitions, Intent proxy) {
+    protected static Intent resolve(Definitions definitions, Intent proxy) {
         for (Intent i : definitions.getIntents()) {
             if (i.equals(proxy)) {
                 return i;

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java?rev=886027&r1=886026&r2=886027&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java Wed Dec  2 00:55:43 2009
@@ -19,42 +19,21 @@
 
 package org.apache.tuscany.sca.builder.impl;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 import javax.xml.namespace.QName;
 
-import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.Composite;
-import org.apache.tuscany.sca.assembly.CompositeReference;
-import org.apache.tuscany.sca.assembly.CompositeService;
 import org.apache.tuscany.sca.assembly.Endpoint;
 import org.apache.tuscany.sca.assembly.EndpointReference;
 import org.apache.tuscany.sca.assembly.Implementation;
-import org.apache.tuscany.sca.assembly.Reference;
-import org.apache.tuscany.sca.assembly.Service;
 import org.apache.tuscany.sca.assembly.builder.BuilderContext;
-import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
-import org.apache.tuscany.sca.assembly.builder.Messages;
 import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
-import org.apache.tuscany.sca.definitions.Definitions;
 import org.apache.tuscany.sca.monitor.Monitor;
-import org.apache.tuscany.sca.monitor.Problem;
-import org.apache.tuscany.sca.monitor.Problem.Severity;
-import org.apache.tuscany.sca.policy.Intent;
-import org.apache.tuscany.sca.policy.IntentMap;
-import org.apache.tuscany.sca.policy.PolicyExpression;
-import org.apache.tuscany.sca.policy.PolicySet;
-import org.apache.tuscany.sca.policy.PolicySubject;
-import org.apache.tuscany.sca.policy.Qualifier;
 
 /**
  * A composite builder that computes policy sets based on attached intents and policy sets.
@@ -63,56 +42,12 @@
  *
  * @version $Rev$ $Date$
  */
-public class CompositePolicyBuilderImpl implements CompositeBuilder {
-    
-    protected BuilderExtensionPoint builders;
-    
-    public CompositePolicyBuilderImpl(ExtensionPointRegistry registry) {
-        this.builders = registry.getExtensionPoint(BuilderExtensionPoint.class);
-    }
+public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl implements CompositeBuilder {
 
-    /**
-     * Report a warning.
-     *
-     * @param monitor
-     * @param problems
-     * @param message
-     * @param model
-     */
-    protected void warning(Monitor monitor, String message, Object model, Object... messageParameters) {
-        if (monitor != null) {
-            Problem problem =
-                monitor.createProblem(this.getClass().getName(),
-                                      Messages.ASSEMBLY_VALIDATION,
-                                      Severity.WARNING,
-                                      model,
-                                      message,
-                                      messageParameters);
-            monitor.problem(problem);
-        }
+    public CompositePolicyBuilderImpl(ExtensionPointRegistry registry) {
+        super(registry);
     }
 
-    /**
-     * Report a error.
-     *
-     * @param monitor
-     * @param problems
-     * @param message
-     * @param model
-     */
-    private void error(Monitor monitor, String message, Object model, Object... messageParameters) {
-        if (monitor != null) {
-            Problem problem =
-                monitor.createProblem(this.getClass().getName(),
-                                      Messages.ASSEMBLY_VALIDATION,
-                                      Severity.ERROR,
-                                      model,
-                                      message,
-                                      messageParameters);
-            monitor.problem(problem);
-        }
-    }    
-
     public String getID() {
         return "org.apache.tuscany.sca.assembly.builder.CompositePolicyBuilder";
     }
@@ -123,471 +58,112 @@
         return composite;
     }
 
-    /**
-     * Inherit the intents and policySets from the list of models
-     * @param intents
-     * @param policySets
-     * @param models
-     */
-    private void inherit(PolicySubject policySubject, Object... models) {
-        for (Object model : models) {
-            if (model instanceof PolicySubject) {
-                PolicySubject subject = (PolicySubject)model;
-                // FIXME: We should ignore the mutually exclusive intents from different levels
-                policySubject.getRequiredIntents().addAll(subject.getRequiredIntents());
-                policySubject.getPolicySets().addAll(subject.getPolicySets());
-            }
-        }
-    }
-
-    /**
-     * Check if a single policy subject requires multually exclusive intents
-     * @param subject1 - the policy subject to check
-     * @param context - context containing useful things like the monitor instance
-     * @return true if the policy subject contains mutually exclusive intents
-     */
-    private boolean checkMutualExclusion(PolicySubject subject1, BuilderContext context) {
-        if (subject1 == null) {
-            return false;
-        }
-        for (Intent i1 : subject1.getRequiredIntents()) {
-            for (Intent i2 : subject1.getRequiredIntents()) {
-                if ((i1 != i2) &&
-                	(i1.getExcludedIntents().contains(i2) || i2.getExcludedIntents().contains(i1))) {
-                    error(context.getMonitor(), "MutuallyExclusiveIntents", new Object[] {subject1}, i1, i2);
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Check if two policy subjects requires multually exclusive intents
-     * @param subject1
-     * @param subject2
-     * @param monitor 
-     * @return
-     */
-    private boolean checkMutualExclusion(PolicySubject subject1, PolicySubject subject2, BuilderContext context) {
-        if (subject1 == subject2 || subject1 == null || subject2 == null) {
-            return false;
-        }
-        for (Intent i1 : subject1.getRequiredIntents()) {
-            for (Intent i2 : subject2.getRequiredIntents()) {
-                if (i1.getExcludedIntents().contains(i2) || i2.getExcludedIntents().contains(i1)) {
-                    error(context.getMonitor(), "MutuallyExclusiveIntents", new Object[] {subject1, subject2}, i1, i2);
-                    return true;
-                }
-            }
-        }
-        return false;
-    }    
-
-    private boolean resolveAndCheck(PolicySubject subject, BuilderContext context) {
-        if (subject == null) {
-            return false;
-        }
-        // FIXME: [rfeng] Should we resolve the intents during the "build" phase?
-        resolveAndNormalize(subject, context);
-        List<Intent> intents = subject.getRequiredIntents();
-        int size = intents.size();
-        for (int i = 0; i < size; i++) {
-            for (int j = i + 1; j < size; j++) {
-                Intent i1 = intents.get(i);
-                Intent i2 = intents.get(j);
-                if (i1 != i2 && i1.getExcludedIntents().contains(i2) || i2.getExcludedIntents().contains(i1)) {
-                    error(context.getMonitor(), "MutuallyExclusiveIntents", subject, i1, i2);
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Inherit the policySets and intents from the implementation hierarchy
-     * @param subject
-     * @param composite
-     * @param component
-     * @param service
-     */
-    private void inheritFromService(PolicySubject subject, Composite composite, Component component, Service service) {
-        if (service == null) {
-            return;
-        }
-        if (service instanceof ComponentService) {
-            // component!=null
-            if (component.getImplementation() instanceof Composite) {
-                composite = (Composite)component.getImplementation();
-            }
-            inheritFromService(subject, composite, component, ((ComponentService)service).getService());
-            // Component service also inherits the intents/policySets from composite/component
-            inherit(subject, composite, component);
-        } else if (service instanceof CompositeService) {
-            // composite!=null, component is not used
-            CompositeService compositeService = (CompositeService)service;
-            // Handle the promoted component service
-            inheritFromService(subject, composite, compositeService.getPromotedComponent(), compositeService
-                .getPromotedService());
-        }
-        // For atomic service, the composite is not used
-        inherit(subject, component.getImplementation(), service);
-    }
-
-    /**
-     * Inherit the policySets and intents from the implementation hierarchy
-     * @param subject
-     * @param composite
-     * @param component
-     * @param reference
-     */
-    private void inheritFromReference(PolicySubject subject,
-                                      Composite composite,
-                                      Component component,
-                                      Reference reference) {
-        if (reference == null) {
-            return;
-        }
-        if (reference instanceof ComponentReference) {
-            // component!=null
-            if (component.getImplementation() instanceof Composite) {
-                composite = (Composite)component.getImplementation();
-            }
-            inheritFromReference(subject, composite, component, ((ComponentReference)reference).getReference());
-        } else if (reference instanceof CompositeReference) {
-            CompositeReference compositeReference = (CompositeReference)reference;
-            for (int i = 0, n = compositeReference.getPromotedReferences().size(); i < n; i++) {
-                inheritFromReference(subject,
-                                     composite,
-                                     compositeReference.getPromotedComponents().get(i),
-                                     compositeReference.getPromotedReferences().get(i));
-            }
-        }
-        // Inherit from the componentType/reference
-        inherit(subject, component.getImplementation(), reference);
-    }
-
-    /**
-     * Check if two names are equal
-     * @param name1
-     * @param name2
-     * @return
-     */
-    private boolean isEqual(String name1, String name2) {
-        if (name1 == name2) {
-            return true;
-        }
-        if (name1 != null) {
-            return name1.equals(name2);
-        } else {
-            return name2.equals(name1);
-        }
-    }
-
-    private Intent resolve(Definitions definitions, Intent proxy) {
-        for (Intent i : definitions.getIntents()) {
-            if (i.equals(proxy)) {
-                return i;
-            }
-            for (Intent qi : i.getQualifiedIntents()) {
-                if (qi.equals(proxy)) {
-                    return qi;
-                }
-            }
-        }
-        return null;
-    }
+    protected void computePolicies(Composite composite, BuilderContext context) {
+        Monitor monitor = context.getMonitor();
+        monitor.pushContext("Composite: " + composite.getName().toString());
 
-    private void resolveAndNormalize(PolicySubject subject, BuilderContext context) {
-        Definitions definitions = context.getDefinitions();
-        Set<Intent> intents = new HashSet<Intent>();
-        if (definitions != null) {
-            for (Intent i : subject.getRequiredIntents()) {
-                Intent resolved = resolve(definitions, i);
-                if (resolved != null) {
-                    intents.add(resolved);
-                } else {
-                    warning(context.getMonitor(), "IntentNotFound", subject, i);
-                    // Intent cannot be resolved
-                }
-            }
-        }
+        try {
+            resolveAndCheck(composite, context);
 
-        // Replace profile intents with their required intents
-        while (!intents.isEmpty()) {
-            boolean profileIntentsFound = false;
-            Set<Intent> copy = new HashSet<Intent>(intents);
-            for (Intent i : copy) {
-                if (!i.getRequiredIntents().isEmpty()) {
-                    intents.remove(i);
-                    intents.addAll(i.getRequiredIntents());
-                    profileIntentsFound = true;
-                }
-            }
-            if (!profileIntentsFound) {
-                // No more profileIntents
-                break;
-            }
-        }
+            // compute policies recursively
+            for (Component component : composite.getComponents()) {
+                monitor.pushContext("Component: " + component.getName());
+
+                try {
+                    Implementation implementation = component.getImplementation();
+
+                    for (ComponentService componentService : component.getServices()) {
+                        monitor.pushContext("Service: " + componentService.getName());
+
+                        try {
+                            resolveAndCheck(componentService, context);
+
+                            if (componentService.getInterfaceContract() != null) {
+                                resolveAndCheck(componentService.getInterfaceContract().getInterface(), context);
+
+                                resolveAndCheck(componentService.getInterfaceContract().getCallbackInterface(), context);
+
+                            }
+
+                            for (Endpoint ep : componentService.getEndpoints()) {
+                                if (componentService.getInterfaceContract() != null) {
+                                    // Inherit from the component.service.interface
+                                    inherit(ep, true, componentService.getInterfaceContract().getInterface());
+                                }
+                                // Inherit from composite/component/service
+                                inherit(ep, true, composite, ep.getComponent(), ep.getService());
+                                // Inherit from binding
+                                inherit(ep, true, ep.getBinding());
+
+                                // Replace profile intents with their required intents
+                                // Remove the intents whose @contraints do not include the current element
+                                // Replace unqualified intents if there is a qualified intent in the list
+                                // Replace qualifiable intents with the default qualied intent
+                                resolveAndNormalize(ep, context);
+
+                                // check that the resulting endpoint has no mutually exclusive intents
+                                checkMutualExclusion(ep, context);
+                            }
+                        } finally {
+                            monitor.popContext();
+                        }
+                    }
 
-        // Remove the intents whose @contraints do not include the current element
-        // Replace unqualified intents if there is a qualified intent in the list
-        Set<Intent> copy = new HashSet<Intent>(intents);
-        for (Intent i : copy) {
-            if (i.getQualifiableIntent() != null) {
-                intents.remove(i.getQualifiableIntent());
-            }
-        }
+                    for (ComponentReference componentReference : component.getReferences()) {
+                        monitor.pushContext("Reference: " + componentReference.getName().toString());
 
-        // Replace qualifiable intents with the default qualified intent
-        copy = new HashSet<Intent>(intents);
-        for (Intent i : copy) {
-            if (i.getDefaultQualifiedIntent() != null) {
-                intents.remove(i);
-                intents.add(i.getDefaultQualifiedIntent());
-            }
-        }
+                        try {
 
-        subject.getRequiredIntents().clear();
-        subject.getRequiredIntents().addAll(intents);
+                            if (componentReference.getInterfaceContract() != null) {
+                                resolveAndCheck(componentReference.getInterfaceContract().getInterface(), context);
 
-        Set<PolicySet> policySets = new HashSet<PolicySet>();
-        if (definitions != null) {
-            for (PolicySet policySet : subject.getPolicySets()) {
-                int index = definitions.getPolicySets().indexOf(policySet);
-                if (index != -1) {
-                    policySets.add(definitions.getPolicySets().get(index));
-                } else {
-                    // PolicySet cannot be resolved
-                    warning(context.getMonitor(), "PolicySetNotFound", subject, policySet);
-                }
-            }
-        }
+                                resolveAndCheck(componentReference.getInterfaceContract().getCallbackInterface(),
+                                                context);
+                            }
+
+                            for (EndpointReference epr : componentReference.getEndpointReferences()) {
+
+                                // Inherit from the component.reference.interface
+                                if (componentReference.getInterfaceContract() != null) {
+                                    inherit(epr, true, componentReference.getInterfaceContract().getInterface());
+                                }
+
+                                // Inherit from composite/component/reference/binding
+                                inherit(epr, true, composite, epr.getComponent(), epr.getReference());
+                                inherit(epr, true, epr.getBinding());
+
+                                // Replace profile intents with their required intents
+                                // Remove the intents whose @contraints do not include the current element
+                                // Replace unqualified intents if there is a qualified intent in the list
+                                // Replace qualifiable intents with the default qualied intent
+                                resolveAndNormalize(epr, context);
+
+                                // check that the resulting endpoint reference has no mutually exclusive intents
+                                checkMutualExclusion(epr, context);
+                            }
+                        } finally {
+                            monitor.popContext();
+                        }
+                    }
 
-        for (Intent intent : subject.getRequiredIntents()) {
-            loop: for (PolicySet ps : definitions.getPolicySets()) {
-                // FIXME: We will have to check the policy references and intentMap too
-                // as well as the appliesTo
-                if (ps.getProvidedIntents().contains(intent)) {
-                    policySets.add(ps);
-                    break;
-                }
-                for (IntentMap map : ps.getIntentMaps()) {
-                    for (Qualifier q : map.getQualifiers()) {
-                        if (intent.equals(q.getIntent())) {
-                            policySets.add(ps);
-                            break loop;
+                    if (implementation instanceof Composite) {
+                        inherit(implementation, true, component, composite);
+                        computePolicies((Composite)implementation, context);
+                    } else {
+                        resolveAndCheck(implementation, context);
+                        if (implementation != null) {
+                            inherit(implementation, true, component, composite);
                         }
                     }
+                } finally {
+                    monitor.popContext();
                 }
             }
-        }
-
-        subject.getPolicySets().clear();
-        subject.getPolicySets().addAll(policySets);
-
-    }
-
-    protected void computePolicies(Composite composite, BuilderContext context) {
-        Monitor monitor = context.getMonitor();
-        monitor.pushContext("Composite: " + composite.getName().toString());
-        
-        try {
-	        resolveAndCheck(composite, context);
-	
-	        for (Service service : composite.getServices()) {
-	            CompositeService compositeService = (CompositeService)service;
-	            checkMutualExclusion(compositeService, compositeService.getPromotedService(), context);
-	        }
-	
-	        for (Reference reference : composite.getReferences()) {
-	            CompositeReference compositeReference = (CompositeReference)reference;
-	            for (Reference promoted : compositeReference.getPromotedReferences()) {
-	                checkMutualExclusion(compositeReference, promoted, context);
-	            }
-	        }
-	
-	        // compute policies recursively
-	        for (Component component : composite.getComponents()) {
-	            monitor.pushContext("Component: " + component.getName().toString());
-	            
-	            try {	        	
-		            Implementation implementation = component.getImplementation();
-		            resolveAndCheck(component, context);
-		
-		            // Check component against implementation
-		            checkMutualExclusion(component, component.getImplementation(), context);
-		
-		            for (ComponentService componentService : component.getServices()) {
-			            monitor.pushContext("Service: " + componentService.getName().toString());
-			            
-			            try {
-			                resolveAndCheck(componentService, context);
-			                resolveAndCheck(componentService.getService(), context);
-			
-			                // Check component/service against componentType/service 
-			                checkMutualExclusion(componentService, componentService.getService(), context);
-			
-			                if (componentService.getInterfaceContract() != null && componentService.getService() != null) {
-			                    resolveAndCheck(componentService.getInterfaceContract().getInterface(), context);
-			                    resolveAndCheck(componentService.getService().getInterfaceContract().getInterface(), context);
-			
-			                    checkMutualExclusion(componentService.getInterfaceContract().getInterface(), componentService
-			                        .getService().getInterfaceContract().getInterface(), context);
-			
-			                    resolveAndCheck(componentService.getInterfaceContract().getCallbackInterface(), context);
-			                    resolveAndCheck(componentService.getService().getInterfaceContract().getCallbackInterface(),
-			                                    context);
-			
-			                    checkMutualExclusion(componentService.getInterfaceContract().getCallbackInterface(),
-			                                         componentService.getService().getInterfaceContract().getCallbackInterface(),
-			                                         context);
-			                }
-			
-			                for (Endpoint ep : componentService.getEndpoints()) {
-			                    // Inherit from the componentType.service.interface
-			                    if (componentService.getService() != null && componentService.getService().getInterfaceContract() != null) {
-			                        inherit(ep, componentService.getService().getInterfaceContract().getInterface());
-			                    }
-			                    if (componentService.getInterfaceContract() != null) {
-			                        // Inherit from the component.service.interface
-			                        inherit(ep, componentService.getInterfaceContract().getInterface());
-			                    }
-			                    // Inherit from the componentType/service
-			                    inheritFromService(ep, composite, component, componentService.getService());
-			                    // Find the corresponding binding in the componentType and inherit the intents/policySets
-			                    if (componentService.getService() != null) {
-			                        for (Binding binding : componentService.getService().getBindings()) {
-			                            resolveAndCheck((PolicySubject)binding, context);
-			                            if (isEqual(ep.getBinding().getName(), binding.getName()) && (binding instanceof PolicySubject)) {
-			                                checkMutualExclusion((PolicySubject)ep.getBinding(), (PolicySubject)binding, context);
-			                                // Inherit from componentType.service.binding
-			                                inherit(ep, binding);
-			                                break;
-			                            }
-			                        }
-			                    }
-			                    // Inherit from composite/component/service
-			                    inheritFromService(ep, composite, ep.getComponent(), ep.getService());
-			                    // Inherit from binding
-			                    inherit(ep, ep.getBinding());
-			
-			                    // Replace profile intents with their required intents
-			                    // Remove the intents whose @contraints do not include the current element
-			                    // Replace unqualified intents if there is a qualified intent in the list
-			                    // Replace qualifiable intents with the default qualied intent
-			                    resolveAndNormalize(ep, context);
-			                    
-			                    // check that the resulting endpoint has no mutually exclusive intents
-			                    checkMutualExclusion(ep, context);
-			                }
-			            } finally {
-			                monitor.popContext();
-			            } 			                
-		            }
-		
-		            for (ComponentReference componentReference : component.getReferences()) {
-			            monitor.pushContext("Reference: " + componentReference.getName().toString());
-			            
-			            try {			            
-			                resolveAndCheck(componentReference, context);
-			                resolveAndCheck(componentReference.getReference(), context);
-			
-			                // Check component/reference against componentType/reference
-			                checkMutualExclusion(componentReference, componentReference.getReference(), context);
-			
-			                if (componentReference.getInterfaceContract() != null && componentReference.getReference() != null) {
-			                    resolveAndCheck(componentReference.getInterfaceContract().getInterface(), context);
-			                    resolveAndCheck(componentReference.getReference().getInterfaceContract().getInterface(), context);
-			
-			                    checkMutualExclusion(componentReference.getInterfaceContract().getInterface(), componentReference
-			                        .getReference().getInterfaceContract().getInterface(), context);
-			
-			                    resolveAndCheck(componentReference.getInterfaceContract().getCallbackInterface(), context);
-			                    resolveAndCheck(componentReference.getReference().getInterfaceContract().getCallbackInterface(),
-			                                    context);
-			
-			                    checkMutualExclusion(componentReference.getInterfaceContract().getCallbackInterface(),
-			                                         componentReference.getReference().getInterfaceContract()
-			                                             .getCallbackInterface(),
-			                                         context);
-			                }
-			
-			                for (EndpointReference epr : componentReference.getEndpointReferences()) {
-			                    // Inherit from the componentType.reference.interface
-			                    if (componentReference.getReference() != null && componentReference.getReference()
-			                        .getInterfaceContract() != null) {
-			                        inherit(epr, componentReference.getReference().getInterfaceContract().getInterface());
-			                    }
-			                    // Inherit from the component.reference.interface
-			                    if (componentReference.getInterfaceContract() != null) {
-			                        inherit(epr, componentReference.getInterfaceContract().getInterface());
-			                    }
-			                    // Inherit from the componentType/reference
-			                    inheritFromReference(epr, composite, component, componentReference.getReference());
-			                    // Find the corresponding binding in the componentType and inherit the intents/policySets
-			                    if (componentReference.getReference() != null) {
-			                        for (Binding binding : componentReference.getReference().getBindings()) {
-			                            if (epr.getBinding() != null && isEqual(epr.getBinding().getName(), binding.getName())
-			                                && (binding instanceof PolicySubject)) {
-			                                resolveAndCheck((PolicySubject)binding, context);
-			                                checkMutualExclusion((PolicySubject)epr.getBinding(), (PolicySubject)binding, context);
-			                                // Inherit from componentType.reference.binding
-			                                inherit(epr, binding);
-			                                break;
-			                            }
-			                        }
-			                    }
-			                    // Inherit from composite/component/reference/binding
-			                    inheritFromReference(epr, composite, epr.getComponent(), epr.getReference());
-			                    inherit(epr, epr.getBinding());
-			
-			                    // Replace profile intents with their required intents
-			                    // Remove the intents whose @contraints do not include the current element
-			                    // Replace unqualified intents if there is a qualified intent in the list
-			                    // Replace qualifiable intents with the default qualied intent
-			                    resolveAndNormalize(epr, context);
-			                    
-			                    // check that the resulting endpoint reference has no mutually exclusive intents
-			                    checkMutualExclusion(epr, context);
-			                }
-			            } finally {
-			                monitor.popContext();
-			            } 			                
-		            }
-		            
-		            if (implementation instanceof Composite) {
-		                inherit(implementation, component, composite);
-		                computePolicies((Composite)implementation, context);
-		            } else {
-		                resolveAndCheck(implementation, context);
-		                if (implementation != null) {
-		                    inherit(implementation, component, composite);
-		                }
-		            }
-	            } finally {
-	                monitor.popContext();
-	            } 		            
-	        }
         } finally {
             monitor.popContext();
         }
     }
 
-    private Set<QName> getPolicyNames(PolicySubject subject) {
-        if (subject == null) {
-            return Collections.emptySet();
-        }
-        Set<QName> names = new HashSet<QName>();
-        for (PolicySet ps : subject.getPolicySets()) {
-            for (PolicyExpression exp : ps.getPolicies()) {
-                names.add(exp.getName());
-            }
-        }
-        return names;
-    }
-
     protected void buildPolicies(Composite composite, BuilderContext context) {
 
         // compute policies recursively



Re: svn commit: r886027 - in /tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl: ComponentBuilderImpl.java ComponentPolicyBuilderImpl.java CompositePolicyBuilderImpl.java

Posted by Simon Laws <si...@googlemail.com>.
Ah, got you. This raises the interesting question about what we should
do with policy on these callback references and services. The policy
builder will come along and apply policy intents/sets from the
structural hierarchy. However should we also pick up policy
intents/set from the original reference/service?

Simon

Re: svn commit: r886027 - in /tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl: ComponentBuilderImpl.java ComponentPolicyBuilderImpl.java CompositePolicyBuilderImpl.java

Posted by Raymond Feng <en...@gmail.com>.
I did that on purpose as I see the component builder code seems to add 
callback references and services during the build. Another loop is needed to 
capture these contracts, right?

Thanks,
Raymond
--------------------------------------------------
From: "Simon Laws" <si...@googlemail.com>
Sent: Wednesday, December 02, 2009 4:07 AM
To: <de...@tuscany.apache.org>
Subject: Re: svn commit: r886027 - in 
/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl: 
ComponentBuilderImpl.java ComponentPolicyBuilderImpl.java 
CompositePolicyBuilderImpl.java

> Hi Raymond
>
> I think this change makes the policy processing much clearer. I have a
> small aesthetic comment so feel free to ignore if you don't like
> it....
>
> As the component builder already loops explicitly over
> services/references to calculate the configuration could be jump into
> the ComponentPolicyBuilder at that point rather than diving into the
> ComponentPolicyBuilder .configure() operation which loops over
> services/references again?
>
> Simon 


Re: svn commit: r886027 - in /tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl: ComponentBuilderImpl.java ComponentPolicyBuilderImpl.java CompositePolicyBuilderImpl.java

Posted by Simon Laws <si...@googlemail.com>.
Hi Raymond

I think this change makes the policy processing much clearer. I have a
small aesthetic comment so feel free to ignore if you don't like
it....

As the component builder already loops explicitly over
services/references to calculate the configuration could be jump into
the ComponentPolicyBuilder at that point rather than diving into the
ComponentPolicyBuilder .configure() operation which loops over
services/references again?

Simon