Hi,

I see a few issues here:

1) The operation-level intents/policySets can be configured under the service, reference, binding and implementation elements. The contractName property of ConfiguredOperation interface is not good fit.

2) Using name to reference the attach point is not consistent with our model because it requires lookup.

3) In org.apache.tuscany.sca.assembly.xml.ConfiguredOperationProcessor.read(), the following line won't work because there is no "service" attribute on the operation element.
   configuredOp.setContractName(reader.getAttributeValue(null, SERVICE);

The model should be designed in such a way so that runtime can easily calculate the effective policySets for a given context represented as (component, service/reference, binding, operation) or (component/implementation, operation). Would it be simpler if we hold the intents/policySets at the binding (for interaction policies) and component (for implementation policies)? The intent/policySet could have a pointer to the attachpoint & operation.

Thanks,
Raymond

----- Original Message ----- From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, December 10, 2007 12:09 AM
Subject: svn commit: r602804 - in /incubator/tuscany/java/sca/modules: assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ assembly/src/main/java/org/apache/tuscany/sca/assembly/im...


Author: svkrish
Date: Mon Dec 10 00:08:47 2007
New Revision: 602804

URL: http://svn.apache.org/viewvc?rev=602804&view=rev
Log:
fixing support for policies on operations, removing hack from ComponentImpl

Modified:

incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java

incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingPolicyComputer.java

incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java

incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ImplementationPolicyComputer.java

incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PolicyComputer.java

incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentImpl.java

incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentTypeImpl.java

incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaPolicyHandlingRuntimeWireProcessor.java

incubator/tuscany/java/sca/modules/implementation-java-xml/src/test/java/org/apache/tuscany/sca/implementation/java/xml/ReadTestCase.java

Modified: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java (original) +++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java Mon Dec 10 00:08:47 2007
@@ -794,21 +794,21 @@
//reused and its likely that this implementation instance will not hold after its resolution

component.getRequiredIntents().addAll(((PolicySetAttachPoint)implementation).getRequiredIntents());

component.getPolicySets().addAll(((PolicySetAttachPoint)implementation).getPolicySets());
+ if ( implementation instanceof OperationsConfigurator ) { + ((OperationsConfigurator)component).getConfiguredOperations(). + addAll(((OperationsConfigurator)implementation).getConfiguredOperations());
+
+ for ( ConfiguredOperation op : ((OperationsConfigurator)component). + getConfiguredOperations() ) { + resolveIntents(op.getRequiredIntents(), resolver); + resolvePolicySets(op.getPolicySets(), resolver);
+                        }
+
+                    }
                }

implementation = resolveImplementation(implementation, resolver);
                component.setImplementation(implementation);
-
- //need to do this so that component can set the configured
-                //operations to the implementation instance
-                implementation = component.getImplementation();
-                if ( implementation instanceof OperationsConfigurator ) {
- OperationsConfigurator opConfigurator = (OperationsConfigurator)implementation; - for ( ConfiguredOperation op : opConfigurator.getConfiguredOperations() ) { - resolveIntents(op.getRequiredIntents(), resolver);
-                        resolvePolicySets(op.getPolicySets(), resolver);
-                    }
-                }
            }
        }
    }

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingPolicyComputer.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingPolicyComputer.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingPolicyComputer.java (original) +++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingPolicyComputer.java Mon Dec 10 00:08:47 2007
@@ -19,7 +19,6 @@

package org.apache.tuscany.sca.assembly.builder.impl;

-import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java (original) +++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java Mon Dec 10 00:08:47 2007
@@ -836,7 +836,7 @@

bindingPolicyComputer.computeBindingIntentsAndPolicySets(service);

bindingPolicyComputer.determineApplicableBindingPolicySets(service, null);
            } catch ( Exception e ) {
- warning("Theres been an exception relation to policies... " + e, e); + warning("Theres been an exception related to policies... " + e, e);
                //throw new RuntimeException(e);
            }

@@ -861,7 +861,7 @@

bindingPolicyComputer.computeBindingIntentsAndPolicySets(reference);

bindingPolicyComputer.determineApplicableBindingPolicySets(reference, null);
            } catch ( Exception e ) {
- warning("Theres been an exception relation to policies... " + e, e); + warning("Theres been an exception related to policies... " + e, e);
                //throw new RuntimeException(e);
            }
        }
