diff options
Diffstat (limited to 'sca-java-2.x/tags/2.0-Beta2-RC2/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java')
-rw-r--r-- | sca-java-2.x/tags/2.0-Beta2-RC2/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java | 477 |
1 files changed, 0 insertions, 477 deletions
diff --git a/sca-java-2.x/tags/2.0-Beta2-RC2/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java b/sca-java-2.x/tags/2.0-Beta2-RC2/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java deleted file mode 100644 index 9c4da518d7..0000000000 --- a/sca-java-2.x/tags/2.0-Beta2-RC2/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.builder.impl; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.assembly.Base; -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.ComponentReference; -import org.apache.tuscany.sca.assembly.ComponentService; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.assembly.Endpoint; -import org.apache.tuscany.sca.assembly.EndpointReference; -import org.apache.tuscany.sca.assembly.Implementation; -import org.apache.tuscany.sca.assembly.builder.BuilderContext; -import org.apache.tuscany.sca.assembly.builder.CompositeBuilder; -import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException; -import org.apache.tuscany.sca.assembly.builder.PolicyBuilder; -import org.apache.tuscany.sca.assembly.xml.Constants; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.Operation; -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; -import org.apache.tuscany.sca.policy.util.PolicyHelper; - -/** - * A composite builder that computes policy sets based on attached intents and policy sets. - * Useful if you want to build the model without making any runtime decisions such as - * reference/services matching - * - * @version $Rev$ $Date$ - */ -public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl implements CompositeBuilder { - private final static QName NOLISTENER_INTENT = new QName(Base.SCA11_NS, "noListener"); - private CompositeBuilder policyAppliesToBuilder = null; - - public CompositePolicyBuilderImpl(ExtensionPointRegistry registry) { - super(registry); - - policyAppliesToBuilder = new PolicyAppliesToBuilderImpl(registry); - } - - public String getID() { - return "org.apache.tuscany.sca.assembly.builder.CompositePolicyBuilder"; - } - - public Composite build(Composite composite, BuilderContext context) throws CompositeBuilderException { - computePolicies(composite, context); - checkPolicies(composite, context); - buildPolicies(composite, context); - return composite; - } - - protected void computePolicies(Composite composite, BuilderContext context) { - Monitor monitor = context.getMonitor(); - monitor.pushContext("Composite: " + composite.getName().toString()); - - try { - resolveAndCheck(composite, context); - - // compute policies recursively - for (Component component : composite.getComponents()) { - monitor.pushContext("Component: " + component.getName()); - - //resolve component level - resolveAndCheck(component, context); - - try { - Implementation implementation = component.getImplementation(); - - for (ComponentService componentService : component.getServices()) { - monitor.pushContext("Service: " + componentService.getName()); - - try { - resolveAndCheck(componentService, context); - - if (componentService.getInterfaceContract() != null) { - resolveAndCheck(componentService.getInterfaceContract().getInterface(), context); - - resolveAndCheck(componentService.getInterfaceContract().getCallbackInterface(), context); - - } - - for (Endpoint ep : componentService.getEndpoints()) { - - - // Inherit from binding - inherit(ep, null, true, ep.getBinding()); - - // Inherit from composite/component/service - inherit(ep, null, true, ep.getService(), ep.getComponent(), composite ); - - if (componentService.getInterfaceContract() != null) { - // Inherit from the component.service.interface - // Do not check mutual exclusion here.. interfaces do not follow normal rules - // of the structural hierarchy (Policy spec 4.10) - inherit(ep, null, false, componentService.getInterfaceContract().getInterface()); - } - - // Replace profile intents with their required intents - // Replace unqualified intents if there is a qualified intent in the list - // 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); - - // Validate that noListener is not specified on a service endpoint - checkForNoListenerIntent(ep, context); - - // check that all intents are resolved - checkIntentsResolved(ep, context); - - // check that the resulting endpoint has no mutually exclusive intents - checkMutualExclusion(ep, context); - } - } finally { - monitor.popContext(); - } - } - - for (ComponentReference componentReference : component.getReferences()) { - monitor.pushContext("Reference: " + componentReference.getName().toString()); - - try { - - if (componentReference.getInterfaceContract() != null) { - resolveAndCheck(componentReference.getInterfaceContract().getInterface(), context); - - resolveAndCheck(componentReference.getInterfaceContract().getCallbackInterface(), - context); - } - - for (EndpointReference epr : componentReference.getEndpointReferences()) { - - // Inherit from binding - inherit(epr, null, true, epr.getBinding()); - - // Inherit from composite/component/reference - inherit(epr, null, true, epr.getReference(), epr.getComponent(), composite); - - // Inherit from the component.reference.interface - if (componentReference.getInterfaceContract() != null) { - // Do not check mutual exclusion here.. interfaces do not follow normal rules - // of the structural hierarchy (Policy spec 4.10) - inherit(epr, null, true, componentReference.getInterfaceContract().getInterface()); - } - - // Replace profile intents with their required intents - // Replace unqualified intents if there is a qualified intent in the list - // 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); - - // check that the resulting endpoint reference has no mutually exclusive intents - checkMutualExclusion(epr, context); - } - } finally { - monitor.popContext(); - } - } - - if (implementation instanceof Composite) { - resolveAndCheck(implementation, context); - inherit(implementation, Intent.Type.implementation, true, component, composite); - computePolicies((Composite)implementation, context); - expandDefaultIntents(implementation,context); - checkIntentsResolved(implementation,context); - } else { - resolveAndCheck(implementation, context); - if (implementation != null) { - inherit(implementation, Intent.Type.implementation, true, component, composite); - - // Remove the intents whose @contraints do not include the current element - removeConstrainedIntents(implementation, context); - - removeDirectPolicySetsIfExternalExists(implementation, context); - - // Replace qualifiable intents with their default qualifier - expandDefaultIntents(implementation, context); - - // check that all intents are resolved - checkIntentsResolved(implementation, context); - } - } - } finally { - monitor.popContext(); - } - } - removeConstrainedIntents(composite, context); - } finally { - monitor.popContext(); - } - } - - private void validateTransactionIntents(Composite composite, BuilderContext context) { - - for ( Component component : composite.getComponents() ) { - if ( component.getImplementation() != null ) { - if ( component.getImplementation() instanceof Composite ) - validateTransactionIntents((Composite) component.getImplementation(), context); - - for ( Intent implIntent : component.getImplementation().getRequiredIntents() ) { - if ( Constants.MANAGED_TRANSACTION_LOCAL_INTENT.equals(implIntent.getName() ) ) { - for ( ComponentReference reference : component.getReferences() ) { - for ( EndpointReference epr : reference.getEndpointReferences() ) { - for ( Intent eprIntent : epr.getRequiredIntents() ) { - if ( Constants.TRANSACTED_ONE_WAY_INTENT.equals(eprIntent.getName())) { - error(context.getMonitor(), - "TransactedOneWayWithManagedTransactionLocal", - this, - "reference", - epr.getComponent().getName(), - epr.getReference().getName()); - } else if ( Constants.PROPAGATES_TRANSACTION_INTENT.equals(eprIntent.getName())) { - error(context.getMonitor(), - "PropagatesTransactionWithLocalTran", - this, - "reference", - epr.getComponent().getName(), - epr.getReference().getName()); - } - } - } - } - for ( ComponentService service : component.getServices() ) { - for ( Endpoint ep : service.getEndpoints() ) { - for ( Intent epIntent : ep.getRequiredIntents() ) { - if ( Constants.TRANSACTED_ONE_WAY_INTENT.equals(epIntent.getName())) { - error(context.getMonitor(), - "TransactedOneWayWithManagedTransactionLocal", - this, - "service", - ep.getComponent().getName(), - ep.getService().getName()); - } else if ( Constants.PROPAGATES_TRANSACTION_INTENT.equals(epIntent.getName())) { - error(context.getMonitor(), - "PropagatesTransactionWithLocalTran", - this, - "service", - ep.getComponent().getName(), - ep.getService().getName()); - } - } - } - } - } else if ( Constants.NO_MANAGED_TRANSACTION_INTENT.equals(implIntent.getName())) { - for ( ComponentService service : component.getServices() ) { - for ( Endpoint ep : service.getEndpoints() ) { - for ( Intent epIntent : ep.getRequiredIntents() ) { - if ( Constants.PROPAGATES_TRANSACTION_INTENT.equals(epIntent.getName())) { - error(context.getMonitor(), - "PropagatesTransactionWithNoManagedTran", - this, - "service", - ep.getComponent().getName(), - ep.getService().getName()); - } - } - } - } - for ( ComponentReference reference : component.getReferences() ) { - for ( EndpointReference epr : reference.getEndpointReferences() ) { - for ( Intent eprIntent : epr.getRequiredIntents() ) { - if ( Constants.PROPAGATES_TRANSACTION_INTENT.equals(eprIntent.getName())) { - error(context.getMonitor(), - "PropagatesTransactionWithNoManagedTran", - this, - "reference", - epr.getComponent().getName(), - epr.getReference().getName()); - } - } - } - } - } - } - - - for ( ComponentReference reference : component.getReferences()) { - for ( EndpointReference epr : reference.getEndpointReferences() ) { - for ( Intent eprIntent : epr.getRequiredIntents() ) { - if ( Constants.TRANSACTED_ONE_WAY_INTENT.equals(eprIntent.getName()) ) { - for ( Operation o : epr.getComponentReferenceInterfaceContract().getInterface().getOperations() ) { - if ( !o.isNonBlocking() ) { - error(context.getMonitor(), - "TransactedOneWayWithTwoWayOp", - this, - reference.getName(), - o.getName()); - } - - } - } else if ( Constants.IMMEDIATE_ONE_WAY_INTENT.equals(eprIntent.getName())) { - for ( Operation o : epr.getComponentReferenceInterfaceContract().getInterface().getOperations() ) { - if ( !o.isNonBlocking() ) { - error(context.getMonitor(), - "ImmediateOneWayWithTwoWayOp", - this, - reference.getName(), - o.getName()); - } - - } - } - } - - } - } - } - } - } - - - - private void checkForNoListenerIntent(Endpoint ep, BuilderContext context) { - PolicyHelper helper = new PolicyHelper(); - if ( helper.getIntent(ep, NOLISTENER_INTENT) != null ) { - error(context.getMonitor(), - "NoListenerIntentSpecifiedOnService", - this, - ep.toString()); - } - - } - - private void removeDirectPolicySetsIfExternalExists(PolicySubject subject, - BuilderContext context) { - boolean foundExternalPolicySet = false; - for (PolicySet ps : subject.getPolicySets() ) { - if ( ps.isExternalAttachment() ) { - foundExternalPolicySet = true; - break; - } - } - - if ( foundExternalPolicySet ) { - List<PolicySet> copy = new ArrayList<PolicySet>(subject.getPolicySets()); - for ( PolicySet ps : copy ) { - if ( !ps.isExternalAttachment() ) { - 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 - * - * @param composite - * @param context - */ - protected void checkPolicies(Composite composite, BuilderContext context) throws CompositeBuilderException{ - policyAppliesToBuilder.build(composite, context); - validateTransactionIntents(composite, context); - } - - protected void buildPolicies(Composite composite, BuilderContext context) { - - // build policies recursively - for (Component component : composite.getComponents()) { - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - buildPolicies((Composite)implementation, context); - } - } - - for (Component component : composite.getComponents()) { - - for (ComponentService componentService : component.getServices()) { - for (Endpoint ep : componentService.getEndpoints()) { - Set<QName> policyNames = getPolicyNames(ep); - - // check that only one policy language is present in the endpoint's policy sets - if (policyNames.size() > 1){ - error(context.getMonitor(), - "MultiplePolicyLanguagesInEP", - this, - ep.toString(), - policyNames.toString()); - } else { - for (QName policyType : policyNames) { - PolicyBuilder builder = builders.getPolicyBuilder(policyType); - if (builder != null) { - builder.build(ep, context); - } - } - } - } - } - - for (ComponentReference componentReference : component.getReferences()) { - for (EndpointReference epr : componentReference.getEndpointReferences()) { - Set<QName> policyNames = getPolicyNames(epr); - - // check that only one policy language is present in the endpoint references's policy sets - if (policyNames.size() > 1){ - error(context.getMonitor(), - "MultiplePolicyLanguagesInEPR", - this, - epr.toString(), - policyNames.toString()); - } else { - for (QName policyType : policyNames) { - PolicyBuilder builder = builders.getPolicyBuilder(policyType); - if (builder != null) { - builder.build(epr, context); - } - } - } - } - } - - Implementation implementation = component.getImplementation(); - if (implementation != null) { - Set<QName> policyNames = getPolicyNames(implementation); - - // check that only one policy language is present in the implementations's policy sets - if (policyNames.size() > 1){ - error(context.getMonitor(), - "MultiplePolicyLanguagesInImplementation", - this, - component.toString(), - policyNames.toString()); - } else { - for (QName policyType : policyNames) { - PolicyBuilder builder = builders.getPolicyBuilder(policyType); - if (builder != null) { - builder.build(component, implementation, context); - } - } - } - } - } - } -} |