Simon,
 It only saves a single composite document to the DOM (it operates on
the output of CompositeProcessor.write()). Any composites referenced
by <implementation.composite> elements are not included.

Before this change, attachments outside of the main composite were
being lost because the xpath processor was evaluating against the DOM
for the top level composite.

Brent

On Tue, Jul 27, 2010 at 5:12 AM, Simon Laws <[email protected]> wrote:
> On Mon, Jul 26, 2010 at 5:40 AM,  <[email protected]> wrote:
>> Author: bdaniel
>> Date: Mon Jul 26 04:40:48 2010
>> New Revision: 979157
>>
>> URL: http://svn.apache.org/viewvc?rev=979157&view=rev
>> Log:
>> Fix up appliesTo processing. Need to save each separate composite document 
>> as a dom and check endpoints
>>
>> Modified:
>>    
>> tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAppliesToBuilderImpl.java
>>
>> Modified: 
>> tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAppliesToBuilderImpl.java
>> URL: 
>> http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAppliesToBuilderImpl.java?rev=979157&r1=979156&r2=979157&view=diff
>> ==============================================================================
>> --- 
>> tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAppliesToBuilderImpl.java
>>  (original)
>> +++ 
>> tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAppliesToBuilderImpl.java
>>  Mon Jul 26 04:40:48 2010
>> @@ -83,44 +83,47 @@ public class PolicyAppliesToBuilderImpl
>>         }
>>     }
>>
>> -    private Composite checkAppliesTo(Document document, Map<PolicySet, 
>> List<PolicySubject>> appliesToSubjects, Composite composite, BuilderContext 
>> context) throws Exception {
>> -        // look at policies recursively
>> -        for (Component component : composite.getComponents()) {
>> -            Implementation implementation = component.getImplementation();
>> -            if (implementation instanceof Composite) {
>> -                checkAppliesTo(document, appliesToSubjects, 
>> (Composite)implementation, context);
>> -            }
>> -        }
>> +    private Composite checkAppliesTo(Document document, Map<PolicySet, 
>> List<PolicySubject>> appliesToSubjects, Composite topComposite, 
>> BuilderContext context) throws Exception {
>> +
>> +       for ( Component component : topComposite.getComponents() ) {
>> +               if ( component.getImplementation() instanceof Composite ) {
>> +                       Composite nested = (Composite) 
>> component.getImplementation();
>> +                       checkAppliesTo(saveAsDOM(nested),new 
>> HashMap<PolicySet, List<PolicySubject>>(), nested, context );
>> +               }
>> +       }
>>
>> -        for (Component component : composite.getComponents()) {
>> +       for (Component component : topComposite.getComponents()) {
>>
>> -            for (ComponentService componentService : 
>> component.getServices()) {
>> -                for (Endpoint ep : componentService.getEndpoints()) {
>> -                    if (ep.getBinding() instanceof PolicySubject) {
>> -                        checkAppliesToSubject(document, appliesToSubjects, 
>> composite, (PolicySubject)ep.getBinding(), ep.getPolicySets());
>> -                    }
>> -                }
>> -            }
>> +               for (ComponentService componentService : 
>> component.getServices()) {
>> +                       for (Endpoint ep : componentService.getEndpoints()) {
>> +                               checkAppliesToSubject(document, 
>> appliesToSubjects, topComposite, (PolicySubject)ep, ep.getPolicySets());
>> +                               if (ep.getBinding() instanceof 
>> PolicySubject) {
>> +                                       checkAppliesToSubject(document, 
>> appliesToSubjects, topComposite, (PolicySubject)ep.getBinding(), 
>> ep.getPolicySets());
>> +                               }
>> +                       }
>> +               }
>>
>> -            for (ComponentReference componentReference : 
>> component.getReferences()) {
>> -                for (EndpointReference epr : 
>> componentReference.getEndpointReferences()) {
>> -                    if (epr.getBinding() instanceof PolicySubject) {
>> -                        checkAppliesToSubject(document, appliesToSubjects, 
>> composite, (PolicySubject)epr.getBinding(), epr.getPolicySets());
>> -                    }
>> -                }
>> -            }
>> +               for (ComponentReference componentReference : 
>> component.getReferences()) {
>> +                       for (EndpointReference epr : 
>> componentReference.getEndpointReferences()) {
>> +                               checkAppliesToSubject(document, 
>> appliesToSubjects, topComposite, (PolicySubject)epr, epr.getPolicySets());
>> +                               if (epr.getBinding() instanceof 
>> PolicySubject) {
>> +                                       checkAppliesToSubject(document, 
>> appliesToSubjects, topComposite, (PolicySubject)epr.getBinding(), 
>> epr.getPolicySets());
>> +                               }
>> +                       }
>> +               }
>>
>> -            Implementation implementation = component.getImplementation();
>> -            if (implementation != null &&
>> -                implementation instanceof PolicySubject) {
>> -                checkAppliesToSubject(document, appliesToSubjects, 
>> composite, implementation, implementation.getPolicySets());
>> -            }
>> -        }
>> -
>> -        return composite;
>> +               Implementation implementation = 
>> component.getImplementation();
>> +               if (implementation != null &&
>> +                               implementation instanceof PolicySubject) {
>> +                       checkAppliesToSubject(document, appliesToSubjects, 
>> topComposite, implementation, implementation.getPolicySets());
>> +               }
>> +       }
>> +
>> +        return topComposite;
>>     }
>>
>> -    /**
>> +
>> +       /**
>>      * Checks that all the provided policy sets apply to the provided policy 
>> subject
>>      *
>>      * @param document
>> @@ -150,7 +153,8 @@ public class PolicyAppliesToBuilderImpl
>>                         Node node = nodes.item(i);
>>                         String index = getStructuralURI(node);
>>                         PolicySubject subject = lookup(composite, index);
>> -                        subjects.add(subject);
>> +                        if ( subject != null )
>> +                               subjects.add(subject);
>>                     }
>>                 }
>>             }
>>
>>
>>
>
> Hi Brent
>
> A couple of questions about this change... The line that kicks off the
> nested processing:
>
> +                       checkAppliesTo(saveAsDOM(nested),new
> HashMap<PolicySet, List<PolicySubject>>(), nested, context );
>
> Now creates a new dom and an empty cache. Is this necessary. I thought
> the top level DOM conversion produced a DOM for the whole hierarchy
> and that the cache would then be populated for all levels in one go?
>
> I also notice that line to check eprs and ep have been added, e.g.
>
>> +                               checkAppliesToSubject(document, 
>> appliesToSubjects, topComposite, (PolicySubject)epr, epr.getPolicySets());
>
> I think in the case the subject that is passed in should be
> epr.getReference() as the reference object will be stored in the cache
> rather than the epr itself. I'll check in a fix for this part.
>
> Regards
>
> Simon
>
> --
> Apache Tuscany committer: tuscany.apache.org
> Co-author of a book about Tuscany and SCA: tuscanyinaction.com
>

Reply via email to