You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2007/02/25 00:47:34 UTC

svn commit: r511374 - in /incubator/tuscany/java/sca/kernel/core/src: main/java/org/apache/tuscany/core/loader/ test/java/org/apache/tuscany/core/deployer/ test/java/org/apache/tuscany/core/loader/ test/resources/org/apache/tuscany/core/deployer/

Author: jmarino
Date: Sat Feb 24 15:47:33 2007
New Revision: 511374

URL: http://svn.apache.org/viewvc?view=rev&rev=511374
Log:
support SCA 1.0 reference target syntax

Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoReferenceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?view=diff&rev=511374&r1=511373&r2=511374
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Sat Feb 24 15:47:33 2007
@@ -20,7 +20,10 @@
 
 import java.lang.reflect.Type;
 import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
+import java.util.StringTokenizer;
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.ParserConfigurationException;
@@ -229,29 +232,38 @@
             throw new InvalidReferenceException("No name specified");
         }
 
-        String target = reader.getElementText();
+        String target = reader.getAttributeValue(null, "target");
         if (target == null) {
+            // TODO fix   xcv
             throw new InvalidReferenceException("No target specified", name);
         }
-        QualifiedName qName = new QualifiedName(target.trim());
-
         URI componentId = deploymentContext.getComponentId();
-        URI targetURI = componentId.resolve(qName.getFragment());
+        StringTokenizer tokenizer = new StringTokenizer(target);
+        List<URI> uris = new ArrayList<URI>();
+        while (tokenizer.hasMoreTokens()) {
+            String token = tokenizer.nextToken();
+            QualifiedName qName = new QualifiedName(token);
+            uris.add(componentId.resolve(qName.getFragment()));
+        }
+
         Implementation<?> impl = componentDefinition.getImplementation();
         ComponentType<?, ?, ?> componentType = impl.getComponentType();
         if (!componentType.getReferences().containsKey(name)) {
             throw new UndefinedReferenceException(name);
         }
         if (componentType instanceof CompositeComponentType) {
+            if (uris.size() != 1) {
+                // FIXME not yet implemented
+                throw new UnsupportedOperationException();
+            }
             ReferenceDefinition definition = componentType.getReferences().get(name);
             if (definition.getBindings().isEmpty()) {
                 // TODO JFM allow selection of a default binding
-                LocalBindingDefinition binding = new LocalBindingDefinition(targetURI);
+                LocalBindingDefinition binding = new LocalBindingDefinition(uris.get(0));
                 definition.addBinding(binding);
             } else {
                 for (BindingDefinition binding : definition.getBindings()) {
-                    // FIXME this is bad - clarify in the spec how URIs are overriden
-                    binding.setTargetUri(targetURI);
+                    binding.setTargetUri(uris.get(0));
                 }
             }
         } else {
@@ -261,7 +273,9 @@
                 referenceTarget.setReferenceName(componentId.resolve('#' + name));
                 componentDefinition.add(referenceTarget);
             }
-            referenceTarget.addTarget(targetURI);
+            for (URI uri : uris) {
+                referenceTarget.addTarget(uri);
+            }
         }
     }
 

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java?view=diff&rev=511374&r1=511373&r2=511374
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java Sat Feb 24 15:47:33 2007
@@ -124,8 +124,6 @@
         URL scdl = BootstrapDeployerTestCase.class.getResource("boot1.scdl");
         implementation.setScdlLocation(scdl);
         CompositeComponent parent = EasyMock.createMock(CompositeComponent.class);
-//        URI uri = URI.create("sca://parent");
-//        EasyMock.expect(parent.getUri()).andReturn(uri).atLeastOnce();
         replay(parent);
         // load the boot1 file using the bootstrap deployer
         componentDefinition.setUri(URI.create("sca://parent/simple"));

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoReferenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoReferenceTestCase.java?view=diff&rev=511374&r1=511373&r2=511374
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoReferenceTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderNoReferenceTestCase.java Sat Feb 24 15:47:33 2007
@@ -70,7 +70,7 @@
         EasyMock.expect(reader.getName()).andReturn(REFERENCE);
         EasyMock.expect(reader.getAttributeValue((String) isNull(), EasyMock.eq("name")))
             .andReturn("noreference");
