You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sv...@apache.org on 2007/03/27 14:18:58 UTC

svn commit: r522885 [2/4] - in /incubator/tuscany/branches/sca-java-integration: samples/sca/calculator/src/main/resources/ samples/sca/composite-impl/src/main/resources/ samples/sca/echo-binding/src/main/java/echo/ samples/sca/echo-binding/src/test/re...

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Tue Mar 27 05:18:53 2007
@@ -24,7 +24,6 @@
 
 import java.lang.reflect.Type;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.List;
 import java.util.Map;
 
@@ -36,6 +35,7 @@
 
 import org.apache.tuscany.core.binding.local.LocalBindingDefinition;
 import org.apache.tuscany.core.implementation.system.model.SystemImplementation;
+import org.apache.tuscany.core.util.ReferenceLoaderHelper;
 import org.apache.tuscany.spi.ObjectFactory;
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
@@ -51,21 +51,23 @@
 import org.apache.tuscany.spi.loader.MissingPropertyValueException;
 import org.apache.tuscany.spi.loader.MissingReferenceException;
 import org.apache.tuscany.spi.loader.PropertyObjectFactory;
+import org.apache.tuscany.spi.loader.ReferenceMultiplicityOverridingException;
 import org.apache.tuscany.spi.loader.ReferenceMultiplicityViolationException;
 import org.apache.tuscany.spi.loader.UndefinedPropertyException;
 import org.apache.tuscany.spi.loader.UndefinedReferenceException;
 import org.apache.tuscany.spi.loader.UnrecognizedElementException;
 import org.apache.tuscany.spi.model.BindingDefinition;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentReferenceDefinition;
 import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
 import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.Implementation;
 import org.apache.tuscany.spi.model.ModelObject;
 import org.apache.tuscany.spi.model.Multiplicity;
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.model.PropertyValue;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
-import org.apache.tuscany.spi.model.ReferenceTarget;
+import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.model.ServiceDefinition;
 import org.apache.tuscany.spi.util.stax.StaxUtil;
 import org.osoa.sca.annotations.Constructor;
