Author: jboynes
Date: Sat Mar 11 07:35:35 2006
New Revision: 385092

URL: http://svn.apache.org/viewcvs?rev=385092&view=rev
Log:
support configured references with multiple values
converted the references associated with a component into a map keyed by name
update loaders to merge <v:reference-name> elements into the targets for a 
reference
updated helper methods to support multiple targets'

Modified:
    
incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java
    
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java
    
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/components/SourceImpl.java
    
incubator/tuscany/java/sca/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptComponentContextBuilder.java
    
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ComponentLoader.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java
    
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java
    
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/SourceImpl.java
    
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/builder/impl/AssemblyVisitorTestCase.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyFactory.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/Component.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/ConfiguredReference.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyFactoryImpl.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ConfiguredReferenceImpl.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java
    
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java

Modified: 
incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java
 Sat Mar 11 07:35:35 2006
@@ -237,9 +237,9 @@
                 }
 
                 // handle references
-                List<ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
+                Map<String, ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
                 if (configuredReferences != null) {
-                    for (ConfiguredReference reference : configuredReferences) 
{
+                    for (ConfiguredReference reference : 
configuredReferences.values()) {
                         Injector injector = createReferenceInjector(config, 
reference, fields, methods, parentContext);
                         injectors.add(injector);
                     }

Modified: 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockFactory.java
 Sat Mar 11 07:35:35 2006
@@ -312,11 +312,9 @@
         ref.setServiceContract(inter);
         
sourceComponent.getComponentImplementation().getComponentType().getReferences().add(ref);
 
-        ConfiguredReference cref = factory.createConfiguredReference();
-        cref.setName("setGenericComponent");
-        cref.setTarget("target");
+        ConfiguredReference cref = 
factory.createConfiguredReference("setGenericComponent", "target");
         cref.initialize(assemblyContext);
-        sourceComponent.getConfiguredReferences().add(cref);
+        sourceComponent.getConfiguredReferences().put(cref.getName(), cref);
         sourceComponent.initialize(assemblyContext);
 
         Module module = factory.createModule();
@@ -352,11 +350,9 @@
         ref.setServiceContract(inter);
         
sourceComponent.getComponentImplementation().getComponentType().getReferences().add(ref);
 
-        ConfiguredReference cref = factory.createConfiguredReference();
-        cref.setName(ref.getName());
-        cref.setTarget("target");
+        ConfiguredReference cref = 
factory.createConfiguredReference(ref.getName(), "target");
         cref.initialize(assemblyContext);
-        sourceComponent.getConfiguredReferences().add(cref);
+        sourceComponent.getConfiguredReferences().put(cref.getName(), cref);
         sourceComponent.initialize(assemblyContext);
 
         Module module = factory.createModule();
@@ -460,11 +456,9 @@
         reference.setName("setTarget");
         reference.setServiceContract(refContract);
         componentType.getReferences().add(reference);
-        ConfiguredReference cReference = 
systemFactory.createConfiguredReference();
-        cReference.setName(reference.getName());
-        cReference.setTarget("target");
+        ConfiguredReference cReference = 
systemFactory.createConfiguredReference(reference.getName(), "target");
         cReference.initialize(assemblyContext);
-        source.getConfiguredReferences().add(cReference);
+        source.getConfiguredReferences().put(cReference.getName(), cReference);
 
         // wire multiplicity using a setter
         JavaServiceContract refContract2 = 
systemFactory.createJavaServiceContract();
@@ -473,11 +467,9 @@
         reference2.setName("setTargets");
         reference2.setServiceContract(refContract2);
         componentType.getReferences().add(reference2);
-        ConfiguredReference cReference2 = 
systemFactory.createConfiguredReference();
-        cReference2.setName(reference2.getName());
-        cReference2.setTarget("target");
+        ConfiguredReference cReference2 = 
systemFactory.createConfiguredReference(reference2.getName(), "target");
         cReference2.initialize(assemblyContext);
-        source.getConfiguredReferences().add(cReference2);
+        source.getConfiguredReferences().put(cReference2.getName(), 
cReference2);
 
         // wire multiplicity using a field
         JavaServiceContract refContract3 = 
systemFactory.createJavaServiceContract();
@@ -486,11 +478,9 @@
         reference3.setName("targetsThroughField");
         reference3.setServiceContract(refContract3);
         componentType.getReferences().add(reference3);
-        ConfiguredReference cReference3 = 
systemFactory.createConfiguredReference();
-        cReference3.setName(reference3.getName());
-        cReference3.setTarget("target");
+        ConfiguredReference cReference3 = 
systemFactory.createConfiguredReference(reference3.getName(), "target");
         cReference3.initialize(assemblyContext);
-        source.getConfiguredReferences().add(cReference3);
+        source.getConfiguredReferences().put(cReference3.getName(), 
cReference3);
         source.initialize(assemblyContext);
 
 

Modified: 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/components/SourceImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/components/SourceImpl.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/components/SourceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/components/SourceImpl.java
 Sat Mar 11 07:35:35 2006
@@ -31,7 +31,6 @@
 
     public void setTarget(Target target) {
         this.target = target;
-        this.targets = new ArrayList();
     }
 
     public Target getTarget() {

Modified: 
incubator/tuscany/java/sca/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptComponentContextBuilder.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptComponentContextBuilder.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptComponentContextBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/container.js/src/main/java/org/apache/tuscany/container/js/builder/JavaScriptComponentContextBuilder.java
 Sat Mar 11 07:35:35 2006
@@ -19,7 +19,6 @@
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import org.apache.tuscany.container.js.assembly.JavaScriptImplementation;
@@ -174,9 +173,9 @@
                 }
 
                 // handle references
-                List<ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
+                Map<String, ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
                 if (configuredReferences != null) {
-                    for (ConfiguredReference reference : configuredReferences) 
{
+                    for (ConfiguredReference reference : 
configuredReferences.values()) {
                         ProxyFactory proxyFactory = 
factory.createProxyFactory();
                         ServiceContract interfaze = 
reference.getReference().getServiceContract();
                         Map<Method, InvocationConfiguration> iConfigMap = new 
MethodHashMap();

Modified: 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/container.js/src/test/java/org/apache/tuscany/container/js/mock/MockModuleFactory.java
 Sat Mar 11 07:35:35 2006
@@ -67,11 +67,9 @@
         inter.setInterface(HelloWorldService.class);
         ref.setServiceContract(inter);
         
sourceComponent.getComponentImplementation().getComponentType().getReferences().add(ref);
-        ConfiguredReference cref = factory.createConfiguredReference();
-        cref.setName(ref.getName());
-        cref.setTarget("target");
+        ConfiguredReference cref = 
factory.createConfiguredReference(ref.getName(), "target");
         cref.initialize(assemblyContext);
-        sourceComponent.getConfiguredReferences().add(cref);
+        sourceComponent.getConfiguredReferences().put(cref.getName(), cref);
         sourceComponent.initialize(assemblyContext);
 
         Module module = factory.createModule();

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ComponentLoader.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ComponentLoader.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ComponentLoader.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ComponentLoader.java
 Sat Mar 11 07:35:35 2006
@@ -17,6 +17,7 @@
 package org.apache.tuscany.core.loader.assembly;
 
 import java.util.List;
+import java.util.Map;
 import javax.xml.namespace.QName;
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
@@ -97,15 +98,21 @@
     }
 
     protected void loadReferences(XMLStreamReader reader, Component component) 
throws XMLStreamException {
-        List<ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
-
+        Map<String, ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
         while (true) {
             switch (reader.next()) {
             case START_ELEMENT:
-                ConfiguredReference configuredReference = 
factory.createConfiguredReference();
-                configuredReference.setName(reader.getLocalName());
-                configuredReference.setTarget(reader.getElementText());
-                configuredReferences.add(configuredReference);
+                String name = reader.getLocalName();
+                String uri = reader.getElementText();
+
+                ConfiguredReference configuredReference = 
configuredReferences.get(name);
+                if (configuredReference == null) {
+                    configuredReference = factory.createConfiguredReference();
+                    configuredReference.setName(name);
+                    configuredReferences.put(name, configuredReference);
+                }
+
+                configuredReference.getTargets().add(uri);
                 break;
             case END_ELEMENT:
                 return;

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java
 Sat Mar 11 07:35:35 2006
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+import java.util.Map;
 
 import org.apache.tuscany.common.monitor.MonitorFactory;
 import org.apache.tuscany.core.builder.BuilderConfigException;
@@ -66,7 +67,7 @@
  * Decorates components whose implementation type is a
  * [EMAIL PROTECTED] 
org.apache.tuscany.core.system.assembly.SystemImplementation} with the 
appropriate runtime configuration.
  * System components are not proxied.
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class SystemComponentContextBuilder implements 
RuntimeConfigurationBuilder<AggregateContext> {
@@ -149,9 +150,9 @@
             // FIXME do not inject references on an application module yet
             if (implClass != AggregateContextImpl.class) {
                 // handle references
-                List<ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
+                Map<String, ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
                 if (configuredReferences != null) {
-                    for (ConfiguredReference reference : configuredReferences) 
{
+                    for (ConfiguredReference reference : 
configuredReferences.values()) {
                         Injector injector = 
createReferenceInjector(parentContext.getName(), component.getName(), 
parentContext,
                                 reference, fields, methods);
                         injectors.add(injector);

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java
 Sat Mar 11 07:35:35 2006
@@ -15,9 +15,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
-import org.apache.tuscany.core.config.ConfigurationException;
 import org.apache.tuscany.core.context.impl.AggregateContextImpl;
 import org.apache.tuscany.core.mock.component.ModuleScopeSystemComponent;
 import org.apache.tuscany.core.mock.component.ModuleScopeSystemComponentImpl;
@@ -264,19 +264,22 @@
         Component source = systemFactory.createSystemComponent("source", 
Source.class, SourceImpl.class, sourceScope);
         ComponentType sourceComponentType = 
source.getComponentImplementation().getComponentType();
         List<Reference> references = sourceComponentType.getReferences();
-        List<ConfiguredReference> configuredReferences = 
source.getConfiguredReferences();
+        Map<String, ConfiguredReference> configuredReferences = 
source.getConfiguredReferences();
 
         // wire source to target
         references.add(systemFactory.createReference("setTarget", 
Target.class));
-        
configuredReferences.add(systemFactory.createConfiguredReference("setTarget", 
"target"));
+        ConfiguredReference configuredReference = 
systemFactory.createConfiguredReference("setTarget", "target");
+        configuredReferences.put(configuredReference.getName(), 
configuredReference);
 
         // wire multiplicity using a setter
         references.add(systemFactory.createReference("setTargets", 
List.class));
-        
configuredReferences.add(systemFactory.createConfiguredReference("setTargets", 
"target"));
+        configuredReference = 
systemFactory.createConfiguredReference("setTargets", "target");
+        configuredReferences.put(configuredReference.getName(), 
configuredReference);
 
         // wire multiplicity using a field
         references.add(systemFactory.createReference("targetsThroughField", 
List.class));
-        
configuredReferences.add(systemFactory.createConfiguredReference("targetsThroughField",
 "target"));
+        configuredReference = 
systemFactory.createConfiguredReference("targetsThroughField", "target");
+        configuredReferences.put(configuredReference.getName(), 
configuredReference);
 
         source.initialize(assemblyContext);
 

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/SourceImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/SourceImpl.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/SourceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/SourceImpl.java
 Sat Mar 11 07:35:35 2006
@@ -31,7 +31,6 @@
 
     public void setTarget(Target target) {
         this.target = target;
-        this.targets = new ArrayList();
     }
 
     public Target getTarget() {

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/builder/impl/AssemblyVisitorTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/builder/impl/AssemblyVisitorTestCase.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/builder/impl/AssemblyVisitorTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/builder/impl/AssemblyVisitorTestCase.java
 Sat Mar 11 07:35:35 2006
@@ -19,8 +19,6 @@
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
-import org.apache.tuscany.common.resource.ResourceLoader;
-import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl;
 import org.apache.tuscany.core.builder.BuilderException;
 import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
 import org.apache.tuscany.core.builder.impl.AssemblyVisitor;
@@ -30,7 +28,6 @@
 import org.apache.tuscany.core.system.assembly.SystemBinding;
 import org.apache.tuscany.core.system.assembly.SystemImplementation;
 import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl;
-import org.apache.tuscany.model.assembly.AssemblyFactory;
 import org.apache.tuscany.model.assembly.AssemblyModelContext;
 import org.apache.tuscany.model.assembly.AssemblyModelObject;
 import org.apache.tuscany.model.assembly.Component;
@@ -43,10 +40,7 @@
 import org.apache.tuscany.model.assembly.RuntimeConfigurationHolder;
 import org.apache.tuscany.model.assembly.Service;
 import org.apache.tuscany.model.assembly.ComponentType;
-import org.apache.tuscany.model.assembly.impl.AssemblyFactoryImpl;
 import org.apache.tuscany.model.assembly.impl.AssemblyModelContextImpl;
-import org.apache.tuscany.model.assembly.loader.AssemblyModelLoader;
-import org.apache.tuscany.model.scdl.loader.impl.SCDLAssemblyModelLoaderImpl;
 import org.apache.tuscany.model.types.java.JavaServiceContract;
 
 /**
@@ -92,10 +86,8 @@
         component = factory.createSimpleComponent();
         component.setName("source");
         component.setComponentImplementation(impl);
-        ConfiguredReference cRef = factory.createConfiguredReference();
-        cRef.setName("ref");
-        cRef.setTarget("target");
-        component.getConfiguredReferences().add(cRef);
+        ConfiguredReference cRef = factory.createConfiguredReference("ref", 
"target");
+        component.getConfiguredReferences().put(cRef.getName(), cRef);
         component.initialize(assemblyContext);
         module.getComponents().add(component);
 

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyFactory.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/AssemblyFactory.java
 Sat Mar 11 07:35:35 2006
@@ -173,8 +173,8 @@
      * Helper method for creating a configured reference.
      *
      * @param name the name of the reference
-     * @param target the target for the reference
+     * @param targets the targets for the reference
      * @return a ConfiguredReference
      */
-    ConfiguredReference createConfiguredReference(String name, String target);
+    ConfiguredReference createConfiguredReference(String name, String... 
targets);
 }

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/Component.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/Component.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/Component.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/Component.java
 Sat Mar 11 07:35:35 2006
@@ -17,6 +17,7 @@
 package org.apache.tuscany.model.assembly;
 
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -52,10 +53,11 @@
     ConfiguredProperty getConfiguredProperty(String name);
 
     /**
-     * Returns a list of configured reference values for the configured 
instance.
-     * @return a list of configured reference values for the configured 
instance
+     * Returns a live map of this components configured references, keyed by 
reference name.
+     *
+     * @return a live map of configured references
      */
-    List<ConfiguredReference> getConfiguredReferences();
+    Map<String, ConfiguredReference> getConfiguredReferences();
 
     /**
      * Returns the ConfiguredReference value for the specified reference.
@@ -76,5 +78,5 @@
      * @return the configured service value for the named service
      */
     ConfiguredService getConfiguredService(String name);
-       
+
 }

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/ConfiguredReference.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/ConfiguredReference.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/ConfiguredReference.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/ConfiguredReference.java
 Sat Mar 11 07:35:35 2006
@@ -20,10 +20,35 @@
 
 /**
  * A configured reference associated with a particular usage.
+ * Each configuredReference represents a configured version of an logical
+ * reference defined in the ComponentType. If the logical reference
+ * has a multiplicity greater than 1 (0..n or 1..n) then the configured
+ * reference many have multiple targets.
  */
 public interface ConfiguredReference extends ConfiguredPort {
 
     /**
+     * Returns the name of the reference being configured.
+     *
+     * @return the name of the reference being configured
+     */
+    String getName();
+
+    /**
+     * Set the name of the reference being configured.
+     *
+     * @param name the name of the reference being configured
+     */
+    void setName(String name);
+
+    /**
+     * List of URIs for the targets of this reference.
+     *
+     * @return the list of URIs for the targets of this reference
+     */
+    List<String> getTargets();
+
+    /**
      * Returns the [EMAIL PROTECTED] Reference} that is being configured.
      *
      * @return the [EMAIL PROTECTED] Reference} that is being configured
@@ -43,20 +68,6 @@
      * @return the list of configured services that are wired to this 
configured reference
      */
     List<ConfiguredService> getTargetConfiguredServices();
-
-    /**
-     * Returns the name of the reference being configured.
-     *
-     * @return the name of the reference being configured
-     */
-    String getName();
-
-    /**
-     * Set the name of the reference being configured.
-     *
-     * @param name the name of the reference being configured
-     */
-    void setName(String name);
 
     /**
      * Returns the URI of the target of this reference.

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyFactoryImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyFactoryImpl.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyFactoryImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/AssemblyFactoryImpl.java
 Sat Mar 11 07:35:35 2006
@@ -211,10 +211,12 @@
         return reference;
     }
 
-    public ConfiguredReference createConfiguredReference(String name, String 
target) {
+    public ConfiguredReference createConfiguredReference(String name, 
String... targets) {
         ConfiguredReference ref = createConfiguredReference();
         ref.setName(name);
-        ref.setTarget(target);
+        for (String target : targets) {
+            ref.getTargets().add(target);
+        }
         return ref;
     }
 }

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ComponentImpl.java
 Sat Mar 11 07:35:35 2006
@@ -39,8 +39,7 @@
  */
 public abstract class ComponentImpl extends AggregatePartImpl implements 
Component {
 
-    private List<ConfiguredReference> configuredReferences = new 
ArrayList<ConfiguredReference>();
-    private Map<String, ConfiguredReference> configuredReferencesMap;
+    private Map<String, ConfiguredReference> configuredReferencesMap = new 
HashMap<String, ConfiguredReference>();
     private List<ConfiguredService> configuredServices = new 
ArrayList<ConfiguredService>();
     private Map<String, ConfiguredService> configuredServicesMap;
     private List<ConfiguredProperty> configuredProperties = new 
ArrayList<ConfiguredProperty>();
@@ -74,18 +73,14 @@
         return configuredServicesMap.get(name);
     }
 
-    /**
-     * @see 
org.apache.tuscany.model.assembly.Component#getConfiguredReferences()
-     */
-    public List<ConfiguredReference> getConfiguredReferences() {
-        return configuredReferences;
+    public Map<String, ConfiguredReference> getConfiguredReferences() {
+        return configuredReferencesMap;
     }
 
     /**
      * @see 
org.apache.tuscany.model.assembly.Component#getConfiguredReference(java.lang.String)
      */
     public ConfiguredReference getConfiguredReference(String name) {
-        checkInitialized();
         return configuredReferencesMap.get(name);
     }
 
@@ -157,14 +152,12 @@
         }
 
         // Match configured references to the references on the component type
-        configuredReferencesMap = new HashMap<String, 
ConfiguredReference>(configuredReferences.size());
-        for (ConfiguredReference configuredReference : configuredReferences) {
+        for (ConfiguredReference configuredReference : 
configuredReferencesMap.values()) {
             String name = configuredReference.getName();
             ((ConfiguredPortImpl) configuredReference).setAggregatePart(this);
             Reference reference = componentType.getReference(name);
             configuredReference.setReference(reference);
             configuredReference.initialize(modelContext);
-            configuredReferencesMap.put(name, configuredReference);
         }
     }
 
@@ -179,8 +172,8 @@
         // Freeze configured services, references and properties
         configuredServices = Collections.unmodifiableList(configuredServices);
         freeze(configuredServices);
-        configuredReferences = 
Collections.unmodifiableList(configuredReferences);
-        freeze(configuredReferences);
+        configuredReferencesMap = 
Collections.unmodifiableMap(configuredReferencesMap);
+        freeze(configuredReferencesMap.values());
         configuredProperties = 
Collections.unmodifiableList(configuredProperties);
         freeze(configuredProperties);
         if (implementation != null)
@@ -196,7 +189,7 @@
 
         if (!accept(configuredServices, visitor))
             return false;
-        if (!accept(configuredReferences, visitor))
+        if (!accept(configuredReferencesMap.values(), visitor))
             return false;
         if (!accept(configuredProperties, visitor))
             return false;

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ConfiguredReferenceImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ConfiguredReferenceImpl.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ConfiguredReferenceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ConfiguredReferenceImpl.java
 Sat Mar 11 07:35:35 2006
@@ -31,6 +31,7 @@
 
     private String name;
     private String target;
+    private List<String> targets = new ArrayList<String>();
 
     private List<ConfiguredService> targetConfiguredServices = new 
ArrayList<ConfiguredService>();
 
@@ -45,6 +46,10 @@
         this.name = name;
     }
 
+    public List<String> getTargets() {
+        return targets;
+    }
+
     public String getTarget() {
         return target;
     }
@@ -67,22 +72,23 @@
         checkNotFrozen();
         super.setPort(reference);
     }
-    
+
     /**
      * @see 
org.apache.tuscany.model.assembly.ConfiguredReference#getTargetConfiguredServices()
      */
     public List<ConfiguredService> getTargetConfiguredServices() {
         return targetConfiguredServices;
     }
-    
+
     /**
      * @see org.apache.tuscany.model.assembly.impl.ConfiguredPortImpl#freeze()
      */
     public void freeze() {
         super.freeze();
-        
+
         // Freeze list of configured services
-        
targetConfiguredServices=Collections.unmodifiableList(targetConfiguredServices);
+        targetConfiguredServices = 
Collections.unmodifiableList(targetConfiguredServices);
+        targets = Collections.unmodifiableList(targets);
     }
 
 }

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java
 Sat Mar 11 07:35:35 2006
@@ -145,15 +145,16 @@
                     
componentType.getProperties().add(configuredProperty.getProperty());
                 }
 
-                for (ConfiguredReference configuredReference : 
component.getConfiguredReferences()) {
+                for (ConfiguredReference configuredReference : 
component.getConfiguredReferences().values()) {
                     // Create a wire
-                    ServiceURI source =factory.createServiceURI(null, 
component, configuredReference);
-                    ServiceURI target =factory.createServiceURI(null, 
configuredReference.getTarget());
-
-                    Wire wire=factory.createWire();
-                    wire.setSource(source);
-                    wire.setTarget(target);
-                    getWires().add(wire);
+                    ServiceURI sourceURI =factory.createServiceURI(null, 
component, configuredReference);
+                    for (String target : configuredReference.getTargets()) {
+                        ServiceURI targetURI =factory.createServiceURI(null, 
target);
+                        Wire wire=factory.createWire();
+                        wire.setSource(sourceURI);
+                        wire.setTarget(targetURI);
+                        getWires().add(wire);
+                    }
                 }
             }
         }

Modified: 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java?rev=385092&r1=385091&r2=385092&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java
 Sat Mar 11 07:35:35 2006
@@ -480,6 +480,8 @@
 
         // Grab the current component
         final SimpleComponent component=this.currentComponent;
+        Map<String, ConfiguredReference> configuredReferences = 
component.getConfiguredReferences();
+
         // Initialize the component's configured references
         Sequence sequence = object.getAny();
         for (int r = 0, n = sequence.size(); r < n; r++) {
@@ -490,15 +492,18 @@
 
             // Get the corresponding reference definition
             String referenceName = referenceElementDef.getName();
-            final ConfiguredReference configuredReference = 
factory.createConfiguredReference();
-            configuredReference.setName(referenceName);
+            ConfiguredReference configuredReference = 
configuredReferences.get(referenceName);
+            if (configuredReference == null) {
+                configuredReference = factory.createConfiguredReference();
+                configuredReference.setName(referenceName);
+                configuredReferences.put(referenceName, configuredReference);
+            }
+
             Sequence text = referenceElement.getSequence(0);
             if (text != null && text.size() != 0) {
                 String uri = String.valueOf(text.getValue(0));
-                configuredReference.setTarget(uri);
+                configuredReference.getTargets().add(uri);
             }
-
-            component.getConfiguredReferences().add(configuredReference);
         }
 
         return object;


Reply via email to