-        EasyMock.expect(reader.getElementText()).andReturn("text");
+        EasyMock.expect(reader.getAttributeValue(null, "target")).andReturn("text");
 
         EasyMock.expect(reader.next()).andReturn(XMLStreamConstants.END_ELEMENT);
         EasyMock.replay(reader);
@@ -81,7 +81,7 @@
         EasyMock.expect(mockRegistry.load(EasyMock.isA(CompositeComponent.class),
             (ModelObject) isNull(),
             EasyMock.isA(XMLStreamReader.class),
-             EasyMock.isA(DeploymentContext.class))).andReturn(impl);
+            EasyMock.isA(DeploymentContext.class))).andReturn(impl);
         EasyMock.replay(mockRegistry);
         loader = new ComponentLoader(mockRegistry, null);
         parent = EasyMock.createMock(CompositeComponent.class);

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java?view=diff&rev=511374&r1=511373&r2=511374
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderRefTestCase.java Sat Feb 24 15:47:33 2007
@@ -57,7 +57,7 @@
         definition.setUri(URI.create("component"));
         XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
         EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn("reference");
-        EasyMock.expect(reader.getElementText()).andReturn("target");
+        EasyMock.expect(reader.getAttributeValue(null, "target")).andReturn("target");
         EasyMock.replay(reader);
         loader.loadReference(reader, context, definition);
         ReferenceTarget target = definition.getReferenceTargets().get("reference");
@@ -80,13 +80,37 @@
         definition.setUri(URI.create("component"));
         XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
         EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn("reference");
-        EasyMock.expect(reader.getElementText()).andReturn("target/fragment");
+        EasyMock.expect(reader.getAttributeValue(null, "target")).andReturn("target/fragment");
         EasyMock.replay(reader);
         loader.loadReference(reader, context, definition);
         ReferenceTarget target = definition.getReferenceTargets().get("reference");
         assertEquals(1, target.getTargets().size());
         URI uri = target.getTargets().get(0);
         assertEquals(componentId.resolve("target#fragment"), uri);
+        EasyMock.verify(reader);
+    }
+
+    public void testLoadReferenceWithMultipleTargetUris() throws LoaderException, XMLStreamException {
+        PojoComponentType<?, MockReferenceDefinition, Property<?>> type =
+            new PojoComponentType<ServiceDefinition, MockReferenceDefinition, Property<?>>();
+        MockReferenceDefinition reference = new MockReferenceDefinition();
+        reference.setUri(URI.create("#reference"));
+        type.add(reference);
+        JavaImplementation impl = new JavaImplementation();
+        impl.setComponentType(type);
+        ComponentDefinition<?> definition = new ComponentDefinition<JavaImplementation>(impl);
+        definition.setUri(URI.create("component"));
+        XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
+        EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn("reference");
+        EasyMock.expect(reader.getAttributeValue(null, "target")).andReturn("target1/fragment1 target2/fragment2");
+        EasyMock.replay(reader);
+        loader.loadReference(reader, context, definition);
+        ReferenceTarget target = definition.getReferenceTargets().get("reference");
+        assertEquals(2, target.getTargets().size());
+        URI uri1 = target.getTargets().get(0);
+        assertEquals(componentId.resolve("target1#fragment1"), uri1);
+        URI uri2 = target.getTargets().get(1);
+        assertEquals(componentId.resolve("target2#fragment2"), uri2);
         EasyMock.verify(reader);
     }
 

Modified: incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl?view=diff&rev=511374&r1=511373&r2=511374
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl Sat Feb 24 15:47:33 2007
@@ -20,7 +20,7 @@
 <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
            xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
            name="boot1">
-    <service name="service" >
+    <service name="service">
         <interface.java interface="org.apache.tuscany.core.mock.component.BasicInterface"/>
         <reference>component</reference>
     </service>
@@ -28,7 +28,7 @@
     <component name="component">
         <system:implementation.system class="org.apache.tuscany.core.mock.component.BasicInterfaceImpl"/>
         <property name="publicProperty">propval</property>
-        <reference name="publicReference">component2</reference>
+        <reference name="publicReference" target="component2"/>
     </component>
 
     <include name="boot1-include" scdlLocation="boot1-include.scdl"/>



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