On Wed, Jul 14, 2010 at 3:42 PM,  <bdan...@apache.org> wrote:
> Author: bdaniel
> Date: Wed Jul 14 14:42:16 2010
> New Revision: 964064
>
> URL: http://svn.apache.org/viewvc?rev=964064&view=rev
> Log:
> Ignore direct policy sets when external policy sets are attached
>
> Modified:
>    
> 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/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=964064&r1=964063&r2=964064&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 Jul 14 14:42:16 2010
> @@ -381,6 +381,18 @@ public class ComponentPolicyBuilderImpl
>         return null;
>     }
>
> +    // Replace qualifiable intents with their default qualifier. This can't 
> be done until
> +    // after inheritance.
> +    protected void expandDefaultIntents(PolicySubject subject, 
> BuilderContext context) {
> +
> +        Set<Intent> copy = new HashSet<Intent>(subject.getRequiredIntents());
> +        for (Intent i : copy) {
> +            if (i.getDefaultQualifiedIntent() != null) {
> +                subject.getRequiredIntents().remove(i);
> +                
> subject.getRequiredIntents().add(i.getDefaultQualifiedIntent());
> +            }
> +        }
> +    }
>     protected void resolveAndNormalize(PolicySubject subject, BuilderContext 
> context) {
>         Definitions definitions = context.getDefinitions();
>         Set<Intent> intents = new HashSet<Intent>();
> @@ -422,14 +434,6 @@ public class ComponentPolicyBuilderImpl
>
>         }
>
> -        // 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());
> -            }
> -        }
>
>         subject.getRequiredIntents().clear();
>         subject.getRequiredIntents().addAll(intents);
> @@ -524,7 +528,9 @@ public class ComponentPolicyBuilderImpl
>                 // TODO - this could be because the intent is provided by and 
> extension
>                 //        and hence there is no explicit policy set. Need and 
> extra piece
>                 //        of processing to walk through the extension models.
> -                warning(context.getMonitor(), "IntentNotSatisfiedAtBuild", 
> subject, intent.getName(), subject.toString());
> +
> +            //    warning(context.getMonitor(), "IntentNotSatisfiedAtBuild", 
> subject, intent.getName(), subject.toString());
> +                  error(context.getMonitor(), "IntentNotSatisfiedAtBuild", 
> subject, intent.getName(), subject.toString());
>             }
>         }
>     }
>
> 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=964064&r1=964063&r2=964064&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 Jul 14 14:42:16 2010
> @@ -19,6 +19,8 @@
>
>  package org.apache.tuscany.sca.builder.impl;
>
> +import java.util.ArrayList;
> +import java.util.List;
>  import java.util.Set;
>
>  import javax.xml.namespace.QName;
> @@ -37,6 +39,8 @@ import org.apache.tuscany.sca.assembly.b
>  import org.apache.tuscany.sca.core.ExtensionPointRegistry;
>  import org.apache.tuscany.sca.monitor.Monitor;
>  import org.apache.tuscany.sca.policy.Intent;
> +import org.apache.tuscany.sca.policy.PolicySet;
> +import org.apache.tuscany.sca.policy.PolicySubject;
>
>  /**
>  * A composite builder that computes policy sets based on attached intents 
> and policy sets.
> @@ -113,9 +117,15 @@ public class CompositePolicyBuilderImpl
>                                 // Replace qualifiable intents with the 
> default qualied intent
>                                 resolveAndNormalize(ep, context);
>
> +                                // Replace qualifiable intents with their 
> default qualifier
> +                                expandDefaultIntents(ep, context);
> +
>                                 // Remove the intents whose @contraints do 
> not include the current element
>                                 removeConstrainedIntents(ep, context);
>
> +                                // Remove any direct policy sets if an 
> external one has been applied
> +                                removeDirectPolicySetsIfExternalExists(ep, 
> context);
> +
>                                 // check that all intents are resolved
>                                 checkIntentsResolved(ep, context);
>
> @@ -157,9 +167,14 @@ public class CompositePolicyBuilderImpl
>                                 // Replace qualifiable intents with the 
> default qualified intent
>                                 resolveAndNormalize(epr, context);
>
> +                                // Replace qualifiable intents with their 
> default qualifier
> +                                expandDefaultIntents(epr, context);
> +
>                                 // Remove the intents whose @contraints do 
> not include the current element
>                                 removeConstrainedIntents(epr, context);
>
> +                                removeDirectPolicySetsIfExternalExists(epr, 
> context);
> +
>                                 // check that all intents are resolved
>                                 checkIntentsResolved(epr, context);
>
> @@ -183,6 +198,8 @@ public class CompositePolicyBuilderImpl
>                             // Remove the intents whose @contraints do not 
> include the current element
>                             removeConstrainedIntents(implementation, context);
>
> +                            
> removeDirectPolicySetsIfExternalExists(implementation, context);
> +
>                             // check that all intents are resolved
>                             checkIntentsResolved(implementation, context);
>                         }
> @@ -196,7 +213,26 @@ public class CompositePolicyBuilderImpl
>         }
>     }
>
> -    /**
> +    private void removeDirectPolicySetsIfExternalExists(PolicySubject 
> subject,
> +                       BuilderContext context) {
> +       boolean foundExternalPolicySet = false;
> +               for (PolicySet ps : subject.getPolicySets() ) {
> +                       if ( ps.getAttachTo() != null )
> +                               foundExternalPolicySet = true;
> +               }
> +
> +               if ( foundExternalPolicySet ) {
> +                       List<PolicySet> copy = new 
> ArrayList<PolicySet>(subject.getPolicySets());
> +                       for ( PolicySet ps : copy ) {
> +                               if ( ps.getAttachTo() == null ) {
> +                                       subject.getPolicySets().remove(ps);
> +                               }
> +                       }
> +               }
> +
> +       }
> +
> +       /**
>      * This is mainly about removing policies that don't "applyTo" the 
> element where
>      * they have ended up after all the attachment and inheritance processing
>      *
>
>
>


In the change above which changes the intent warning into and error...

-                warning(context.getMonitor(),
"IntentNotSatisfiedAtBuild", subject, intent.getName(),
subject.toString());
+
+            //    warning(context.getMonitor(),
"IntentNotSatisfiedAtBuild", subject, intent.getName(),
subject.toString());
+                  error(context.getMonitor(),
"IntentNotSatisfiedAtBuild", subject, intent.getName(),
subject.toString());

It looks like we do need to add the code to check the extension to see
if it "provides" the intent before raising the error. I just ran
across this in the async sample that Kelvin's been bringing up where
it fails with this error even though binding.ws does always provide
asyncInvocation.

Simon
-- 
Apache Tuscany committer: tuscany.apache.org
Co-author of a book about Tuscany and SCA: tuscanyinaction.com

Reply via email to