@@ -871,7 +871,7 @@
            try {

implPolicyComputer.computeImplementationIntentsAndPolicySets(implemenation, component);
            } catch ( Exception e ) {
- warning("Theres been an exception relation to policies... " + e, e); + warning("Theres been an exception related to policies... " + e, e);
                //throw new RuntimeException(e);
            }

@@ -907,7 +907,7 @@
                                           false);
                    }
                } catch ( Exception e ) {
- warning("Theres been an exception relation to policies... " + e, e); + warning("Theres been an exception related to policies... " + e, e);
                    //throw new RuntimeException(e);
                }
            }
@@ -945,7 +945,7 @@
                                               false);
                    }
                } catch ( Exception e ) {
- warning("Theres been an exception relation to policies... " + e, e); + warning("Theres been an exception related to policies... " + e, e);
                    //throw new RuntimeException(e);
                }
            }

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ImplementationPolicyComputer.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ImplementationPolicyComputer.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ImplementationPolicyComputer.java (original) +++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ImplementationPolicyComputer.java Mon Dec 10 00:08:47 2007
@@ -54,7 +54,9 @@

trimInherentlyProvidedIntents(policiedImplementation.getType(),
                                          parent.getRequiredIntents());

- computeIntentsForOperations((IntentAttachPoint)implementation, parent.getRequiredIntents());
+            computeIntentsForOperations((OperationsConfigurator)parent,
+ (IntentAttachPoint)implementation,
+                                        parent.getRequiredIntents());


List<PolicySet> prunedPolicySets = computeInheritablePolicySets(parent,
@@ -63,7 +65,9 @@
            parent.getPolicySets().clear();
            parent.getPolicySets().addAll(prunedPolicySets);
            computePolicySets(parent);
- computePolicySetsForOperations(parent, (PolicySetAttachPoint)implementation);
+            computePolicySetsForOperations(parent,
+ (OperationsConfigurator)parent, + (PolicySetAttachPoint)implementation);

            determineApplicableImplementationPolicySets(parent);
        }
@@ -75,8 +79,8 @@

//trim intents specified in operations. First check for policysets specified on the operation
            //and then in the parent implementation
