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]

Reply via email to