summaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2009-11-05 22:14:39 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2009-11-05 22:14:39 +0000
commita8c008cdbf6e7cff08ebf426ddee7bbb03458015 (patch)
tree299390e56b92910cb1d7f2cc4d3ded701b5c333f /java
parent9151d7621ba86453c1af7df2dabd95bd2d285031 (diff)
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
Diffstat (limited to 'java')
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/BaseBuilderImpl.java703
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferencePromotionBuilderImpl.java173
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java54
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ModelBuilderImpl.java3
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ReferenceConfigurationUtil.java216
5 files changed, 52 insertions, 1097 deletions
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<String, Component> 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<String, ComponentService> 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<String, Component> components,
- Map<String, ComponentService> componentServices,
- Map<String, ComponentReference> 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<String, ComponentService> componentServices,
- Map<String, ComponentReference> componentReferences,
- Map<String, ComponentProperty> 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<String, Service> services,
- Map<String, Reference> references,
- Map<String, Property> 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<String, Property> properties,
- Map<String, ComponentProperty> 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<String, Reference> references,
- Map<String, ComponentReference> 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<String, Service> services,
- Map<String, ComponentService> 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<ComponentReference> 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<ComponentService> 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<EndpointReference> 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<ComponentReference> getPromotedComponentReferences(CompositeReference compositeReference) {
- List<ComponentReference> componentReferences = new ArrayList<ComponentReference>();
- 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<ComponentReference> 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<Binding> callbackBindings = new HashSet<Binding>();
- 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