- if ( component.getImplementation() instanceof OperationsConfigurator ) { - OperationsConfigurator opConfigurator = (OperationsConfigurator)component.getImplementation();
+            if ( component instanceof OperationsConfigurator ) {
+ OperationsConfigurator opConfigurator = (OperationsConfigurator)component;

for ( ConfiguredOperation confOp : opConfigurator.getConfiguredOperations() ) { trimProvidedIntents(confOp.getRequiredIntents(), confOp.getPolicySets());

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PolicyComputer.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PolicyComputer.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PolicyComputer.java (original) +++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PolicyComputer.java Mon Dec 10 00:08:47 2007
@@ -28,7 +28,6 @@

import org.apache.tuscany.sca.assembly.Base;
import org.apache.tuscany.sca.assembly.ConfiguredOperation;
-import org.apache.tuscany.sca.assembly.Implementation;
import org.apache.tuscany.sca.assembly.OperationsConfigurator;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.IntentAttachPoint;
@@ -52,21 +51,17 @@

protected List<Intent> computeInheritableIntents(IntentAttachPointType attachPointType, List<Intent> inheritableIntents) throws PolicyValidationException {
-        //expand profile intents in inherited intents
        List<Intent> validInheritableIntents = new ArrayList<Intent>();
-        List<Intent> expandedIntents = null;
-        expandedIntents = expandProfileIntents(inheritableIntents);
-        inheritableIntents.clear();
-        inheritableIntents.addAll(expandedIntents);
+
+        //expand profile intents in inherited intents
+        expandProfileIntents(inheritableIntents);

//validate if inherited intent applies to the attachpoint (binding / implementation) and //only add such intents to the attachpoint (binding / implementation)
        for (Intent intent : inheritableIntents) {
            if ( !intent.isUnresolved() ) {
                for (QName constrained : intent.getConstrains()) {
- if (attachPointType != null && attachPointType.getName().getNamespaceURI().equals(constrained - .getNamespaceURI()) && attachPointType.getName().getLocalPart()
-                        .startsWith(constrained.getLocalPart())) {
+                    if ( isConstrained(constrained, attachPointType)) {
                        validInheritableIntents.add(intent);
                        break;
                    }
@@ -79,49 +74,22 @@
        return validInheritableIntents;
    }

-    protected List<Intent> expandProfileIntents(List<Intent> intents) {
-        List<Intent> expandedIntents = new ArrayList<Intent>();
-        for ( Intent intent : intents ) {
-            if ( intent instanceof ProfileIntent ) {
-                ProfileIntent profileIntent = (ProfileIntent)intent;
- List<Intent> requiredIntents = profileIntent.getRequiredIntents(); - expandedIntents.addAll(expandProfileIntents(requiredIntents));
-            } else {
-                expandedIntents.add(intent);
-            }
+    protected void expandProfileIntents(List<Intent> intents) {
+        List<Intent> expandedIntents = null;
+        if ( intents.size() > 0 ) {
+            expandedIntents = findAndExpandProfileIntents(intents);
+            intents.clear();
+            intents.addAll(expandedIntents);
        }
-        return expandedIntents;
    }

    protected void computeIntents(IntentAttachPoint intentAttachPoint) {
-        List<Intent> expandedIntents = null;
-
//expand profile intents specified in the attachpoint (binding / implementation)
-        if ( intentAttachPoint.getRequiredIntents().size() > 0 ) {
- expandedIntents = expandProfileIntents(intentAttachPoint.getRequiredIntents());
-            intentAttachPoint.getRequiredIntents().clear();
- intentAttachPoint.getRequiredIntents().addAll(expandedIntents);
-        }
-
-        //remove duplicates
-        Map<QName, Intent> intentsTable = new HashMap<QName, Intent>();
-        for ( Intent intent : intentAttachPoint.getRequiredIntents() ) {
-            intentsTable.put(intent.getName(), intent);
-        }
+        expandProfileIntents(intentAttachPoint.getRequiredIntents());

+        //remove duplicates and ...
//where qualified form of intent exists retain it and remove the qualifiable intent - Map<QName, Intent> intentsTableCopy = new HashMap<QName, Intent>(intentsTable);
-        //if qualified form of intent exists remove the unqualified form
-        for ( Intent intent : intentsTableCopy.values() ) {
-            if ( intent instanceof QualifiedIntent ) {
- QualifiedIntent qualifiedIntent = (QualifiedIntent)intent; - if ( intentsTable.get(qualifiedIntent.getQualifiableIntent().getName()) != null ) { - intentsTable.remove(qualifiedIntent.getQualifiableIntent().getName());
-                }
-            }
-        }
-        intentAttachPoint.getRequiredIntents().clear();
- intentAttachPoint.getRequiredIntents().addAll(intentsTable.values());
+        filterDuplicatesAndQualifiableIntents(intentAttachPoint);
    }

protected void trimInherentlyProvidedIntents(IntentAttachPointType attachPointType, List<Intent>intents) {
@@ -135,117 +103,64 @@
        }
    }

- protected boolean isProvidedInherently(IntentAttachPointType attachPointType, Intent intent) {
-        return ( attachPointType != null &&
-                 (( attachPointType.getAlwaysProvidedIntents() != null &&
- attachPointType.getAlwaysProvidedIntents().contains(intent) ) ||
-                  ( attachPointType.getMayProvideIntents() != null &&
- attachPointType.getMayProvideIntents().contains(intent) )
-                 ) );
-     }

protected void computeIntentsForOperations(IntentAttachPoint intentAttachPoint) throws PolicyValidationException { - computeIntentsForOperations(intentAttachPoint, intentAttachPoint.getRequiredIntents());
+        if ( intentAttachPoint instanceof OperationsConfigurator ) {
+ computeIntentsForOperations((OperationsConfigurator)intentAttachPoint,
+                                        intentAttachPoint,
+ intentAttachPoint.getRequiredIntents());
+        }
    }

- protected void computeIntentsForOperations(IntentAttachPoint intentAttachPoint, List<Intent> parentIntents) throws PolicyValidationException {
-        if ( intentAttachPoint instanceof OperationsConfigurator ) {
- IntentAttachPointType attachPointType = intentAttachPoint.getType(); + protected void computeIntentsForOperations(OperationsConfigurator opConfigurator, + IntentAttachPoint intentAttachPoint, + List<Intent> parentIntents) throws PolicyValidationException { + IntentAttachPointType attachPointType = intentAttachPoint.getType();
+
+        boolean found = false;
+ for ( ConfiguredOperation confOp : opConfigurator.getConfiguredOperations() ) {
+            //expand profile intents specified on operations
+            expandProfileIntents(confOp.getRequiredIntents());

-            boolean found = false;
+            //validateIntents(confOp, attachPointType);

- OperationsConfigurator opConfigurator = (OperationsConfigurator)intentAttachPoint;
-            List<Intent> expandedIntents = null;
- for ( ConfiguredOperation confOp : opConfigurator.getConfiguredOperations() ) {
-                //expand profile intents specified on operations
-                if ( confOp.getRequiredIntents().size() > 0 ) {
- expandedIntents = expandProfileIntents(confOp.getRequiredIntents());
-                    confOp.getRequiredIntents().clear();
-                    confOp.getRequiredIntents().addAll(expandedIntents);
-                }
-
-                if ( attachPointType != null ) {
- //validate intents specified against the parent (binding / implementation)
-                    found = false;
-                    for (Intent intent : confOp.getRequiredIntents()) {
-                        if ( !intent.isUnresolved() ) {
- for (QName constrained : intent.getConstrains()) { - if (attachPointType != null && attachPointType.getName().getNamespaceURI().equals(constrained - .getNamespaceURI()) && attachPointType.getName().getLocalPart() - .startsWith(constrained.getLocalPart())) {
-                                    found = true;
-                                    break;
-                                }
-                            }
+ //add intents specified for parent intent attach point (binding / implementation)
+            //wherever its not overriden in the operation
+            Intent tempIntent = null;
+            List<Intent> attachPointOpIntents = new ArrayList<Intent>();
+            for (Intent anIntent : parentIntents) {
+                found = false;

-                            if (!found) {
- throw new PolicyValidationException("Policy Intent '" + intent.getName() - + " specified for operation " + confOp.getName() - + "' does not constrain extension type "
-                                    + attachPointType.getName());
-                            }
-                        } else {
- throw new PolicyValidationException("Policy Intent '" + intent.getName() - + " specified for operation " + confOp.getName()
-                                + "' is not defined in this domain  ");
-                        }
-                    }
+                tempIntent = anIntent;
+                while ( tempIntent instanceof QualifiedIntent ) {
+ tempIntent = ((QualifiedIntent)tempIntent).getQualifiableIntent();
                }

- //add intents specified for parent intent attach point (binding / implementation)
-                //wherever its not overriden in the operation
-                Intent tempIntent = null;
- List<Intent> attachPointOpIntents = new ArrayList<Intent>();
-                for (Intent anIntent : parentIntents) {
-                    found = false;
-
-                    tempIntent = anIntent;
-                    while ( tempIntent instanceof QualifiedIntent ) {
- tempIntent = ((QualifiedIntent)tempIntent).getQualifiableIntent();
-                    }
-
- for ( Intent opIntent : confOp.getRequiredIntents() ) { - if ( opIntent.getName().getLocalPart().startsWith(tempIntent.getName().getLocalPart())) {
-                            found = true;
-                            break;
-                        }
-                    }
-
-                    if ( !found ) {
-                        attachPointOpIntents.add(anIntent);
+                for ( Intent opIntent : confOp.getRequiredIntents() ) {
+ if ( opIntent.getName().getLocalPart().startsWith(tempIntent.getName().getLocalPart())) {
+                        found = true;
+                        break;
                    }
                }

-                confOp.getRequiredIntents().addAll(attachPointOpIntents);
-
-                //remove duplicates
- Map<QName, Intent> intentsTable = new HashMap<QName, Intent>();
-                for ( Intent intent : confOp.getRequiredIntents() ) {
-                    intentsTable.put(intent.getName(), intent);
+                if ( !found ) {
+                    attachPointOpIntents.add(anIntent);
                }
-
- //where qualified form of intent exists retain it and remove the qualifiable intent - Map<QName, Intent> intentsTableCopy = new HashMap<QName, Intent>(intentsTable); - //if qualified form of intent exists remove the unqualified form
-                for ( Intent intent : intentsTableCopy.values() ) {
-                    if ( intent instanceof QualifiedIntent ) {
- QualifiedIntent qualifiedIntent = (QualifiedIntent)intent; - if ( intentsTable.get(qualifiedIntent.getQualifiableIntent().getName()) != null ) { - intentsTable.remove(qualifiedIntent.getQualifiableIntent().getName());
-                        }
-                    }
-                }
-                confOp.getRequiredIntents().clear();
- confOp.getRequiredIntents().addAll(intentsTable.values());
-
- //exclude intents that are inherently supported by the parent
-                //attachpoint-type (binding-type  / implementation-type)
-                if ( attachPointType != null ) {
- List<Intent> requiredIntents = new ArrayList<Intent>(confOp.getRequiredIntents());
-                    for ( Intent intent : requiredIntents ) {
- if ( isProvidedInherently(attachPointType, intent) ) {
-                            confOp.getRequiredIntents().remove(intent);
-                        }
+            }
+
+            confOp.getRequiredIntents().addAll(attachPointOpIntents);
+
+            //remove duplicates and ...
+ //where qualified form of intent exists retain it and remove the qualifiable intent
+            filterDuplicatesAndQualifiableIntents(confOp);
+
+            //exclude intents that are inherently supported by the parent
+            //attachpoint-type (binding-type  / implementation-type)
+            if ( attachPointType != null ) {
+ List<Intent> requiredIntents = new ArrayList<Intent>(confOp.getRequiredIntents());
+                for ( Intent intent : requiredIntents ) {
+ if ( isProvidedInherently(attachPointType, intent) ) {
+                        confOp.getRequiredIntents().remove(intent);
                    }
                }
            }
@@ -286,78 +201,67 @@

policySetAttachPoint.getPolicySets().addAll(policySetTable.values());

        //expand profile intents
-        List<Intent> expandedIntents = null;
for ( PolicySet policySet : policySetAttachPoint.getPolicySets() ) { - expandedIntents = expandProfileIntents(policySet.getProvidedIntents());
-            policySet.getProvidedIntents().clear();
-            policySet.getProvidedIntents().addAll(expandedIntents);
+            expandProfileIntents(policySet.getProvidedIntents());
        }
    }

    protected void computePolicySetsForOperations(Base parent,
PolicySetAttachPoint policySetAttachPoint)

throws PolicyValidationException {
+        if ( policySetAttachPoint instanceof OperationsConfigurator ) {
+            computePolicySetsForOperations(parent,
+ (OperationsConfigurator)policySetAttachPoint,
+                                           policySetAttachPoint);
+        }
+
+    }
+
+    protected void computePolicySetsForOperations(Base parent,
+ OperationsConfigurator opConfigurator, + PolicySetAttachPoint policySetAttachPoint) + throws PolicyValidationException {
        String appliesTo = null;
        String scdlFragment = "";
HashMap<QName, PolicySet> policySetTable = new HashMap<QName, PolicySet>(); IntentAttachPointType attachPointType = policySetAttachPoint.getType();

-        if ( policySetAttachPoint instanceof OperationsConfigurator ) {
- OperationsConfigurator opConfigurator = (OperationsConfigurator)policySetAttachPoint;
-
- for ( ConfiguredOperation confOp : opConfigurator.getConfiguredOperations() ) {
-                //validate policysets specified for the attachPoint
-                for (PolicySet policySet : confOp.getPolicySets()) {
-                    if ( !policySet.isUnresolved() ) {
-                        appliesTo = policySet.getAppliesTo();
-
- if (!PolicyValidationUtils.isPolicySetApplicable(scdlFragment, appliesTo, attachPointType)) { - throw new PolicyValidationException("Policy Set '" + policySet.getName() - + " specified for operation " + confOp.getName()
-                                + "' does not constrain extension type  "
-                                + attachPointType.getName());
-
-                        }
-                    } else {
+ for ( ConfiguredOperation confOp : opConfigurator.getConfiguredOperations() ) {
+            //validate policysets specified for the attachPoint
+            for (PolicySet policySet : confOp.getPolicySets()) {
+                if ( !policySet.isUnresolved() ) {
+                    appliesTo = policySet.getAppliesTo();
+
+ if (!PolicyValidationUtils.isPolicySetApplicable(scdlFragment, appliesTo, attachPointType)) { throw new PolicyValidationException("Policy Set '" + policySet.getName() + " specified for operation " + confOp.getName()
-                            + "' is not defined in this domain  ");
+                            + "' does not constrain extension type  "
+                            + attachPointType.getName());
+
                    }
+                } else {
+ throw new PolicyValidationException("Policy Set '" + policySet.getName() + + " specified for operation " + confOp.getName()
+                        + "' is not defined in this domain  ");
                }
-
-                //get rid of duplicate entries
-                for ( PolicySet policySet : confOp.getPolicySets() ) {
-                    policySetTable.put(policySet.getName(), policySet);
-                }
+            }

-                confOp.getPolicySets().clear();
-                confOp.getPolicySets().addAll(policySetTable.values());
-
-                //expand profile intents
-                List<Intent> expandedIntents = null;
-                for ( PolicySet policySet : confOp.getPolicySets() ) {
- expandedIntents = expandProfileIntents(policySet.getProvidedIntents());
-                    policySet.getProvidedIntents().clear();
- policySet.getProvidedIntents().addAll(expandedIntents);
-                }
+            //get rid of duplicate entries
+            for ( PolicySet policySet : confOp.getPolicySets() ) {
+                policySetTable.put(policySet.getName(), policySet);
            }
-        }
-    }
-
- protected void trimProvidedIntents(List<Intent> requiredIntents, PolicySet policySet) {
-        for ( Intent providedIntent : policySet.getProvidedIntents() ) {
-            if ( requiredIntents.contains(providedIntent) ) {
-                requiredIntents.remove(providedIntent);
-            }
-        }

- for ( Intent mappedIntent : policySet.getMappedPolicies().keySet() ) {
-            if ( requiredIntents.contains(mappedIntent) ) {
-                requiredIntents.remove(mappedIntent);
-            }
+            confOp.getPolicySets().clear();
+            confOp.getPolicySets().addAll(policySetTable.values());
+
+            //expand profile intents
+            for ( PolicySet policySet : confOp.getPolicySets() ) {
+                expandProfileIntents(policySet.getProvidedIntents());
+            }
        }
    }

+
protected void trimProvidedIntents(List<Intent> requiredIntents, List<PolicySet> policySets) {
        for ( PolicySet policySet : policySets ) {
            trimProvidedIntents(requiredIntents, policySet);
@@ -378,6 +282,100 @@
if (prevSize != policySetAttachPoint.getRequiredIntents().size()) {

policySetAttachPoint.getPolicySets().add(policySet);
                    }
+                }
+            }
+        }
+    }
+
+ private List<Intent> findAndExpandProfileIntents(List<Intent> intents) {
+        List<Intent> expandedIntents = new ArrayList<Intent>();
+        for ( Intent intent : intents ) {
+            if ( intent instanceof ProfileIntent ) {
+                ProfileIntent profileIntent = (ProfileIntent)intent;
+ List<Intent> requiredIntents = profileIntent.getRequiredIntents(); + expandedIntents.addAll(findAndExpandProfileIntents(requiredIntents));
+            } else {
+                expandedIntents.add(intent);
+            }
+        }
+        return expandedIntents;
+    }
+
+ private boolean isProvidedInherently(IntentAttachPointType attachPointType, Intent intent) {
+        return ( attachPointType != null &&
+                 (( attachPointType.getAlwaysProvidedIntents() != null &&
+ attachPointType.getAlwaysProvidedIntents().contains(intent) ) ||
+                  ( attachPointType.getMayProvideIntents() != null &&
+ attachPointType.getMayProvideIntents().contains(intent) )
+                 ) );
+     }
+
+ private void trimProvidedIntents(List<Intent> requiredIntents, PolicySet policySet) {
+        for ( Intent providedIntent : policySet.getProvidedIntents() ) {
+            if ( requiredIntents.contains(providedIntent) ) {
+                requiredIntents.remove(providedIntent);
+            }
+        }
+
+ for ( Intent mappedIntent : policySet.getMappedPolicies().keySet() ) {
+            if ( requiredIntents.contains(mappedIntent) ) {
+                requiredIntents.remove(mappedIntent);
+            }
+        }
+    }
+
+ private boolean isConstrained(QName constrained, IntentAttachPointType attachPointType) { + return (attachPointType != null && attachPointType.getName().getNamespaceURI().equals(constrained + .getNamespaceURI()) && attachPointType.getName().getLocalPart() + .startsWith(constrained.getLocalPart()) );
+    }
+
+ private void filterDuplicatesAndQualifiableIntents(IntentAttachPoint intentAttachPoint) {
+        //remove duplicates
+        Map<QName, Intent> intentsTable = new HashMap<QName, Intent>();
+        for ( Intent intent : intentAttachPoint.getRequiredIntents() ) {
+            intentsTable.put(intent.getName(), intent);
+        }
+
+ //where qualified form of intent exists retain it and remove the qualifiable intent + Map<QName, Intent> intentsTableCopy = new HashMap<QName, Intent>(intentsTable);
+        //if qualified form of intent exists remove the unqualified form
+        for ( Intent intent : intentsTableCopy.values() ) {
+            if ( intent instanceof QualifiedIntent ) {
+ QualifiedIntent qualifiedIntent = (QualifiedIntent)intent; + if ( intentsTable.get(qualifiedIntent.getQualifiableIntent().getName()) != null ) { + intentsTable.remove(qualifiedIntent.getQualifiableIntent().getName());
+                }
+            }
+        }
+        intentAttachPoint.getRequiredIntents().clear();
+ intentAttachPoint.getRequiredIntents().addAll(intentsTable.values());
+    }
+
+ private void validateIntents(ConfiguredOperation confOp, IntentAttachPointType attachPointType) throws PolicyValidationException {
+        boolean found = false;
+        if ( attachPointType != null ) {
+ //validate intents specified against the parent (binding / implementation)
+            found = false;
+            for (Intent intent : confOp.getRequiredIntents()) {
+                if ( !intent.isUnresolved() ) {
+                    for (QName constrained : intent.getConstrains()) {
+ if (isConstrained(constrained, attachPointType)) {
+                            found = true;
+                            break;
+                        }
+                    }
+
+                    if (!found) {
+ throw new PolicyValidationException("Policy Intent '" + intent.getName() + + " specified for operation " + confOp.getName()
+                            + "' does not constrain extension type  "
+                            + attachPointType.getName());
+                    }
+                } else {
+ throw new PolicyValidationException("Policy Intent '" + intent.getName() + + " specified for operation " + confOp.getName()
+                        + "' is not defined in this domain  ");
                }
            }
        }

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentImpl.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentImpl.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentImpl.java (original) +++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentImpl.java Mon Dec 10 00:08:47 2007
@@ -39,7 +39,7 @@
 *
 * @version $Rev$ $Date$
 */
-public class ComponentImpl extends ExtensibleImpl implements Component, Cloneable { +public class ComponentImpl extends ExtensibleImpl implements Component, Cloneable, OperationsConfigurator {
    private ConstrainingType constrainingType;
    private Implementation implementation;
    private String name;
@@ -51,13 +51,7 @@
    private List<PolicySet> policySets = new ArrayList<PolicySet>();
    private Boolean autowire;
    private IntentAttachPointType type;
-
- private PolicySetAttachPoint implPolicyConf = new PolicySetAttachPointImpl(); - private List<ConfiguredOperation> configuredImplOps = new ArrayList<ConfiguredOperation>();
-    //private PolicyContext policyContext = new PolicyContextImpl();
- //private Map<String, Object> policyContext = new Hashtable<String, Object>();
-    //String IMPL_POLICY_CONTEXT = "IMPL_POLICY_CONTEXT";
- //String IMPL_OPERATIONS_POLICY_CONTEXT = "IMPL_OPERATIONS_POLICY_CONTEXT"; + private List<ConfiguredOperation> configuredImplOperations = new ArrayList<ConfiguredOperation>();

    /**
     * Constructs a new component.
@@ -97,16 +91,6 @@
    }

    public Implementation getImplementation() {
-        if ( implementation instanceof PolicySetAttachPoint ) {
- PolicySetAttachPoint policiedImpl = (PolicySetAttachPoint)implementation;
-
- /*policiedImpl.setRequiredIntents(implPolicyConf.getRequiredIntents());
-            policiedImpl.setPolicySets(implPolicyConf.getPolicySets());*/
-
-            if ( implementation instanceof OperationsConfigurator ) {
- ((OperationsConfigurator)implementation).setConfiguredOperations(configuredImplOps);
-            }
-        }
        return implementation;
    }

@@ -132,21 +116,6 @@

    public void setImplementation(Implementation implementation) {
        this.implementation = implementation;
-        if ( implementation instanceof PolicySetAttachPoint
-            && implementation.isUnresolved() )  {
- /*PolicySetAttachPoint policiedImpl = (PolicySetAttachPoint)implementation; - implPolicyConf.getRequiredIntents().addAll(policiedImpl.getRequiredIntents()); - implPolicyConf.getPolicySets().addAll(policiedImpl.getPolicySets());
-            */
-            if ( implementation instanceof OperationsConfigurator ) {
- OperationsConfigurator operationConfig = (OperationsConfigurator)implementation;
-
-                if ( operationConfig.getConfiguredOperations() != null &&
- !operationConfig.getConfiguredOperations().isEmpty() ) { - configuredImplOps.addAll(operationConfig.getConfiguredOperations());
-                }
-            }
-        }
    }

    public void setName(String name) {
@@ -190,6 +159,15 @@
        this.requiredIntents = intents;

    }
+
+    public List<ConfiguredOperation> getConfiguredOperations() {
+        return configuredImplOperations;
+    }
+
+ public void setConfiguredOperations(List<ConfiguredOperation> configuredOperations) {
+        this.configuredImplOperations = configuredOperations;
+    }
+

private class PolicySetAttachPointImpl implements PolicySetAttachPoint {
        private List<Intent> requiredIntents = new ArrayList<Intent>();

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentTypeImpl.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentTypeImpl.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentTypeImpl.java (original) +++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentTypeImpl.java Mon Dec 10 00:08:47 2007
@@ -126,14 +126,6 @@
        this.requiredIntents = intents;
    }

-    public List<ConfiguredOperation> getConfiguredOperations() {
-        return configuredOperations;
-    }
-
- public void setConfiguredOperations(List<ConfiguredOperation> configuredOperations) {
-        this.configuredOperations = configuredOperations;
-    }
-
    @Override
    public int hashCode() {
        return String.valueOf(getURI()).hashCode();
@@ -154,5 +146,13 @@
                return false;
            }
        }
+    }
+
+    public List<ConfiguredOperation> getConfiguredOperations() {
+        return configuredOperations;
+    }
+
+ public void setConfiguredOperations(List<ConfiguredOperation> configuredOperations) {
+        this.configuredOperations = configuredOperations;
    }
}

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaPolicyHandlingRuntimeWireProcessor.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaPolicyHandlingRuntimeWireProcessor.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaPolicyHandlingRuntimeWireProcessor.java (original) +++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaPolicyHandlingRuntimeWireProcessor.java Mon Dec 10 00:08:47 2007
@@ -80,7 +80,7 @@
applicablePolicyHandlers = new ArrayList<PolicyHandler>(); if ( javaImpl instanceof OperationsConfigurator ) { String operationName = chain.getTargetOperation().getName(); - OperationsConfigurator opConfigurator = (OperationsConfigurator)javaImpl; + OperationsConfigurator opConfigurator = (OperationsConfigurator)component; for ( ConfiguredOperation confOp : opConfigurator.getConfiguredOperations() ) { if ( confOp.getName().equals(operationName)) { for ( PolicySet policySet : confOp.getPolicySets() ) {

Modified: incubator/tuscany/java/sca/modules/implementation-java-xml/src/test/java/org/apache/tuscany/sca/implementation/java/xml/ReadTestCase.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-xml/src/test/java/org/apache/tuscany/sca/implementation/java/xml/ReadTestCase.java?rev=602804&r1=602803&r2=602804&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-xml/src/test/java/org/apache/tuscany/sca/implementation/java/xml/ReadTestCase.java (original) +++ incubator/tuscany/java/sca/modules/implementation-java-xml/src/test/java/org/apache/tuscany/sca/implementation/java/xml/ReadTestCase.java Mon Dec 10 00:08:47 2007
@@ -170,7 +170,7 @@
        }

//test for proper aggregation of policy intents and policysets on operations of implementation - OperationsConfigurator opConf = (OperationsConfigurator)composite.getComponents().get(5).getImplementation(); + OperationsConfigurator opConf = (OperationsConfigurator)composite.getComponents().get(5);

assertEquals(opConf.getConfiguredOperations().get(0).getRequiredIntents().size(), 4); for ( Intent intent : opConf.getConfiguredOperations().get(0).getRequiredIntents()) {
            String intentName = intent.getName().getLocalPart();
@@ -180,7 +180,7 @@
            }
        }

- opConf = (OperationsConfigurator)composite.getComponents().get(6).getImplementation(); + opConf = (OperationsConfigurator)composite.getComponents().get(6);

assertEquals(opConf.getConfiguredOperations().get(0).getRequiredIntents().size(), 3); for ( Intent intent : opConf.getConfiguredOperations().get(0).getRequiredIntents()) {
            String intentName = intent.getName().getLocalPart();
@@ -238,7 +238,7 @@
        }

//test for computation of policysets on operations of implementation - OperationsConfigurator opConf = (OperationsConfigurator)composite.getComponents().get(5).getImplementation(); + OperationsConfigurator opConf = (OperationsConfigurator)composite.getComponents().get(5);

assertEquals(opConf.getConfiguredOperations().get(0).getPolicySets().size(), 3); for ( PolicySet policySet : opConf.getConfiguredOperations().get(0).getPolicySets() ) {
            String policySetName = policySet.getName().getLocalPart();
@@ -248,7 +248,7 @@
            }
        }

- opConf = (OperationsConfigurator)composite.getComponents().get(6).getImplementation(); + opConf = (OperationsConfigurator)composite.getComponents().get(6);

assertEquals(opConf.getConfiguredOperations().get(0).getPolicySets().size(), 3); for ( PolicySet policySet : opConf.getConfiguredOperations().get(0).getPolicySets() ) {
            String policySetName = policySet.getName().getLocalPart();



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to