@@ -77,14 +79,18 @@
  * @version $Rev$ $Date$
  */
 public class ComponentLoader extends LoaderExtension<ComponentDefinition<?>> {
-    public static final char COLON = ':';
-
     private static final QName COMPONENT = new QName(SCA_NS, "component");
 
     private static final QName PROPERTY = new QName(SCA_NS, "property");
 
     private static final QName REFERENCE = new QName(SCA_NS, "reference");
 
+    private static final String COMPONENT_NAME_ATTR = "name";
+
+    private static final String COMPONENT_INIT_ATTR = "initLevel";
+
+    private static final String AUTOWIRE_ATTR = "autowire";
+
     private static final String PROPERTY_FILE_ATTR = "file";
 
     private static final String PROPERTY_SOURCE_ATTR = "source";
@@ -95,11 +101,20 @@
 
     private static final String PROPERTY_ELEMENT_ATTR = "element";
 
+    public static final String REF_NAME_ATTR = "name";
+
+    public static final String REF_MULTIPLICITY_ATTR = "multiplicity";
+
+    public static final String REF_TARGET_ATTR = "target";
+
+    public static final char COLON = ':';
+
     private PropertyObjectFactory propertyFactory;
 
     @Constructor
-    public ComponentLoader(@Autowire LoaderRegistry registry, 
-                           @Autowire PropertyObjectFactory propertyFactory) {
+    public ComponentLoader(@Autowire
+    LoaderRegistry registry, @Autowire
+    PropertyObjectFactory propertyFactory) {
         super(registry);
         this.propertyFactory = propertyFactory;
     }
@@ -112,10 +127,12 @@
     public ComponentDefinition<?> load(CompositeComponent parent,
                                        ModelObject object,
                                        XMLStreamReader reader,
-                                       DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
+                                       DeploymentContext deploymentContext) throws XMLStreamException,
+                                                                           LoaderException {
         assert COMPONENT.equals(reader.getName());
-        String name = reader.getAttributeValue(null, "name");
-        String initLevel = reader.getAttributeValue(null, "initLevel");
+        String name = reader.getAttributeValue(null, COMPONENT_NAME_ATTR);
+        String initLevel = reader.getAttributeValue(null, COMPONENT_INIT_ATTR);
+        String autowire = reader.getAttributeValue(null, AUTOWIRE_ATTR);
 
         try {
             Implementation<?> impl = loadImplementation(parent, reader, deploymentContext);
@@ -123,6 +140,13 @@
 
             ComponentDefinition<Implementation<?>> componentDefinition =
                 new ComponentDefinition<Implementation<?>>(name, impl);
+            if (autowire != null) {
+                componentDefinition.setAutowire(Boolean.parseBoolean(autowire));
+            } else {
+                if (object instanceof CompositeComponentType) {
+                    componentDefinition.setAutowire(((CompositeComponentType)object).isAutowire());
+                }
+            }
 
             if (initLevel != null) {
                 if (initLevel.length() == 0) {
@@ -143,21 +167,21 @@
                         if (PROPERTY.equals(qname)) {
                             loadProperty(reader, deploymentContext, componentDefinition);
                         } else if (REFERENCE.equals(qname)) {
-                            loadReference(reader, deploymentContext, componentDefinition);
+                            loadReference(parent, reader, deploymentContext, componentDefinition);
                         } else {
                             throw new UnrecognizedElementException(qname);
                         }
-                        reader.next();
+                        //reader.next();
                         break;
                     case END_ELEMENT:
                         if (reader.getName().equals(COMPONENT)) {
                             // hack to leave alone SystemImplementation
-                            if (!((Implementation)componentDefinition.getImplementation() 
-                                instanceof SystemImplementation)) {
+                            if (!((Implementation)componentDefinition.getImplementation() instanceof SystemImplementation)) {
                                 populatePropertyValues(componentDefinition);
                             }
-                            ComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> type =
-                                (ComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>)componentDefinition
+                            populateReferences(componentDefinition);
+                            /*ComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>> type =
+                                (ComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>>)componentDefinition
                                     .getImplementation().getComponentType();
                             for (ReferenceDefinition ref : type.getReferences().values()) {
                                 if (ref.isAutowire()) {
@@ -165,8 +189,8 @@
                                     referenceTarget.setReferenceName(ref.getName());
                                     componentDefinition.add(referenceTarget);
                                 }
-                            }
-                            validate(componentDefinition);
+                            }*/
+                            //validate(componentDefinition);
                             return componentDefinition;
                         }
                         break;
@@ -181,7 +205,7 @@
     protected Implementation<?> loadImplementation(CompositeComponent parent,
                                                    XMLStreamReader reader,
                                                    DeploymentContext deploymentContext) throws XMLStreamException,
-        LoaderException {
+                                                                                       LoaderException {
         reader.nextTag();
         ModelObject o = registry.load(parent, null, reader, deploymentContext);
         if (!(o instanceof Implementation)) {
@@ -193,7 +217,8 @@
     @SuppressWarnings("unchecked")
     protected void loadProperty(XMLStreamReader reader,
                                 DeploymentContext deploymentContext,
-                                ComponentDefinition<?> componentDefinition) throws XMLStreamException, LoaderException {
+                                ComponentDefinition<?> componentDefinition) throws XMLStreamException,
+                                                                           LoaderException {
         String name = reader.getAttributeValue(null, PROPERTY_NAME_ATTR);
         Implementation<?> implementation = componentDefinition.getImplementation();
         ComponentType<?, ?, ?> componentType = implementation.getComponentType();
@@ -216,8 +241,8 @@
             try {
                 DocumentBuilder documentBuilder = DOMHelper.newDocumentBuilder();
                 List<Element> values =
-                    StaxUtil.createPropertyValues(reader, property.getXmlType(), property.getXmlElement(), property
-                        .isMany(), documentBuilder);
+                    StaxUtil.createPropertyValues(reader, property.getXmlType(), property
+                        .getXmlElement(), property.isMany(), documentBuilder);
                 propertyValue = new PropertyValue<Type>(name, values);
                 if (!property.isMany() && values.size() > 1) {
                     ManyPropertyValueLoaderException ex = new ManyPropertyValueLoaderException();
@@ -243,63 +268,135 @@
         componentDefinition.add(propertyValue);
     }
 
-    protected void loadReference(XMLStreamReader reader,
+    @SuppressWarnings("unchecked")
+    protected void loadReference(CompositeComponent parent,
+                                 XMLStreamReader reader,
                                  DeploymentContext deploymentContext,
-                                 ComponentDefinition<?> componentDefinition) 
-        throws XMLStreamException, LoaderException {
-        String name = reader.getAttributeValue(null, "name");
-        String text = reader.getElementText();
-        String target = text != null ? text.trim() : null;
+                                 ComponentDefinition<?> componentDefinition) throws XMLStreamException,
+                                                                            LoaderException {
+
+        ComponentReferenceDefinition componentReference = null;
+        Implementation<?> impl = componentDefinition.getImplementation();
+        ComponentType<?, ComponentTypeReferenceDefinition, ?> componentType =
+            impl.getComponentType();
+
+        String name = reader.getAttributeValue(null, REF_NAME_ATTR);
 
         if (name == null) {
             throw new InvalidReferenceException("No name specified");
-        } else if (target == null) {
-            throw new InvalidReferenceException("No target specified", name);
-        }
-        Implementation<?> impl = componentDefinition.getImplementation();
-        ComponentType<?, ?, ?> componentType = impl.getComponentType();
-        if (!componentType.getReferences().containsKey(name)) {
+        } else if (!componentType.getReferences().containsKey(name)) {
             throw new UndefinedReferenceException(name);
+        } else {
+            componentReference =
+                new ComponentReferenceDefinition(componentType.getReferences().get(name));
         }
-        if (componentType instanceof CompositeComponentType) {
-            ReferenceDefinition definition = componentType.getReferences().get(name);
-            if (definition.getBindings().isEmpty()) {
-                // TODO JFM allow selection of a default binding
-                try {
-                    LocalBindingDefinition binding = new LocalBindingDefinition(new URI(target));
-                    definition.addBinding(binding);
-                } catch (URISyntaxException e) {
-                    throw new InvalidReferenceException(e);
-                }
-            } else {
-                for (BindingDefinition binding : definition.getBindings()) {
-                    try {
-                        // FIXME this is bad - clarify in the spec how URIs are
-                        // overriden
-                        binding.setTargetUri(new URI(target));
-                    } catch (URISyntaxException e) {
-                        throw new LoaderException(e);
-                    }
-                }
-            }
+
+        String multiplicityVal = reader.getAttributeValue(null, REF_MULTIPLICITY_ATTR);
+        Multiplicity multiplicity =
+            StaxUtil.multiplicity(multiplicityVal, componentType.getReferences().get(name)
+                .getMultiplicity());
+        if (!ReferenceLoaderHelper.isValidMultiplicityOverride(componentType.getReferences()
+            .get(name).getMultiplicity(), multiplicity)) {
+            throw new ReferenceMultiplicityOverridingException(name, componentType.getReferences()
+                .get(name).getMultiplicity(), multiplicity);
         } else {
-            ReferenceTarget referenceTarget = componentDefinition.getReferenceTargets().get(name);
-            if (referenceTarget == null) {
-                referenceTarget = new ReferenceTarget();
-                referenceTarget.setReferenceName(name);
-                componentDefinition.add(referenceTarget);
-            }
-            try {
-                referenceTarget.addTarget(new URI(target));
-            } catch (URISyntaxException e) {
-                throw new InvalidReferenceException(e);
+            componentReference.setMultiplicity(multiplicity);
+        }
+
+        String autowire = reader.getAttributeValue(null, AUTOWIRE_ATTR);
+        if (autowire == null) {
+            componentReference.setAutowire(componentDefinition.isAutowire());
+        } else {
+            componentReference.setAutowire(Boolean.parseBoolean(autowire));
+        }
+
+        String targets = reader.getAttributeValue(null, REF_TARGET_ATTR);
+        if (targets != null && targets.length() > 0) {
+            ReferenceLoaderHelper.populateRefTargets(componentReference, targets);
+            /*if (!ReferenceLoaderHelper.validateMultiplicityAndTargets(multiplicity,
+             componentReference
+             .getTargets())) {
+             throw new ReferenceMultiplicityViolationException(name,
+             multiplicity,
+             componentReference
+             .getTargets().size());
+             }*/
+        }
+
+        ComponentTypeReferenceDefinition ctReference = componentType.getReferences().get(name);
+        boolean isBindingsOverriden = false;
+        while (true) {
+            switch (reader.next()) {
+                case START_ELEMENT:
+                    ModelObject o = registry.load(parent, null, reader, deploymentContext);
+                    if (o instanceof ServiceContract) {
+                        ServiceContract overridenSvcContract = (ServiceContract)o;
+                        ServiceContract implSvcContract = ctReference.getServiceContract();
+                        //TODO : Since the JavaInterfaceProcessorRegistryImpl does not do a deep introspection
+                        //this comparison is not possible.  This will be uncommented once that is fixed.
+                        /*ReferenceLoaderHelper.checkInterfaceCompatibility(implSvcContract,
+                         overridenSvcContract,
+                         false);*/
+                        componentReference.setServiceContract(overridenSvcContract);
+                    } else if (o instanceof BindingDefinition) {
+                        componentReference.addBinding((BindingDefinition)o);
+                        isBindingsOverriden = true;
+                    } else {
+                        throw new UnrecognizedElementException(reader.getName());
+                    }
+                    //reader.next();
+                    break;
+                case END_ELEMENT:
+                    if (REFERENCE.equals(reader.getName())) {
+                        if (componentType instanceof CompositeComponentType) {
+                            //AbstractReferenceDefinition definition = componentType.getReferences().get(name);
+                            //if there were targets overridden, then its better to copy the componentType
+                            //bindings from the underlying componentType and set the overriden target
+                            if (targets != null && targets.length() > 0) {
+                                if (componentReference.getBindings().isEmpty()) {
+                                    for (URI targetUri : componentReference.getTargets()) {
+                                        // TODO JFM allow selection of a default binding
+                                        LocalBindingDefinition binding =
+                                            new LocalBindingDefinition(targetUri);
+                                        componentReference.addBinding(binding);
+                                        //HACK [svkrish]: to get composite implementations working.. not sure
+                                        //why the componentType should be updated for bindings and targets
+                                        componentReference.getAssociatedCompTypeRefDefn()
+                                            .addBinding(binding);
+                                    }
+                                } else {
+                                    for (URI targetUri : componentReference.getTargets()) {
+                                        if (isBindingsOverriden) {
+                                            for (BindingDefinition binding : componentReference
+                                                .getBindings()) {
+                                                binding.setTargetUri(targetUri);
+                                            }
+                                        } else {
+                                            BindingDefinition clone = null;
+                                            for (BindingDefinition binding : componentReference
+                                                .getAssociatedCompTypeRefDefn().getBindings()) {
+                                                clone = (BindingDefinition)binding.clone();
+                                                clone.setTargetUri(targetUri);
+                                                componentReference.addBinding(clone);
+                                                //HACK [svkrish]: to get composite implementations working.. not sure
+                                                //why the componentType should be updated for bindings and targets
+                                                binding.setTargetUri(targetUri);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        componentDefinition.add(componentReference);
+                        return;
+                    }
             }
         }
     }
 
     @SuppressWarnings("unchecked")
-    protected void populatePropertyValues(ComponentDefinition<Implementation<?>> componentDefinition)
-        throws LoaderException, MissingPropertyValueException {
+    protected void populatePropertyValues(ComponentDefinition<Implementation<?>> componentDefinition) throws LoaderException,
+                                                                                                     MissingPropertyValueException {
         ComponentType componentType = componentDefinition.getImplementation().getComponentType();
         if (componentType != null) {
             Map<String, Property<?>> properties = componentType.getProperties();
@@ -313,7 +410,8 @@
                         PropertyValue propertyValue = new PropertyValue();
                         propertyValue.setName(aProperty.getName());
                         propertyValue.setValue(aProperty.getDefaultValues());
-                        propertyValue.setValueFactory(propertyFactory.createObjectFactory(aProperty, propertyValue));
+                        propertyValue.setValueFactory(propertyFactory
+                            .createObjectFactory(aProperty, propertyValue));
                         /*
                          * propertyValue.setValueFactory(new SimplePropertyObjectFactory(aProperty,
                          * propertyValue.getValue()));
@@ -325,50 +423,6 @@
         }
     }
 
-    /**
-     * Validates a component definition, ensuring all component type configuration elements are satisfied
-     */
-    protected void validate(ComponentDefinition<Implementation<?>> definition) throws LoaderException {
-        // validate refererences
-        Implementation<?> implementation = definition.getImplementation();
-        ComponentType<?, ?, ?> type = implementation.getComponentType();
-        if (type == null) {
-            return;
-        }
-        for (ReferenceDefinition referenceDef : type.getReferences().values()) {
-            if (referenceDef.isAutowire() || !referenceDef.isRequired()) {
-                continue;
-            }
-            String name = referenceDef.getName();
-            ReferenceTarget target = definition.getReferenceTargets().get(name);
-            if (target == null) {
-                throw new MissingReferenceException(name);
-            }
-            int count = target.getTargets().size();
-            Multiplicity multiplicity = referenceDef.getMultiplicity();
-            switch (multiplicity) {
-                case ZERO_N:
-                    break;
-                case ZERO_ONE:
-                    if (count > 1) {
-                        throw new ReferenceMultiplicityViolationException(name, multiplicity, count);
-                    }
-                    break;
-                case ONE_ONE:
-                    if (count != 1) {
-                        throw new ReferenceMultiplicityViolationException(name, multiplicity, count);
-                    }
-                    break;
-                case ONE_N:
-                    if (count < 1) {
-                        throw new ReferenceMultiplicityViolationException(name, multiplicity, count);
-                    }
-                    break;
-            }
-
-        }
-    }
-
     private void readPropertyType(XMLStreamReader reader, Property property) throws MissingTypePropertyLoaderException {
 
         String typeName = reader.getAttributeValue(null, PROPERTY_TYPE_ATTR);
@@ -408,12 +462,63 @@
         if (xmlElement != null) {
             property.setXmlElement(xmlElement);
         }
+    }
+
+    @SuppressWarnings("unchecked")
+    protected void populateReferences(ComponentDefinition<Implementation<?>> componentDefinition) {
+        //bring the component definition in sync with the componenttype for reference definitions
+        ComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>> componentType =
+            componentDefinition.getImplementation().getComponentType();
+
+        for (ComponentTypeReferenceDefinition refDefn : componentType.getReferences().values()) {
+            if (componentDefinition.getReferences().get(refDefn.getName()) == null) {
+                componentDefinition.add(new ComponentReferenceDefinition(refDefn));
+            }
+        }
+    }
+
+    /**
+     * Validates a component definition, ensuring all component type configuration elements are satisfied
+     */
+    protected void validate(ComponentDefinition<Implementation<?>> definition) throws LoaderException {
+        // validate refererences
+        Implementation<?> implementation = definition.getImplementation();
+        ComponentType<?, ?, ?> type = implementation.getComponentType();
+        if (type == null) {
+            return;
+        }
+        for (ComponentReferenceDefinition referenceDef : definition.getReferences().values()) {
+            if (referenceDef.isAutowire()) {
+                continue;
+            }
+            String name = referenceDef.getName();
+            List<URI> targets = definition.getReferences().get(name).getTargets();
+            if (targets == null) {
+                throw new MissingReferenceException(name);
+            }
+            int count = targets.size();
+            Multiplicity multiplicity = referenceDef.getMultiplicity();
+            switch (multiplicity) {
+                case ZERO_N:
+                    break;
+                case ZERO_ONE:
+                    if (count > 1) {
+                        throw new ReferenceMultiplicityViolationException(name, multiplicity, count);
+                    }
+                    break;
+                case ONE_ONE:
+                    if (count != 1) {
+                        throw new ReferenceMultiplicityViolationException(name, multiplicity, count);
+                    }
+                    break;
+                case ONE_N:
+                    if (count < 1) {
+                        throw new ReferenceMultiplicityViolationException(name, multiplicity, count);
+                    }
+                    break;
+            }
 
-        /*
-         * if (property.getXmlType() == null && property.getXmlElement() == null) { MissingTypePropertyLoaderException
-         * ex = new MissingTypePropertyLoaderException(); ex.setPropertyName(property.getName());
-         * ex.setLine(reader.getLocation().getLineNumber()); ex.setColumn(reader.getLocation().getColumnNumber()); throw
-         * ex; }
-         */
+        }
     }
+
 }

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java Tue Mar 27 05:18:53 2007
@@ -18,15 +18,14 @@
  */
 package org.apache.tuscany.core.loader;
 
-import javax.xml.namespace.QName;
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+import static org.osoa.sca.Constants.SCA_NS;
+
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import static org.osoa.sca.Constants.SCA_NS;
-import org.osoa.sca.annotations.Constructor;
-
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
@@ -34,10 +33,12 @@
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
 import org.apache.tuscany.spi.model.ModelObject;
 import org.apache.tuscany.spi.model.Property;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
 import org.apache.tuscany.spi.model.ServiceDefinition;
+import org.osoa.sca.annotations.Constructor;
 
 /**
  * @version $Rev$ $Date$
@@ -60,13 +61,13 @@
                               XMLStreamReader reader,
                               DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
         assert COMPONENT_TYPE.equals(reader.getName());
-        ComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> componentType;
+        ComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>> componentType;
         if (object != null) {
             assert object instanceof ComponentType;
             // a specialized component type was passed in
-            componentType = (ComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>) object;
+            componentType = (ComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>>) object;
         } else {
-            componentType = new ComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>();
+            componentType = new ComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>>();
         }
 
         while (true) {
@@ -75,8 +76,8 @@
                     ModelObject o = registry.load(parent, componentType, reader, deploymentContext);
                     if (o instanceof ServiceDefinition) {
                         componentType.add((ServiceDefinition) o);
-                    } else if (o instanceof ReferenceDefinition) {
-                        componentType.add((ReferenceDefinition) o);
+                    } else if (o instanceof ComponentTypeReferenceDefinition) {
+                        componentType.add((ComponentTypeReferenceDefinition) o);
                     } else if (o instanceof Property) {
                         componentType.add((Property<?>) o);
                     }

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java Tue Mar 27 05:18:53 2007
@@ -153,7 +153,11 @@
         if (loader == null) {
             throw new UnrecognizedComponentTypeException(key);
         }
+        try {
         loader.load(parent, implementation, deploymentContext);
+        } catch ( Exception e) {
+            e.printStackTrace();
+        }
     }
 
     public static interface Monitor {

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java Tue Mar 27 05:18:53 2007
@@ -18,65 +18,172 @@
  */
 package org.apache.tuscany.core.loader;
 
-import javax.xml.namespace.QName;
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+import static org.osoa.sca.Constants.SCA_NS;
+
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import static org.osoa.sca.Constants.SCA_NS;
-import org.osoa.sca.annotations.Constructor;
-
+import org.apache.tuscany.core.util.ReferenceLoaderHelper;
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.loader.DuplicateReferenceNameException;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.ReferenceMultiplicityViolationException;
 import org.apache.tuscany.spi.loader.UnrecognizedElementException;
 import org.apache.tuscany.spi.model.BindingDefinition;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
+import org.apache.tuscany.spi.model.CompositeComponentType;
+import org.apache.tuscany.spi.model.CompositeReferenceDefinition;
 import org.apache.tuscany.spi.model.ModelObject;
 import org.apache.tuscany.spi.model.Multiplicity;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
 import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.util.stax.StaxUtil;
+import org.osoa.sca.annotations.Constructor;
 
 /**
  * Loads a reference from an XML-based assembly file
  *
  * @version $Rev$ $Date$
  */
-public class ReferenceLoader extends LoaderExtension<ReferenceDefinition> {
+public class ReferenceLoader extends LoaderExtension<ComponentTypeReferenceDefinition> {
+    public static final String NAME_ATTR = "name";
+
+    public static final String MULTIPLICITY_ATTR = "multiplicity";
+
+    public static final String WIRED_BY_IMPL_ATTR = "wiredByImpl";
+
+    public static final String TARGET_ATTR = "target";
+    
+    public static final String PROMOTE_ATTR = "promote";
+
     public static final QName REFERENCE = new QName(SCA_NS, "reference");
 
     @Constructor
-    public ReferenceLoader(@Autowire LoaderRegistry registry) {
+    public ReferenceLoader(@Autowire
+    LoaderRegistry registry) {
         super(registry);
     }
 
-    public QName getXMLType() {
+    public QName getXMLType() { 
         return REFERENCE;
     }
+    
+    public ComponentTypeReferenceDefinition load(CompositeComponent parent,
+                                                 ModelObject object,
+                                                 XMLStreamReader reader,
+                                                 DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
+        if (object instanceof CompositeComponentType<?, ?, ?>) {
+            return loadCompositeReference(parent, object, reader, deploymentContext);
+            //return loadComponentType(parent, object, reader, deploymentContext);
+        } else {
+            return loadComponentTypeReference(parent, object, reader, deploymentContext);
+        }
+    }
+                  
+    
 
-    public ReferenceDefinition load(CompositeComponent parent,
-                                    ModelObject object, XMLStreamReader reader,
-                                    DeploymentContext deploymentContext)
-        throws XMLStreamException, LoaderException {
+    public ComponentTypeReferenceDefinition loadComponentTypeReference(CompositeComponent parent,
+                                    ModelObject object,
+                                    XMLStreamReader reader,
+                                    DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
+        
         assert REFERENCE.equals(reader.getName());
-        String name = reader.getAttributeValue(null, "name");
-        String multiplicityVal = reader.getAttributeValue(null, "multiplicity");
+        String name = reader.getAttributeValue(null, NAME_ATTR);
+        String multiplicityVal = reader.getAttributeValue(null, MULTIPLICITY_ATTR);
+        String wiredByImpl = reader.getAttributeValue(null, WIRED_BY_IMPL_ATTR);
+        String targets = reader.getAttributeValue(null, TARGET_ATTR);
         Multiplicity multiplicity = StaxUtil.multiplicity(multiplicityVal, Multiplicity.ONE_ONE);
-        ReferenceDefinition referenceDefinition = new ReferenceDefinition();
+        
+        
+        
+        ComponentType<?, ?, ?> componentType = (ComponentType<?, ?, ?>)object;
+        if ( componentType.getReferences().get(name) != null) {
+            throw new DuplicateReferenceNameException(name, 
+                                                  DuplicateReferenceNameException.COMPONENT_TYPE,
+                                                  "");
+        }
+        ComponentTypeReferenceDefinition referenceDefinition = new ComponentTypeReferenceDefinition();
+        referenceDefinition.setName(name);
         referenceDefinition.setMultiplicity(multiplicity);
         referenceDefinition.setName(name);
+        referenceDefinition.setWiredByImpl(Boolean.parseBoolean(wiredByImpl));
+        
+        if (targets != null && targets.length() > 0 )
+            ReferenceLoaderHelper.populateRefTargets(referenceDefinition, targets);
+        
+        /*if (!ReferenceLoaderHelper.validateMultiplicityAndTargets(multiplicity, referenceDefinition
+            .getTargets())) {
+            throw new ReferenceMultiplicityViolationException(name, multiplicity, referenceDefinition.getTargets().size());
+        }*/
+
+        while (true) {
+            switch (reader.next()) {
+                case START_ELEMENT:
+                    ModelObject o = registry.load(parent, null, reader, deploymentContext);
+                    if (o instanceof ServiceContract) {
+                        referenceDefinition.setServiceContract((ServiceContract)o);
+                    } else if (o instanceof BindingDefinition) {
+                        referenceDefinition.addBinding((BindingDefinition)o);
+                    } else {
+                        throw new UnrecognizedElementException(reader.getName());
+                    }
+                    break;
+                case END_ELEMENT:
+                    return referenceDefinition;
+            }
+        }
+    }
+    
+    public CompositeReferenceDefinition loadCompositeReference(CompositeComponent parent,
+                                                              ModelObject object,
+                                                              XMLStreamReader reader,
+                                                              DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
+        
+        String name = reader.getAttributeValue(null, NAME_ATTR);
+        String multiplicityVal = reader.getAttributeValue(null, MULTIPLICITY_ATTR);
+        String wiredByImpl = reader.getAttributeValue(null, WIRED_BY_IMPL_ATTR);
+        String targets = reader.getAttributeValue(null, TARGET_ATTR);
+        String promotedComponentRefs = reader.getAttributeValue(null, PROMOTE_ATTR);
+        //if multiplicity is not set, it will be derived in the composite loader by looking
+        //at the multiplicity of all promoted references - which can be done only after the composite
+        //is completelly loaded
+        Multiplicity multiplicity = StaxUtil.multiplicity(multiplicityVal, null);
+        
+        
+        CompositeComponentType<?, ?, ?> compositeCompType = (CompositeComponentType<?, ?, ?>)object;
+        if ( compositeCompType.getDeclaredReferences().get(name) != null) {
+            throw new DuplicateReferenceNameException(name, 
+                                                  DuplicateReferenceNameException.COMPOSITE,
+                                                  compositeCompType.getName());
+        }
+        CompositeReferenceDefinition referenceDefinition = new CompositeReferenceDefinition();
+        referenceDefinition.setName(name);
+        referenceDefinition.setMultiplicity(multiplicity);
+        
+        if (promotedComponentRefs != null && promotedComponentRefs.length() > 0) {
+            ReferenceLoaderHelper.populatePromotedRefs(referenceDefinition, promotedComponentRefs);
+        }
+        
+        if (targets != null && targets.length() > 0 )
+            ReferenceLoaderHelper.populateRefTargets(referenceDefinition, targets);
+        
+        referenceDefinition.setWiredByImpl(Boolean.parseBoolean(wiredByImpl));
+        
         while (true) {
             switch (reader.next()) {
                 case START_ELEMENT:
                     ModelObject o = registry.load(parent, null, reader, deploymentContext);
                     if (o instanceof ServiceContract) {
-                        referenceDefinition.setServiceContract((ServiceContract) o);
+                        referenceDefinition.setServiceContract((ServiceContract)o);
                     } else if (o instanceof BindingDefinition) {
-                        referenceDefinition.addBinding((BindingDefinition) o);
+                        referenceDefinition.addBinding((BindingDefinition)o);
                     } else {
                         throw new UnrecognizedElementException(reader.getName());
                     }

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/policy/PolicyBuilderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/policy/PolicyBuilderRegistryImpl.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/policy/PolicyBuilderRegistryImpl.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/policy/PolicyBuilderRegistryImpl.java Tue Mar 27 05:18:53 2007
@@ -22,7 +22,7 @@
 import java.util.List;
 
 import org.apache.tuscany.spi.builder.BuilderException;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
 import org.apache.tuscany.spi.model.ServiceDefinition;
 import org.apache.tuscany.spi.policy.PolicyBuilderRegistry;
 import org.apache.tuscany.spi.policy.SourcePolicyBuilder;
@@ -60,7 +60,7 @@
     }
 
 
-    public void buildSource(ReferenceDefinition referenceDefinition, OutboundWire wire) throws BuilderException {
+    public void buildSource(AbstractReferenceDefinition referenceDefinition, OutboundWire wire) throws BuilderException {
         for (List<SourcePolicyBuilder> builders : sourceBuilders) {
             for (SourcePolicyBuilder builder : builders) {
                 builder.build(referenceDefinition, wire);

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/ContributionProcessorRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/ContributionProcessorRegistryImpl.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/ContributionProcessorRegistryImpl.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/ContributionProcessorRegistryImpl.java Tue Mar 27 05:18:53 2007
@@ -82,8 +82,12 @@
         if (processor == null) {
             throw new UnsupportedContentTypeException(contentType, locationURL.getPath());
         }
- 
+        try {
         processor.processContent(contribution, source, inputStream);
+        } catch ( Exception e ) {
+            e.printStackTrace();
+        }
+        
     }
 
     public void processModel(Contribution contribution, URI source, Object modelObject) throws DeploymentException,

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/contribution/JavaContributionProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/contribution/JavaContributionProcessor.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/contribution/JavaContributionProcessor.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/deployment/contribution/JavaContributionProcessor.java Tue Mar 27 05:18:53 2007
@@ -83,7 +83,6 @@
             cl.addURL(contribution.getLocation());
 
             String clazzName = getClazzName(contribution.getArtifact(artifactURI).getLocation());
-            System.out.println(clazzName);
 
             Class clazz = cl.loadClass(clazzName);
 

Added: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/util/ReferenceLoaderHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/util/ReferenceLoaderHelper.java?view=auto&rev=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/util/ReferenceLoaderHelper.java (added)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/util/ReferenceLoaderHelper.java Tue Mar 27 05:18:53 2007
@@ -0,0 +1,167 @@
+/*
+ * 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.core.util;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.apache.tuscany.spi.loader.IncompatibleOverridingServiceContractException;
+import org.apache.tuscany.spi.loader.InvalidReferenceException;
+import org.apache.tuscany.spi.model.CompositeReferenceDefinition;
+import org.apache.tuscany.spi.model.Multiplicity;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
+import org.apache.tuscany.spi.model.ServiceContract;
+
+/**
+ * Functions to help in loading of references
+ */
+
+public final class ReferenceLoaderHelper {
+    /**
+     * Hide constructor
+     */
+    private ReferenceLoaderHelper() {
+    }
+
+    public static void populateRefTargets(AbstractReferenceDefinition refDefn, String concatenatedTargets) throws InvalidReferenceException {
+        StringTokenizer st = new StringTokenizer(concatenatedTargets);
+        while (st.hasMoreTokens()) {
+            try {
+                refDefn.addTarget(new URI(st.nextToken()));
+            } catch (URISyntaxException e) {
+                throw new InvalidReferenceException(e);
+            }
+        }
+    }
+    
+    public static void populatePromotedRefs(CompositeReferenceDefinition refDefn, String concatenatedUris) throws InvalidReferenceException {
+        StringTokenizer st = new StringTokenizer(concatenatedUris);
+        while (st.hasMoreTokens()) {
+            try {
+                refDefn.addPromotedReference(new URI(st.nextToken()));
+            } catch (URISyntaxException e) {
+                throw new InvalidReferenceException(e);
+            }
+        }
+    }
+    
+    public static boolean isCompatibleMultiplicity(Multiplicity definedMul, Multiplicity overridenMul) {
+        return ((definedMul == overridenMul) || 
+            (definedMul == Multiplicity.ZERO_ONE && overridenMul == Multiplicity.ZERO_N) || 
+            (definedMul == Multiplicity.ZERO_N && overridenMul == Multiplicity.ZERO_ONE) ||
+            (definedMul == Multiplicity.ONE_ONE && overridenMul == Multiplicity.ONE_N) || 
+                (definedMul == Multiplicity.ONE_N && overridenMul == Multiplicity.ONE_ONE));
+    }
+
+    public static boolean isValidMultiplicityOverride(Multiplicity definedMul, Multiplicity overridenMul) {
+        if (definedMul != overridenMul) {
+            switch (definedMul) {
+                case ZERO_N:
+                    return overridenMul == Multiplicity.ZERO_ONE;
+                case ONE_N:
+                    return overridenMul == Multiplicity.ONE_ONE;
+                default:
+                    return false;
+            }
+        } else {
+            return true;
+        }
+    }
+    
+    public static boolean validateMultiplicityAndTargets(Multiplicity multiplicity,
+                                                         List<URI> targets) {
+        int count = targets.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;
+    }
+
+    public static void checkInterfaceCompatibility(ServiceContract<?> source,
+                                                   ServiceContract<?> target,
+                                                   boolean ignoreCallback) throws IncompatibleOverridingServiceContractException {
+        if (source == target) {
+            // Shortcut for performance
+            return;
+        }
+        
+        //FIXME: we don't go into operations comparison for now since the service contract thta the 
+        //interace loader loads does not have operation details as the intropection 'has not been deep'
+        //The JavaInterfaceLoader has set the 'deep' introspection to false....will fix this after
+        //sorting that out.
+        
+        if (source.getInteractionScope() != target.getInteractionScope()) {
+            throw new IncompatibleOverridingServiceContractException(
+                                                           "Interaction scopes settings do not match",
+                                                           source, target);
+        }
+
+        for (Operation<?> operation : source.getOperations().values()) {
+            Operation<?> targetOperation = target.getOperation(operation.getName());
+            if (targetOperation == null) {
+                throw new IncompatibleOverridingServiceContractException("Operation not found on target",
+                                                               source, target);
+            }
+            if (!targetOperation.equals(operation)) {
+                throw new IncompatibleOverridingServiceContractException(
+                                                               "Target operations are not compatible",
+                                                               source, target);
+            }
+        }
+
+        if (ignoreCallback) {
+            return;
+        }
+
+        for (Operation<?> operation : source.getCallbackOperations().values()) {
+            Operation<?> targetOperation = target.getCallbackOperations().get(operation.getName());
+            if (targetOperation == null) {
+                throw new IncompatibleOverridingServiceContractException(
+                                                               "Callback operation not found on target",
+                                                               source, target, null,
+                                                               targetOperation);
+            }
+            if (!operation.equals(targetOperation)) {
+                throw new IncompatibleOverridingServiceContractException(
+                                                               "Target callback operation is not compatible",
+                                                               source, target, operation,
+                                                               targetOperation);
+            }
+        }
+    }
+}

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java Tue Mar 27 05:18:53 2007
@@ -30,11 +30,13 @@
 import org.apache.tuscany.spi.component.ServiceBinding;
 import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentReferenceDefinition;
 import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
 import org.apache.tuscany.spi.model.Implementation;
 import org.apache.tuscany.spi.model.Multiplicity;
 import org.apache.tuscany.spi.model.Operation;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
 import org.apache.tuscany.spi.model.ReferenceTarget;
 import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.model.ServiceDefinition;
@@ -95,24 +97,23 @@
             component.addInboundWire(wire);
         }
         // create outgoing reference wires
-        for (ReferenceTarget referenceTarget : definition.getReferenceTargets().values()) {
-            Map<String, ? extends ReferenceDefinition> references = componentType.getReferences();
-            ReferenceDefinition mappedReference = references.get(referenceTarget.getReferenceName());
-            assert mappedReference != null;
-            List<OutboundWire> wires = createWire(referenceTarget, mappedReference);
-            Multiplicity multiplicity = mappedReference.getMultiplicity();
-            if (multiplicity == Multiplicity.ZERO_ONE || multiplicity == Multiplicity.ONE_ONE) {
-                // 0..1 or 1..1
-                for (OutboundWire wire : wires) {
-                    wire.setContainer(component);
-                    component.addOutboundWire(wire);
-                }
-            } else {
-                // 0..N or 1..N
-                for (OutboundWire wire : wires) {
-                    wire.setContainer(component);
+        for (ComponentReferenceDefinition refDefn : definition.getReferences().values()) {
+            if (!refDefn.isWiredByImpl()) {
+                List<OutboundWire> wires = createWire(refDefn.getTargets(), refDefn);
+                Multiplicity multiplicity = refDefn.getMultiplicity();
+                if (multiplicity == Multiplicity.ZERO_ONE || multiplicity == Multiplicity.ONE_ONE) {
+                    // 0..1 or 1..1
+                    for (OutboundWire wire : wires) {
+                        wire.setContainer(component);
+                        component.addOutboundWire(wire);
+                    }
+                } else {
+                    // 0..N or 1..N
+                    for (OutboundWire wire : wires) {
+                        wire.setContainer(component);
+                    }
+                    component.addOutboundWires(wires);
                 }
-                component.addOutboundWires(wires);
             }
         }
     }
@@ -260,6 +261,7 @@
         }
     }
 
+    
     /**
      * Creates a wire for flowing outbound invocations from a reference
      *
@@ -267,14 +269,14 @@
      * @param definition the reference target configuration
      * @return the wire the outbound wire
      */
-    protected List<OutboundWire> createWire(ReferenceTarget target, ReferenceDefinition definition) {
+    protected List<OutboundWire> createWire(List<URI> targetUris, ComponentReferenceDefinition definition) {
         ServiceContract<?> contract = definition.getServiceContract();
         List<OutboundWire> outboundWires = new ArrayList<OutboundWire>();
-        if (definition.isAutowire()) {
+        if (definition.getAssociatedCompTypeRefDefn().isAutowire() || definition.isAutowire()) {
             OutboundWire wire = new OutboundWireImpl();
             wire.setAutowire(true);
             wire.setServiceContract(contract);
-            wire.setReferenceName(target.getReferenceName());
+            wire.setReferenceName(definition.getName());
             for (Operation<?> operation : contract.getOperations().values()) {
                 // TODO handle policy
                 OutboundInvocationChain chain = createOutboundChain(operation);
@@ -291,12 +293,12 @@
             }
             outboundWires.add(wire);
         } else {
-            for (URI uri : target.getTargets()) {
+            for (URI uri : targetUris) {
                 OutboundWire wire = new OutboundWireImpl();
                 QualifiedName qName = new QualifiedName(uri.toString());
                 wire.setTargetName(qName);
                 wire.setServiceContract(contract);
-                wire.setReferenceName(target.getReferenceName());
+                wire.setReferenceName(definition.getName());
                 for (Operation<?> operation : contract.getOperations().values()) {
                     // TODO handle policy
                     OutboundInvocationChain chain = createOutboundChain(operation);
@@ -317,5 +319,5 @@
         }
         return outboundWires;
     }
-
+    
 }

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryNoBindingsTestCase.java Tue Mar 27 05:18:53 2007
@@ -27,8 +27,9 @@
 import org.apache.tuscany.spi.component.Service;
 import org.apache.tuscany.spi.component.ServiceBinding;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
 import org.apache.tuscany.spi.model.Multiplicity;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
 import org.apache.tuscany.spi.model.ServiceDefinition;
 
 import junit.framework.TestCase;
@@ -60,7 +61,7 @@
     public void testReferenceBindingBuilderDispatch() throws Exception {
         ReferenceBinding binding = EasyMock.createNiceMock(ReferenceBinding.class);
         EasyMock.replay(binding);
-        ReferenceDefinition definition = new ReferenceDefinition("foo", null, Multiplicity.ONE_ONE);
+        AbstractReferenceDefinition definition = new ComponentTypeReferenceDefinition("foo", null, Multiplicity.ONE_ONE);
         Reference reference = registry.build(parent, definition, deploymentContext);
         assertEquals(1, reference.getReferenceBindings().size());
         assertTrue(reference.getReferenceBindings().get(0) instanceof LocalReferenceBinding);

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java Tue Mar 27 05:18:53 2007
@@ -38,11 +38,12 @@
 import org.apache.tuscany.spi.model.BindingDefinition;
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
 import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.CompositeImplementation;
 import org.apache.tuscany.spi.model.Implementation;
 import static org.apache.tuscany.spi.model.Multiplicity.ONE_ONE;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.model.ServiceDefinition;
@@ -111,12 +112,12 @@
         EasyMock.replay(binding);
         BindingBuilder<MockBindingDefinition> builder = EasyMock.createMock(BindingBuilder.class);
         EasyMock.expect(builder.build(EasyMock.isA(CompositeComponent.class),
-            EasyMock.isA(ReferenceDefinition.class),
+            EasyMock.isA(AbstractReferenceDefinition.class),
             EasyMock.isA(MockBindingDefinition.class),
             EasyMock.isA(DeploymentContext.class))).andReturn(binding).times(2);
         EasyMock.replay(builder);
         registry.register(MockBindingDefinition.class, builder);
-        ReferenceDefinition definition = new ReferenceDefinition("foo", null, ONE_ONE);
+        AbstractReferenceDefinition definition = new ComponentTypeReferenceDefinition("foo", null, ONE_ONE);
         definition.addBinding(new MockBindingDefinition());
         definition.addBinding(new MockBindingDefinition());
         Reference reference = registry.build(parent, definition, deploymentContext);
@@ -203,7 +204,11 @@
     }
 
     private class MockBindingDefinition extends BindingDefinition {
-
+        public Object clone() {
+            MockBindingDefinition mockClone = new MockBindingDefinition();
+            mockClone.setTargetUri(URI.create(this.getTargetUri().toString()));
+            return mockClone;
+        }
     }
 
     private class FooImplementation extends Implementation<ComponentType> {

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java Tue Mar 27 05:18:53 2007
@@ -33,11 +33,12 @@
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.ComponentType;
 import org.apache.tuscany.spi.model.CompositeComponentType;
+import org.apache.tuscany.spi.model.CompositeReferenceDefinition;
 import org.apache.tuscany.spi.model.Implementation;
 import org.apache.tuscany.spi.model.Include;
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.model.PropertyValue;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
 import org.apache.tuscany.spi.model.ServiceDefinition;
 
 import junit.framework.TestCase;
@@ -68,7 +69,7 @@
         URL scdl = BootstrapDeployerTestCase.class.getResource("boot1.scdl");
         implementation.setScdlLocation(scdl);
         deployer.load(parent, componentDefinition, deploymentContext);
-        CompositeComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> composite =
+        CompositeComponentType<ServiceDefinition, CompositeReferenceDefinition, Property<?>> composite =
             implementation.getComponentType();
         assertNotNull(composite);
         assertEquals("boot1", composite.getName());

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeBuilderTestCase.java Tue Mar 27 05:18:53 2007
@@ -33,9 +33,12 @@
 import org.apache.tuscany.spi.implementation.java.JavaMappedService;
 import org.apache.tuscany.spi.implementation.java.PojoComponentType;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentReferenceDefinition;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
 import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.CompositeImplementation;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
+import org.apache.tuscany.spi.model.CompositeReferenceDefinition;
 import org.apache.tuscany.spi.model.ReferenceTarget;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.model.ServiceContract;
@@ -93,8 +96,8 @@
 
     private ComponentDefinition createTopComponentDef() throws Exception {
 
-        CompositeComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>> outerType =
-            new CompositeComponentType<JavaMappedService, JavaMappedReference, JavaMappedProperty<?>>();
+        CompositeComponentType<JavaMappedService, CompositeReferenceDefinition, JavaMappedProperty<?>> outerType =
+            new CompositeComponentType<JavaMappedService, CompositeReferenceDefinition, JavaMappedProperty<?>>();
         outerType.add(createSourceComponentDef());
         outerType.add(createTargetComponentDef());
 
@@ -106,10 +109,10 @@
 
     private ComponentDefinition<CompositeImplementation> createSourceComponentDef() throws Exception {
 
-        CompositeComponentType<ServiceDefinition, ReferenceDefinition, JavaMappedProperty<?>> innerType =
-            new CompositeComponentType<ServiceDefinition, ReferenceDefinition, JavaMappedProperty<?>>();
+        CompositeComponentType<ServiceDefinition, CompositeReferenceDefinition, JavaMappedProperty<?>> innerType =
+            new CompositeComponentType<ServiceDefinition, CompositeReferenceDefinition, JavaMappedProperty<?>>();
         innerType.add(createInnerSourceComponentDef());
-        ReferenceDefinition reference = new ReferenceDefinition();
+        CompositeReferenceDefinition reference = new CompositeReferenceDefinition();
         reference.setName("TargetComponentRef");
         JavaInterfaceProcessorRegistry registry = new JavaInterfaceProcessorRegistryImpl();
         JavaServiceContract targetContract = registry.introspect(Target.class);
@@ -127,10 +130,15 @@
 
         ComponentDefinition<CompositeImplementation> sourceComponentDefinition =
             new ComponentDefinition<CompositeImplementation>("SourceComponent", innerImpl);
-        ReferenceTarget refTarget = new ReferenceTarget();
+        
+        /*ReferenceTarget refTarget = new ReferenceTarget();
         refTarget.setReferenceName("TargetComponentRef");
         refTarget.addTarget(new URI("TargetComponent"));
-        sourceComponentDefinition.add(refTarget);
+        sourceComponentDefinition.add(refTarget);*/
+        ComponentReferenceDefinition compRef = new ComponentReferenceDefinition(innerType.getReferences().get("TargetComponentRef"));
+        compRef.setName("TargetComponentRef");
+        compRef.addTarget(new URI("TargetComponent"));
+        sourceComponentDefinition.add(compRef);
 
         return sourceComponentDefinition;
     }
@@ -161,11 +169,16 @@
         JavaImplementation sourceImpl = new JavaImplementation(SourceImpl.class, sourceType);
         ComponentDefinition<JavaImplementation> innerSourceComponentDefinition =
             new ComponentDefinition<JavaImplementation>("InnerSourceComponent", sourceImpl);
-        ReferenceTarget refTarget = new ReferenceTarget();
+        
+        ComponentReferenceDefinition compRef = new ComponentReferenceDefinition(sourceType.getReferences().get("targetReference"));
+        compRef.setName("targetReference");
+        compRef.addTarget(new URI("TargetComponentRef"));
+        innerSourceComponentDefinition.add(compRef);
+        /*ReferenceTarget refTarget = new ReferenceTarget();
         refTarget.setReferenceName("targetReference");
         refTarget.addTarget(new URI("TargetComponentRef"));
         innerSourceComponentDefinition.add(refTarget);
-
+        */
         return innerSourceComponentDefinition;
     }
 

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeLoaderWireResolutionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeLoaderWireResolutionTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeLoaderWireResolutionTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeLoaderWireResolutionTestCase.java Tue Mar 27 05:18:53 2007
@@ -23,11 +23,15 @@
 import java.net.URISyntaxException;
 
 import org.apache.tuscany.spi.implementation.java.PojoComponentType;
+import org.apache.tuscany.spi.loader.InvalidPromotedReferenceException;
 import org.apache.tuscany.spi.loader.InvalidWireException;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentReferenceDefinition;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
 import org.apache.tuscany.spi.model.CompositeComponentType;
+import org.apache.tuscany.spi.model.CompositeReferenceDefinition;
 import org.apache.tuscany.spi.model.Property;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
 import org.apache.tuscany.spi.model.ServiceDefinition;
 import org.apache.tuscany.spi.model.WireDefinition;
 
@@ -40,11 +44,11 @@
  * @version $Rev$ $Date$
  */
 public class CompositeLoaderWireResolutionTestCase extends TestCase {
-    private CompositeComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> componentType;
+    private CompositeComponentType<ServiceDefinition, CompositeReferenceDefinition, Property<?>> componentType;
     private CompositeLoader compositeLoader = new CompositeLoader(null, null);
 
     public void setUp() throws Exception {
-        componentType = new CompositeComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>();
+        componentType = new CompositeComponentType<ServiceDefinition, CompositeReferenceDefinition, Property<?>>();
         componentType.setName("TestComposite");
         //add a service to the composite
         ServiceDefinition serviceDefn = new ServiceDefinition("compositeService1", null, true);
@@ -56,35 +60,38 @@
         componentType.add(boundSvcDefn);
         componentType.add(boundSvcDefnWithTarget);
 
-        ReferenceDefinition compositeReference = new ReferenceDefinition("compositeReference", null);
+        CompositeReferenceDefinition compositeReference = new CompositeReferenceDefinition("compositeReference", null);
         componentType.add(compositeReference);
 
-        PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> pojoComponentType1 =
-            new PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>();
+        PojoComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>> pojoComponentType1 =
+            new PojoComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>>();
         ServiceDefinition pojoSvc1 = new ServiceDefinition("pojoSvc1", null, false);
         pojoComponentType1.add(pojoSvc1);
-        ReferenceDefinition pojoRef1 = new ReferenceDefinition("pojoRef1", null);
+        ComponentTypeReferenceDefinition pojoRef1 = new ComponentTypeReferenceDefinition("pojoRef1", null);
         pojoComponentType1.add(pojoRef1);
         JavaImplementation pojoImpl1 = new JavaImplementation(null, pojoComponentType1);
 
         ComponentDefinition<JavaImplementation> component1 =
             new ComponentDefinition<JavaImplementation>("Component1", pojoImpl1);
+        component1.add(new ComponentReferenceDefinition(pojoRef1));
         componentType.add(component1);
 
-        PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> pojoComponentType2 =
-            new PojoComponentType<ServiceDefinition, ReferenceDefinition, Property<?>>();
+        PojoComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>> pojoComponentType2 =
+            new PojoComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, Property<?>>();
         ServiceDefinition pojoSvc2 = new ServiceDefinition("pojoSvc2", null, false);
         pojoComponentType2.add(pojoSvc2);
         ServiceDefinition pojoSvc3 = new ServiceDefinition("pojoSvc3", null, false);
         pojoComponentType2.add(pojoSvc3);
-        ReferenceDefinition pojoRef2 = new ReferenceDefinition("pojoRef2", null);
+        ComponentTypeReferenceDefinition pojoRef2 = new ComponentTypeReferenceDefinition("pojoRef2", null);
         pojoComponentType2.add(pojoRef2);
-        ReferenceDefinition pojoRef3 = new ReferenceDefinition("pojoRef3", null);
+        ComponentTypeReferenceDefinition pojoRef3 = new ComponentTypeReferenceDefinition("pojoRef3", null);
         pojoComponentType2.add(pojoRef3);
         JavaImplementation pojoImpl2 = new JavaImplementation(null, pojoComponentType2);
 
         ComponentDefinition<JavaImplementation> component2 =
             new ComponentDefinition<JavaImplementation>("Component2", pojoImpl2);
+        component2.add(new ComponentReferenceDefinition(pojoRef2));
+        component2.add(new ComponentReferenceDefinition(pojoRef3));
         componentType.add(component2);
     }
 
@@ -114,7 +121,7 @@
         compositeLoader.resolveWires(componentType);
     }
 
-    public void testCompositeSvc2ComponentQualifiedInvalid() throws URISyntaxException {
+    public void testCompositeSvc2ComponentQualifiedInvalid() throws URISyntaxException, InvalidPromotedReferenceException {
         //undefined source and targets
         WireDefinition wireDefn = new WireDefinition();
         wireDefn.setSource(new URI("compositeService1"));
@@ -128,7 +135,7 @@
         }
     }
 
-    public void testCompositeSvc2ComponentUnQualifiedInvalid() throws URISyntaxException {
+    public void testCompositeSvc2ComponentUnQualifiedInvalid() throws URISyntaxException, InvalidPromotedReferenceException {
         //undefined source and targets
         WireDefinition wireDefn = new WireDefinition();
         wireDefn.setSource(new URI("compositeService1"));
@@ -160,7 +167,7 @@
         compositeLoader.resolveWires(componentType);
     }
 
-    public void testComponent2CompositeReferenceUnQualifiedInvalid() throws URISyntaxException {
+    public void testComponent2CompositeReferenceUnQualifiedInvalid() throws URISyntaxException, InvalidPromotedReferenceException {
         //undefined source and targets
         WireDefinition wireDefn = new WireDefinition();
         wireDefn.setSource(new URI("Component2"));
@@ -184,7 +191,7 @@
         compositeLoader.resolveWires(componentType);
     }
 
-    public void testComponent2ComponentUnQualifedInvalid() throws URISyntaxException {
+    public void testComponent2ComponentUnQualifedInvalid() throws URISyntaxException, InvalidPromotedReferenceException {
         //undefined source and targets
         WireDefinition wireDefn = new WireDefinition();
         wireDefn.setSource(new URI("Component1"));
@@ -198,7 +205,7 @@
         }
     }
 
-    public void testInvalidWireDefinitions() throws URISyntaxException {
+    public void testInvalidWireDefinitions() throws URISyntaxException, InvalidPromotedReferenceException {
         //undefined source and targets
         WireDefinition wireDefn = new WireDefinition();
         wireDefn.setSource(new URI("undefinedSource"));

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaBuilderPropertyTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaBuilderPropertyTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaBuilderPropertyTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaBuilderPropertyTestCase.java Tue Mar 27 05:18:53 2007
@@ -28,8 +28,9 @@
 import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
 import org.apache.tuscany.spi.implementation.java.PojoComponentType;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentTypeReferenceDefinition;
 import org.apache.tuscany.spi.model.PropertyValue;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.AbstractReferenceDefinition;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.model.ServiceDefinition;
 
@@ -51,8 +52,8 @@
     public void testPropertyHandling() throws Exception {
         JavaComponentBuilder builder = new JavaComponentBuilder();
         builder.setScopeRegistry(registry);
-        PojoComponentType<ServiceDefinition, ReferenceDefinition, JavaMappedProperty<?>> type =
-            new PojoComponentType<ServiceDefinition, ReferenceDefinition, JavaMappedProperty<?>>();
+        PojoComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, JavaMappedProperty<?>> type =
+            new PojoComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, JavaMappedProperty<?>>();
         JavaMappedProperty<String> property = new JavaMappedProperty<String>();
         property.setName("test");
         property.setDefaultValueFactory(new SingletonObjectFactory<String>("foo"));
@@ -72,8 +73,8 @@
     public void testIntPropertyHandling() throws Exception {
         JavaComponentBuilder builder = new JavaComponentBuilder();
         builder.setScopeRegistry(registry);
-        PojoComponentType<ServiceDefinition, ReferenceDefinition, JavaMappedProperty<?>> type =
-            new PojoComponentType<ServiceDefinition, ReferenceDefinition, JavaMappedProperty<?>>();
+        PojoComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, JavaMappedProperty<?>> type =
+            new PojoComponentType<ServiceDefinition, ComponentTypeReferenceDefinition, JavaMappedProperty<?>>();
         JavaMappedProperty<Integer> property = new JavaMappedProperty<Integer>();
         property.setName("test");
         property.setDefaultValueFactory(new SingletonObjectFactory<Integer>(1));

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java Tue Mar 27 05:18:53 2007
@@ -38,6 +38,7 @@
 import org.apache.tuscany.spi.implementation.java.JavaMappedService;
 import org.apache.tuscany.spi.implementation.java.PojoComponentType;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentReferenceDefinition;
 import org.apache.tuscany.spi.model.ReferenceTarget;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.model.ServiceContract;
@@ -226,7 +227,10 @@
         impl.setComponentType(type);
         impl.setImplementationClass(FooClient.class);
         ComponentDefinition<JavaImplementation> def = new ComponentDefinition<JavaImplementation>(name, impl);
-        def.getReferenceTargets().put("foo", refTarget);
+        ComponentReferenceDefinition compRef = new ComponentReferenceDefinition(type.getReferences().get("foo"));
+        compRef.addTarget(new URI("foo"));
+        def.add(compRef);
+        //def.getReferenceTargets().put("foo", refTarget);
         return def;
     }
 
@@ -250,7 +254,10 @@
         refTarget.getTargets().add(new URI("foo"));
         JavaImplementation impl = new JavaImplementation(FooPlainClient.class, type);
         ComponentDefinition<JavaImplementation> def = new ComponentDefinition<JavaImplementation>(name, impl);
-        def.getReferenceTargets().put("foo", refTarget);
+        ComponentReferenceDefinition compRef = new ComponentReferenceDefinition(type.getReferences().get("foo"));
+        compRef.addTarget(new URI("foo"));
+        def.add(compRef);
+        //def.getReferenceTargets().put("foo", refTarget);
         return def;
     }
 

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorReferenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorReferenceTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorReferenceTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ConstructorReferenceTestCase.java Tue Mar 27 05:18:53 2007
@@ -44,7 +44,6 @@
         Constructor<Foo> ctor = Foo.class.getConstructor(String.class);
         processor.visitConstructor(null, ctor, type, null);
         JavaMappedReference reference = type.getReferences().get("myRef");
-        assertTrue(reference.isRequired());
         assertEquals("myRef", reference.getName());
     }
 

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessorTestCase.java?view=diff&rev=522885&r1=522884&r2=522885
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessorTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessorTestCase.java Tue Mar 27 05:18:53 2007
@@ -58,7 +58,6 @@
                               null);
         JavaMappedReference prop = type.getReferences().get("fooRequired");
         assertNotNull(prop);
-        assertTrue(prop.isRequired());
     }
 
     public void testMethodName() throws Exception {
@@ -82,7 +81,6 @@
         processor.visitField(null, ReferenceProcessorTestCase.Foo.class.getDeclaredField("bazRequired"), type, null);
         JavaMappedReference prop = type.getReferences().get("bazRequired");
         assertNotNull(prop);
-        assertTrue(prop.isRequired());
     }
 
     public void testFieldName() throws Exception {
@@ -199,7 +197,6 @@
         assertNotNull(prop);
         assertSame(Ref.class, prop.getServiceContract().getInterfaceClass());
         assertEquals(Multiplicity.ONE_N, prop.getMultiplicity());
-        assertTrue(prop.isRequired());
     }
 
     public void testMultiplicityTo0ToN() throws Exception {
@@ -208,7 +205,6 @@
         assertNotNull(prop);
         assertSame(Ref.class, prop.getServiceContract().getInterfaceClass());
         assertEquals(Multiplicity.ZERO_N, prop.getMultiplicity());
-        assertFalse(prop.isRequired());
     }
 
     public void testMultiplicity1ToNMethod() throws Exception {
@@ -217,7 +213,6 @@
         assertNotNull(prop);
         assertSame(Ref.class, prop.getServiceContract().getInterfaceClass());
         assertEquals(Multiplicity.ONE_N, prop.getMultiplicity());
-        assertTrue(prop.isRequired());
     }
 
     public void testMultiplicity0ToNMethod() throws Exception {
@@ -226,7 +221,5 @@
         assertNotNull(prop);
         assertSame(Ref.class, prop.getServiceContract().getInterfaceClass());
         assertEquals(Multiplicity.ZERO_N, prop.getMultiplicity());
-        assertFalse(prop.isRequired());
     }
-
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org