From a8c008cdbf6e7cff08ebf426ddee7bbb03458015 Mon Sep 17 00:00:00 2001 From: slaws Date: Thu, 5 Nov 2009 22:14:39 +0000 Subject: Some tidying following after the reference promotion fixes and deleting the ComponentReferencePromotionBuilder that I missed in the last commit git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@833212 13f79535-47bb-0310-9956-ffa450edef68 --- .../tuscany/sca/builder/impl/BaseBuilderImpl.java | 703 --------------------- .../ComponentReferencePromotionBuilderImpl.java | 173 ----- .../builder/impl/CompositePolicyBuilderImpl.java | 54 +- .../tuscany/sca/builder/impl/ModelBuilderImpl.java | 3 - .../builder/impl/ReferenceConfigurationUtil.java | 216 ------- 5 files changed, 52 insertions(+), 1097 deletions(-) delete mode 100644 java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/BaseBuilderImpl.java delete mode 100644 java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferencePromotionBuilderImpl.java delete mode 100644 java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ReferenceConfigurationUtil.java (limited to 'java/sca/modules/builder/src/main') diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/BaseBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/BaseBuilderImpl.java deleted file mode 100644 index 111680b2b4..0000000000 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/BaseBuilderImpl.java +++ /dev/null @@ -1,703 +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.Map; - -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.TransformerFactory; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.ComponentProperty; -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.Contract; -import org.apache.tuscany.sca.assembly.Implementation; -import org.apache.tuscany.sca.assembly.Property; -import org.apache.tuscany.sca.assembly.Reference; -import org.apache.tuscany.sca.assembly.SCABinding; -import org.apache.tuscany.sca.assembly.SCABindingFactory; -import org.apache.tuscany.sca.assembly.Service; -import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint; -import org.apache.tuscany.sca.assembly.builder.CompositeBuilder; -import org.apache.tuscany.sca.assembly.builder.Messages; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.definitions.Definitions; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper; -import org.apache.tuscany.sca.monitor.Monitor; -import org.apache.tuscany.sca.monitor.Problem; -import org.apache.tuscany.sca.monitor.Problem.Severity; -import org.apache.tuscany.sca.policy.ExtensionType; -import org.apache.tuscany.sca.policy.PolicySubject; -import org.w3c.dom.Document; - -/** - * Base class for Builder implementations - * - * @version $Rev$ $Date$ - */ -public abstract class BaseBuilderImpl implements CompositeBuilder { - protected static final String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200903"; - protected static final String BINDING_SCA = "binding.sca"; - protected static final QName BINDING_SCA_QNAME = new QName(SCA11_NS, BINDING_SCA); - - protected AssemblyFactory assemblyFactory; - protected SCABindingFactory scaBindingFactory; - protected InterfaceContractMapper interfaceContractMapper; - protected DocumentBuilderFactory documentBuilderFactory; - protected TransformerFactory transformerFactory; - protected BuilderExtensionPoint builders; - - protected BaseBuilderImpl(BuilderExtensionPoint builders, - AssemblyFactory assemblyFactory, - SCABindingFactory scaBindingFactory, - DocumentBuilderFactory documentBuilderFactory, - TransformerFactory transformerFactory, - InterfaceContractMapper interfaceContractMapper) { - this.builders = builders; - this.assemblyFactory = assemblyFactory; - this.scaBindingFactory = scaBindingFactory; - this.documentBuilderFactory = documentBuilderFactory; - this.transformerFactory = transformerFactory; - this.interfaceContractMapper = interfaceContractMapper; - } - - /** - * Construct a builder from the extension point registry - * @param registry - */ - protected BaseBuilderImpl(ExtensionPointRegistry registry) { - this.builders = registry.getExtensionPoint(BuilderExtensionPoint.class); - FactoryExtensionPoint factoryExtensionPoint = registry.getExtensionPoint(FactoryExtensionPoint.class); - this.assemblyFactory = factoryExtensionPoint.getFactory(AssemblyFactory.class); - this.scaBindingFactory = factoryExtensionPoint.getFactory(SCABindingFactory.class); - this.documentBuilderFactory = factoryExtensionPoint.getFactory(DocumentBuilderFactory.class); - this.transformerFactory = factoryExtensionPoint.getFactory(TransformerFactory.class); - this.interfaceContractMapper = - registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(InterfaceContractMapper.class); - } - - /** - * Report a warning. - * - * @param monitor - * @param problems - * @param message - * @param model - */ - protected void warning(Monitor monitor, String message, Object model, Object... messageParameters) { - if (monitor != null) { - Problem problem = - monitor.createProblem(this.getClass().getName(), - Messages.ASSEMBLY_VALIDATION, - Severity.WARNING, - model, - message, - messageParameters); - monitor.problem(problem); - } - } - - /** - * Report a error. - * - * @param monitor - * @param problems - * @param message - * @param model - */ - protected void error(Monitor monitor, String message, Object model, Object... messageParameters) { - if (monitor != null) { - Problem problem = - monitor.createProblem(this.getClass().getName(), - Messages.ASSEMBLY_VALIDATION, - Severity.ERROR, - model, - message, - messageParameters); - monitor.problem(problem); - } - } - - /** - * Report a exception. - * - * @param problems - * @param message - * @param model - */ - protected void error(Monitor monitor, String message, Object model, Exception ex) { - if (monitor != null) { - Problem problem = null; - problem = - monitor.createProblem(this.getClass().getName(), - Messages.ASSEMBLY_VALIDATION, - Severity.ERROR, - model, - message, - ex); - monitor.problem(problem); - } - } - - /** - * Index components inside a composite - * - * @param composite - * @param componentServices - - */ - protected void indexComponents(Composite composite, Map components) { - for (Component component : composite.getComponents()) { - // Index components by name - components.put(component.getName(), component); - } - } - - /** - * Index services inside a composite - * - * @param composite - * @param componentServices - */ - protected void indexServices(Composite composite, Map componentServices) { - - for (Component component : composite.getComponents()) { - - ComponentService nonCallbackService = null; - int nonCallbackServiceCount = 0; - - for (ComponentService componentService : component.getServices()) { - // Index component services by component name / service name - String uri = component.getName() + '/' + componentService.getName(); - componentServices.put(uri, componentService); - - // count how many non-callback there are - if (!componentService.isForCallback()) { - - if (nonCallbackServiceCount == 0) { - nonCallbackService = componentService; - } - nonCallbackServiceCount++; - } - } - if (nonCallbackServiceCount == 1) { - // If we have a single non callback service, index it by - // component name as well - componentServices.put(component.getName(), nonCallbackService); - } - } - } - - /** - * Index components, services and references inside a composite. - * @param composite - * @param components - * @param componentServices - * @param componentReferences - */ - protected void indexComponentsServicesAndReferences(Composite composite, - Map components, - Map componentServices, - Map componentReferences) { - - for (Component component : composite.getComponents()) { - - // Index components by name - components.put(component.getName(), component); - - ComponentService nonCallbackService = null; - int nonCallbackServices = 0; - for (ComponentService componentService : component.getServices()) { - - // Index component services by component name / service name - String uri = component.getName() + '/' + componentService.getName(); - componentServices.put(uri, componentService); - - // TODO - EPR - $promoted$ no longer used but it doesn't do any harm here - boolean promotedService = false; - if (componentService.getName() != null && componentService.getName().indexOf("$promoted$") > -1) { - promotedService = true; - } - - // count how many non-callback, non-promoted services there are - // if there is only one the component name also acts as the service name - if ((!componentService.isForCallback()) && (!promotedService)) { - - // Check how many non callback non-promoted services we have - if (nonCallbackServices == 0) { - nonCallbackService = componentService; - } - nonCallbackServices++; - } - - } - - if (nonCallbackServices == 1) { - // If we have a single non callback service, index it by - // component name as well - componentServices.put(component.getName(), nonCallbackService); - } - - // Index references by component name / reference name - for (ComponentReference componentReference : component.getReferences()) { - String uri = component.getName() + '/' + componentReference.getName(); - componentReferences.put(uri, componentReference); - } - } - } - - protected void indexComponentPropertiesServicesAndReferences(Component component, - Map componentServices, - Map componentReferences, - Map componentProperties, - Monitor monitor) { - for (ComponentService componentService : component.getServices()) { - if (componentServices.containsKey(componentService.getName())) { - // [MJE 13/05/2009] Changed to "error" since allowing these violates the OASIS spec - error(monitor, "DuplicateComponentServiceName", component, component.getName(), componentService - .getName()); - } else { - componentServices.put(componentService.getName(), componentService); - } - } - for (ComponentReference componentReference : component.getReferences()) { - if (componentReferences.containsKey(componentReference.getName())) { - // [MJE 13/05/2009] Changed to "error" since allowing these violates the OASIS spec - error(monitor, "DuplicateComponentReferenceName", component, component.getName(), componentReference - .getName()); - } else { - componentReferences.put(componentReference.getName(), componentReference); - } - } - for (ComponentProperty componentProperty : component.getProperties()) { - if (componentProperties.containsKey(componentProperty.getName())) { - // [MJE 13/05/2009] Changed to "error" since allowing these violates the OASIS spec - error(monitor, "DuplicateComponentPropertyName", component, component.getName(), componentProperty - .getName()); - } else { - componentProperties.put(componentProperty.getName(), componentProperty); - } - } - - } - - protected void indexImplementationPropertiesServicesAndReferences(Component component, - Map services, - Map references, - Map properties, - Monitor monitor) { - // First check that the component has a resolved implementation - Implementation implementation = component.getImplementation(); - if (implementation == null) { - // A component must have an implementation - error(monitor, "NoComponentImplementation", component, component.getName()); - - } else if (implementation.isUnresolved()) { - - // The implementation must be fully resolved - error(monitor, "UnresolvedComponentImplementation", component, component.getName(), implementation.getURI()); - - } else { - - // Index properties, services and references, also check for - // duplicates - for (Property property : implementation.getProperties()) { - if (properties.containsKey(property.getName())) { - // [MJE 13/05/2009] Changed to "error" since allowing these violates the OASIS spec - error(monitor, "DuplicateImplementationPropertyName", component, component.getName(), property - .getName()); - } else { - properties.put(property.getName(), property); - } - } - for (Service service : implementation.getServices()) { - if (services.containsKey(service.getName())) { - // [MJE 13/05/2009] Changed to "error" since allowing these violates the OASIS spec - error(monitor, "DuplicateImplementationServiceName", component, component.getName(), service - .getName()); - } else { - services.put(service.getName(), service); - } - } - for (Reference reference : implementation.getReferences()) { - if (references.containsKey(reference.getName())) { - // [MJE 13/05/2009] Changed to "error" since allowing these violates the OASIS spec - error(monitor, "DuplicateImplementationReferenceName", component, component.getName(), reference - .getName()); - } else { - references.put(reference.getName(), reference); - } - } - } - - } - - /** - * Reconcile component properties and the properties defined by the - * component type. - * - * @param component - * @param properties - * @param componentProperties - * @param problems - */ - protected void reconcileProperties(Component component, - Map properties, - Map componentProperties, - Monitor monitor) { - - // Connect component properties to their properties - for (ComponentProperty componentProperty : component.getProperties()) { - Property property = properties.get(componentProperty.getName()); - if (property != null) { - componentProperty.setProperty(property); - } else { - error(monitor, "PropertyNotFound", component, component.getName(), componentProperty.getName()); - } - } - - // Create component properties for all properties - if (component.getImplementation() != null) { - for (Property property : component.getImplementation().getProperties()) { - if (!componentProperties.containsKey(property.getName())) { - ComponentProperty componentProperty = assemblyFactory.createComponentProperty(); - componentProperty.setName(property.getName()); - componentProperty.setValue(property.getValue()); - componentProperty.setMany(property.isMany()); - componentProperty.setMustSupply(property.isMustSupply()); - componentProperty.setXSDElement(property.getXSDElement()); - componentProperty.setXSDType(property.getXSDType()); - componentProperty.setProperty(property); - component.getProperties().add(componentProperty); - } - } - } - - // Reconcile component properties and their properties - for (ComponentProperty componentProperty : component.getProperties()) { - Property property = componentProperty.getProperty(); - if (property != null) { - - // Check that a component property does not override the - // mustSupply attribute - if (!property.isMustSupply() && componentProperty.isMustSupply()) { - warning(monitor, - "PropertyMustSupplyIncompatible", - component, - component.getName(), - componentProperty.getName()); - } - - // Default to the mustSupply attribute specified on the property - if (!componentProperty.isMustSupply()) - componentProperty.setMustSupply(property.isMustSupply()); - - // Default to the value specified on the component type property - if (!isPropertyValueSet(componentProperty)) { - componentProperty.setValue(property.getValue()); - } - - // Override the property value for the composite - if (component.getImplementation() instanceof Composite) { - property.setValue(componentProperty.getValue()); - } - - // Check that a value is supplied - if (!isPropertyValueSet(componentProperty) && property.isMustSupply()) { - error(monitor, "PropertyMustSupplyNull", component, component.getName(), componentProperty.getName()); - } - - // Check that a component property does not override the - // many attribute - if (!property.isMany() && componentProperty.isMany()) { - warning(monitor, "PropertyOverrideManyAttribute", component, component.getName(), componentProperty.getName()); - } - - // Default to the many attribute defined on the property - componentProperty.setMany(property.isMany()); - - // Default to the type and element defined on the property - if (componentProperty.getXSDType() == null) { - componentProperty.setXSDType(property.getXSDType()); - } - if (componentProperty.getXSDElement() == null) { - componentProperty.setXSDElement(property.getXSDElement()); - } - - // Check that a type or element are specified - if (componentProperty.getXSDElement() == null && componentProperty.getXSDType() == null) { - warning(monitor, "NoTypeForComponentProperty", component, component.getName(), componentProperty.getName()); - } - } - } - } - - /** - * Look to see if any value elements have been set into the property - * A bit involved as the value is stored as a DOM Document - * - * @param property the property to be tested - * @return true is values are present - */ - private boolean isPropertyValueSet(Property property) { - Document value = (Document)property.getValue(); - - if (value == null) { - return false; - } - - if (value.getFirstChild() == null) { - return false; - } - - if (value.getFirstChild().getChildNodes().getLength() == 0) { - return false; - } - - return true; - } - - /** - * Reconcile component references with the references defined on the - * component type. - * - * @param component - * @param references - * @param componentReferences - * @param monitor - */ - protected void reconcileReferences(Component component, - Map references, - Map componentReferences, - Monitor monitor) { - - // Connect each component reference to the corresponding reference - for (ComponentReference componentReference : component.getReferences()) { - if (componentReference.getReference() != null || componentReference.isForCallback()) { - continue; - } - Reference reference = references.get(componentReference.getName()); - if (reference != null) { - componentReference.setReference(reference); - } else { - if (!componentReference.getName().startsWith("$self$.")) { - error(monitor, "ReferenceNotFound", component, component.getName(), componentReference.getName()); - } - } - } - - // Create a Component reference for each reference for which there is no declared Component reference - if (component.getImplementation() != null) { - for (Reference reference : component.getImplementation().getReferences()) { - if (!componentReferences.containsKey(reference.getName())) { - ComponentReference componentReference = assemblyFactory.createComponentReference(); - componentReference.setForCallback(reference.isForCallback()); - componentReference.setName(reference.getName()); - componentReference.setReference(reference); - component.getReferences().add(componentReference); - } - } - } - - // Reconcile each component reference with its reference - for (ComponentReference componentReference : component.getReferences()) { - Reference reference = componentReference.getReference(); - if (reference != null) { - // Reconcile multiplicity - if (componentReference.getMultiplicity() != null) { - if (!ReferenceConfigurationUtil.isValidMultiplicityOverride(reference.getMultiplicity(), - componentReference.getMultiplicity())) { - error(monitor, - "ReferenceIncompatibleMultiplicity", - component, - component.getName(), - componentReference.getName()); - } - } else { - componentReference.setMultiplicity(reference.getMultiplicity()); - } - - // Reconcile interface - InterfaceContract interfaceContract = reference.getInterfaceContract(); - if (componentReference.getInterfaceContract() != null) { - if (interfaceContract != null && !componentReference.getInterfaceContract().equals(reference - .getInterfaceContract())) { - if (!interfaceContractMapper.isCompatible(interfaceContract, componentReference - .getInterfaceContract())) { - error(monitor, - "ReferenceIncompatibleComponentInterface", - component, - component.getName(), - componentReference.getName()); - } - } - } else { - componentReference.setInterfaceContract(interfaceContract); - } - - // Reconcile bindings - if (componentReference.getBindings().isEmpty()) { - componentReference.getBindings().addAll(reference.getBindings()); - } - - // Reconcile callback bindings - if (componentReference.getCallback() == null) { - componentReference.setCallback(reference.getCallback()); - if (componentReference.getCallback() == null) { - // Create an empty callback to avoid null check - componentReference.setCallback(assemblyFactory.createCallback()); - } - - } else if (componentReference.getCallback().getBindings().isEmpty() && reference.getCallback() != null) { - componentReference.getCallback().getBindings().addAll(reference.getCallback().getBindings()); - } - - // Propagate autowire setting from the component - if (componentReference.getAutowire() == null) { - componentReference.setAutowire(component.getAutowire()); - } - - // Reconcile targets - if (componentReference.getTargets().isEmpty()) { - componentReference.getTargets().addAll(reference.getTargets()); - } - } - } - } - - /** - * Reconcile component services and services defined on the component type. - * - * @param component - * @param services - * @param componentServices - * @param monitor - */ - protected void reconcileServices(Component component, - Map services, - Map componentServices, - Monitor monitor) { - - // Connect each component service to the corresponding service - for (ComponentService componentService : component.getServices()) { - if (componentService.getService() != null || componentService.isForCallback()) { - continue; - } - Service service = services.get(componentService.getName()); - if (service != null) { - componentService.setService(service); - } else { - warning(monitor, "ServiceNotFoundForComponentService", component, component.getName(), componentService - .getName()); - } - } - - // Create a component service for each service - if (component.getImplementation() != null) { - for (Service service : component.getImplementation().getServices()) { - if (!componentServices.containsKey(service.getName())) { - ComponentService componentService = assemblyFactory.createComponentService(); - componentService.setForCallback(service.isForCallback()); - String name = service.getName(); - componentService.setName(name); - componentService.setService(service); - component.getServices().add(componentService); - componentServices.put(name, componentService); - } - } - } - - //Reconcile each component service with its service - for (ComponentService componentService : component.getServices()) { - Service service = componentService.getService(); - if (service != null) { - // Reconcile interface - InterfaceContract interfaceContract = service.getInterfaceContract(); - if (componentService.getInterfaceContract() != null) { - if (interfaceContract != null && !componentService.getInterfaceContract().equals(interfaceContract)) { - if (!interfaceContractMapper.isCompatible(componentService.getInterfaceContract(), - interfaceContract)) { - // MJE, 16/05/2009 - Upgraded from "warning" to "error" since this is a fatal problem - TUSCANY-3036 - error(monitor, - "ServiceIncompatibleComponentInterface", - component, - component.getName(), - componentService.getName()); - } - } - } else { - componentService.setInterfaceContract(interfaceContract); - } - - // Reconcile bindings - if (componentService.getBindings().isEmpty()) { - componentService.getBindings().addAll(service.getBindings()); - } - - // Reconcile callback bindings - if (componentService.getCallback() == null) { - componentService.setCallback(service.getCallback()); - if (componentService.getCallback() == null) { - // Create an empty callback to avoid null check - componentService.setCallback(assemblyFactory.createCallback()); - } - } else if (componentService.getCallback().getBindings().isEmpty() && service.getCallback() != null) { - componentService.getCallback().getBindings().addAll(service.getCallback().getBindings()); - } - } - } - } - - protected void attachSCABinding(Contract contract, Definitions definitions) { - if (!contract.getBindings().isEmpty()) { - contract.setOverridingBindings(true); - // No need to set binding.sca - return; - } - contract.setOverridingBindings(false); - - // Only add binding.sca for services - // FIXME: The latest OASIS spec only adds binding.sca to services - /* - if (!(contract instanceof Service)) { - return; - } - */ - SCABinding scaBinding = scaBindingFactory.createSCABinding(); - scaBinding.setName(contract.getName()); - - if (definitions != null) { - for (ExtensionType attachPointType : definitions.getBindingTypes()) { - if (attachPointType.getType().equals(BINDING_SCA_QNAME)) { - ((PolicySubject)scaBinding).setExtensionType(attachPointType); - } - } - } - - contract.getBindings().add(scaBinding); - } -} diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferencePromotionBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferencePromotionBuilderImpl.java deleted file mode 100644 index aaa9cbe82c..0000000000 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferencePromotionBuilderImpl.java +++ /dev/null @@ -1,173 +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.List; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.ComponentReference; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.assembly.CompositeReference; -import org.apache.tuscany.sca.assembly.Implementation; -import org.apache.tuscany.sca.assembly.Reference; -import org.apache.tuscany.sca.assembly.SCABinding; -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.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.monitor.Monitor; - -/** - * A composite builder that handles the creation of promoted composite services. - * - * @version $Rev$ $Date$ - */ -public class ComponentReferencePromotionBuilderImpl implements CompositeBuilder { - private AssemblyFactory assemblyFactory; - - public ComponentReferencePromotionBuilderImpl(ExtensionPointRegistry registry) { - FactoryExtensionPoint factories = registry.getExtensionPoint(FactoryExtensionPoint.class); - this.assemblyFactory = factories.getFactory(AssemblyFactory.class); - } - - public Composite build(Composite composite, BuilderContext context) - throws CompositeBuilderException { - configureNestedCompositeReferences(composite, context.getMonitor()); - return composite; - } - - public String getID() { - return "org.apache.tuscany.sca.assembly.builder.ComponentReferencePromotionBuilder"; - } - - /** - * Push down reference configuration into nested composites. - * - * @param composite - * @param problems - */ - private void configureNestedCompositeReferences(Composite composite, Monitor monitor) { - - // Process nested composites recursively - for (Component component : composite.getComponents()) { - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - configureNestedCompositeReferences((Composite)implementation, monitor); - } - } - - // Process component references declared on components in this composite - for (Component component : composite.getComponents()) { - Implementation implementation = component.getImplementation(); - if (implementation instanceof Composite) { - for (ComponentReference componentReference : component.getReferences()) { - Reference implReference = componentReference.getReference(); - if (implReference != null && implReference instanceof CompositeReference) { - - // If the component reference is wired, it is a promotion override - if (!componentReference.getEndpointReferences().isEmpty()) { - componentReference.setPromotionOverride(true); - } - - // If the component reference is a promotion override, override the - // configuration of the promoted reference - if (componentReference.isPromotionOverride()) { - CompositeReference compositeReference = (CompositeReference)implReference; - List promotedReferences = - ReferenceConfigurationUtil.getPromotedComponentReferences(compositeReference); - for (ComponentReference promotedReference : promotedReferences) { - ReferenceConfigurationUtil.reconcileReferenceBindings(componentReference, - promotedReference, - assemblyFactory, - monitor); - if (componentReference.getInterfaceContract() != null && // can be null in unit tests - componentReference.getInterfaceContract().getCallbackInterface() != null) { - SCABinding scaCallbackBinding = - promotedReference.getCallbackBinding(SCABinding.class); - if (promotedReference.getCallback() != null) { - promotedReference.getCallback().getBindings().clear(); - } else { - promotedReference.setCallback(assemblyFactory.createCallback()); - } - if (scaCallbackBinding != null) { - promotedReference.getCallback().getBindings().add(scaCallbackBinding); - } - if (componentReference.getCallback() != null) { - promotedReference.getCallback().getBindings().addAll(componentReference - .getCallback().getBindings()); - } - } - /* TODO - let endpoint references worry about target service - // Wire the promoted reference to the actual non-composite component services - if (promotedReference.getMultiplicity() == Multiplicity.ONE_ONE) { - // promotedReference.getTargets().clear(); - } - for (ComponentService target : componentReference.getTargets()) { - if (target.getService() instanceof CompositeService) { - - // Wire to the actual component service - // promoted by a composite service - CompositeService compositeService = (CompositeService)target.getService(); - // Find the promoted component service - ComponentService componentService = - ServiceConfigurationUtil.getPromotedComponentService(compositeService); - if (componentService != null) { - promotedReference.getTargets().add(componentService); - } - } else { - - // Wire to a non-composite target service - promotedReference.getTargets().add(target); - } - } - */ - } - } - } - } - } else { - /* TODO - let endpoint references worry about target servicep - for (ComponentReference componentReference : component.getReferences()) { - - // Wire the component reference to the actual - // non-composite component services - List targets = componentReference.getTargets(); - for (int i = 0, n = targets.size(); i < n; i++) { - ComponentService target = targets.get(i); - if (target.getService() instanceof CompositeService) { - - // Wire to the actual component service - // promoted by a composite service - CompositeService compositeService = (CompositeService)target.getService(); - ComponentService componentService = compositeService.getPromotedService(); - if (componentService != null) { - targets.set(i, componentService); - } - } - } - } - */ - } - } - } - -} diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java index f36a702752..408db23401 100644 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java +++ b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java @@ -39,11 +39,16 @@ import org.apache.tuscany.sca.assembly.Implementation; import org.apache.tuscany.sca.assembly.Reference; import org.apache.tuscany.sca.assembly.Service; import org.apache.tuscany.sca.assembly.builder.BuilderContext; +import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint; import org.apache.tuscany.sca.assembly.builder.CompositeBuilder; import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException; +import org.apache.tuscany.sca.assembly.builder.Messages; import org.apache.tuscany.sca.assembly.builder.PolicyBuilder; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.definitions.Definitions; +import org.apache.tuscany.sca.monitor.Monitor; +import org.apache.tuscany.sca.monitor.Problem; +import org.apache.tuscany.sca.monitor.Problem.Severity; import org.apache.tuscany.sca.policy.Intent; import org.apache.tuscany.sca.policy.IntentMap; import org.apache.tuscany.sca.policy.PolicyExpression; @@ -58,11 +63,56 @@ import org.apache.tuscany.sca.policy.Qualifier; * * @version $Rev$ $Date$ */ -public class CompositePolicyBuilderImpl extends BaseBuilderImpl implements CompositeBuilder { +public class CompositePolicyBuilderImpl implements CompositeBuilder { + + protected BuilderExtensionPoint builders; + public CompositePolicyBuilderImpl(ExtensionPointRegistry registry) { - super(registry); + this.builders = registry.getExtensionPoint(BuilderExtensionPoint.class); } + /** + * Report a warning. + * + * @param monitor + * @param problems + * @param message + * @param model + */ + protected void warning(Monitor monitor, String message, Object model, Object... messageParameters) { + if (monitor != null) { + Problem problem = + monitor.createProblem(this.getClass().getName(), + Messages.ASSEMBLY_VALIDATION, + Severity.WARNING, + model, + message, + messageParameters); + monitor.problem(problem); + } + } + + /** + * Report a error. + * + * @param monitor + * @param problems + * @param message + * @param model + */ + private void error(Monitor monitor, String message, Object model, Object... messageParameters) { + if (monitor != null) { + Problem problem = + monitor.createProblem(this.getClass().getName(), + Messages.ASSEMBLY_VALIDATION, + Severity.ERROR, + model, + message, + messageParameters); + monitor.problem(problem); + } + } + public String getID() { return "org.apache.tuscany.sca.assembly.builder.CompositePolicyBuilder"; } diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ModelBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ModelBuilderImpl.java index 5679b1751d..471c5ef216 100644 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ModelBuilderImpl.java +++ b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ModelBuilderImpl.java @@ -48,7 +48,6 @@ public class ModelBuilderImpl implements CompositeBuilder { private ComponentReferenceBindingBuilderImpl componentReferenceBindingBuilder; private EndpointBuilderImpl endpointBuilder; private EndpointReferenceBuilderImpl endpointReferenceBuilder; - private ComponentReferencePromotionBuilderImpl componentReferencePromotionBuilder; private CompositeBuilder policyAttachmentBuilder; private CompositePolicyBuilderImpl compositePolicyBuilder; @@ -76,7 +75,6 @@ public class ModelBuilderImpl implements CompositeBuilder { componentReferenceBindingBuilder = new ComponentReferenceBindingBuilderImpl(registry); endpointBuilder = new EndpointBuilderImpl(registry); endpointReferenceBuilder = new EndpointReferenceBuilderImpl(registry); - componentReferencePromotionBuilder = new ComponentReferencePromotionBuilderImpl(registry); policyAttachmentBuilder = new PolicyAttachmentBuilderImpl(registry); compositePolicyBuilder = new CompositePolicyBuilderImpl(registry); @@ -127,7 +125,6 @@ public class ModelBuilderImpl implements CompositeBuilder { composite = componentReferenceBindingBuilder.build(composite, context); // binding specific build endpointBuilder.build(composite, context); endpointReferenceBuilder.build(composite, context); - //composite = componentReferencePromotionBuilder.build(composite, context); // move into the static build? composite = compositePolicyBuilder.build(composite, context); // the rest of the policy processing? // For debugging - in success cases diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ReferenceConfigurationUtil.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ReferenceConfigurationUtil.java deleted file mode 100644 index 67b143e95d..0000000000 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ReferenceConfigurationUtil.java +++ /dev/null @@ -1,216 +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.HashSet; -import java.util.List; -import java.util.Set; - -import org.apache.tuscany.sca.assembly.AssemblyFactory; -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.assembly.ComponentReference; -import org.apache.tuscany.sca.assembly.CompositeReference; -import org.apache.tuscany.sca.assembly.EndpointReference; -import org.apache.tuscany.sca.assembly.Multiplicity; -import org.apache.tuscany.sca.assembly.OptimizableBinding; -import org.apache.tuscany.sca.assembly.Reference; -import org.apache.tuscany.sca.assembly.builder.Messages; -import org.apache.tuscany.sca.monitor.Monitor; -import org.apache.tuscany.sca.monitor.Problem; -import org.apache.tuscany.sca.monitor.Problem.Severity; - -/** - * This class encapsulates utility methods to deal with reference definitions - * - * @version $Rev$ $Date$ - */ -abstract class ReferenceConfigurationUtil { - - /** - * Report a warning. - * - * @param problems - * @param message - * @param model - */ - private static void warning(Monitor monitor, String message, Object model, String... messageParameters) { - if (monitor != null) { - Problem problem = - monitor.createProblem(ReferenceConfigurationUtil.class.getName(), - Messages.ASSEMBLY_VALIDATION, - Severity.WARNING, - model, - message, - (Object[])messageParameters); - monitor.problem(problem); - } - } - - static boolean isValidMultiplicityOverride(Multiplicity definedMul, Multiplicity overridenMul) { - if (definedMul != overridenMul) { - switch (definedMul) { - case ZERO_N: - return overridenMul == Multiplicity.ZERO_ONE || overridenMul == Multiplicity.ONE_ONE - || overridenMul == Multiplicity.ONE_N; - case ONE_N: - return overridenMul == Multiplicity.ONE_ONE; - case ZERO_ONE: - return overridenMul == Multiplicity.ONE_ONE; - default: - return false; - } - } else { - return true; - } - } - - static boolean validateMultiplicityAndTargets(Multiplicity multiplicity, List endpointReferences) { - - // In some tests multiplicity is not set - if (multiplicity == null) { - return true; - } - - // Count targets - int count = endpointReferences.size(); - - switch (multiplicity) { - case ZERO_N: - break; - case ZERO_ONE: - if (count > 1) { - return false; - } - break; - case ONE_ONE: - if (count != 1) { - return false; - } - break; - case ONE_N: - if (count < 1) { - return false; - } - break; - } - return true; - } - - /** - * Follow a reference promotion chain down to the innermost (non composite) - * component references. - * - * @param compositeReference - * @return - */ - static List getPromotedComponentReferences(CompositeReference compositeReference) { - List componentReferences = new ArrayList(); - collectPromotedComponentReferences(compositeReference, componentReferences); - return componentReferences; - } - - /** - * Follow a reference promotion chain down to the innermost (non composite) - * component references. - * - * @param compositeReference - * @param componentReferences - * @return - */ - private static void collectPromotedComponentReferences(CompositeReference compositeReference, - List componentReferences) { - for (ComponentReference componentReference : compositeReference.getPromotedReferences()) { - Reference reference = componentReference.getReference(); - if (reference instanceof CompositeReference) { - - // Continue to follow the reference promotion chain - collectPromotedComponentReferences((CompositeReference)reference, componentReferences); - - } else if (reference != null) { - - // Found a non-composite reference - componentReferences.add(componentReference); - } - } - } - - /** - * Override the bindings for a promoted reference from an outer component reference - * - * @param reference - the outer level reference - * @param promotedReference - the inner level promoted reference - */ - static void reconcileReferenceBindings(Reference reference, - ComponentReference promotedReference, - AssemblyFactory assemblyFactory, - Monitor monitor) { - - if (reference.getEndpointReferences().size() > 0) { - if (promotedReference.getMultiplicity() == Multiplicity.ONE_ONE || promotedReference.getMultiplicity() == Multiplicity.ZERO_ONE) { - // Override any existing wires for 0..1 and 1..1 multiplicity - promotedReference.getEndpointReferences().clear(); - // For 0..1 and 1..1, there should not be more than 1 endpoint reference - if (reference.getEndpointReferences().size() > 1) { - warning(monitor, "ComponentReferenceMoreWire", promotedReference, promotedReference.getName()); - } // end if - } // end if - // Clone the EndpointReferences from the outer level and add to the promoted reference - for (EndpointReference epRef : reference.getEndpointReferences()) { - EndpointReference epRefClone = copyHigherReference(epRef, promotedReference); - promotedReference.getEndpointReferences().add(epRefClone); - } // end for - } // end if - - Set callbackBindings = new HashSet(); - if (promotedReference.getCallback() != null) { - callbackBindings.addAll(promotedReference.getCallback().getBindings()); - } - if (reference.getCallback() != null) { - callbackBindings.addAll(reference.getCallback().getBindings()); - } - promotedReference.setCallback(assemblyFactory.createCallback()); - for (Binding binding : callbackBindings) { - if ((!(binding instanceof OptimizableBinding)) || binding.getURI() != null) { - promotedReference.getCallback().getBindings().add(binding); - } // end if - } // end for - } // end method reconcileReferenceBindings - - /** - * Copy a higher level EndpointReference down to a lower level reference which it promotes - * @param epRef - the endpoint reference - * @param promotedReference - the promoted reference - * @return - a copy of the EndpointReference with data merged from the promoted reference - */ - private static EndpointReference copyHigherReference(EndpointReference epRef, ComponentReference promotedReference) { - EndpointReference epRefClone = null; - try { - epRefClone = (EndpointReference)epRef.clone(); - } catch (Exception e) { - // Ignore (we know that EndpointReference2 can be cloned) - } // end try - // Copy across details of the inner reference - ComponentReference ref = epRefClone.getReference(); - //FIXME - epRefClone.setReference(promotedReference); - return epRefClone; - } // end copyHigherReference - -} // end class -- cgit v1.2.3