You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2006/10/07 04:03:39 UTC

svn commit: r453835 - in /incubator/tuscany/java/sca/kernel: core/src/main/java/org/apache/tuscany/core/implementation/composite/ core/src/test/java/org/apache/tuscany/core/implementation/composite/ spi/src/main/java/org/apache/tuscany/spi/services/art...

Author: jboynes
Date: Fri Oct  6 19:03:38 2006
New Revision: 453835

URL: http://svn.apache.org/viewvc?view=rev&rev=453835
Log:
support repo lookup for composites used as an implementation

Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java?view=diff&rev=453835&r1=453834&r2=453835
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java Fri Oct  6 19:03:38 2006
@@ -20,6 +20,8 @@
 
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Collections;
+import java.util.Set;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -36,7 +38,10 @@
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.LoaderUtil;
+import org.apache.tuscany.spi.loader.MissingResourceException;
 import org.apache.tuscany.spi.model.CompositeImplementation;
+import org.apache.tuscany.spi.services.artifact.Artifact;
+import org.apache.tuscany.spi.services.artifact.ArtifactRepository;
 
 /**
  * Loader that handles an <implementation.composite> element.
@@ -47,9 +52,12 @@
     private static final QName IMPLEMENTATION_COMPOSITE =
         new QName(Version.XML_NAMESPACE_1_0, "implementation.composite");
 
-    @Constructor({"registry"})
-    public ImplementationCompositeLoader(@Autowire LoaderRegistry registry) {
+    private final ArtifactRepository artifactRepository;
+
+    public ImplementationCompositeLoader(@Autowire LoaderRegistry registry,
+                                         @Autowire ArtifactRepository artifactRepository) {
         super(registry);
+        this.artifactRepository = artifactRepository;
     }
 
     public QName getXMLType() {
@@ -63,6 +71,8 @@
 
         assert IMPLEMENTATION_COMPOSITE.equals(reader.getName());
         String name = reader.getAttributeValue(null, "name");
+        String group = reader.getAttributeValue(null, "group");
+        String version = reader.getAttributeValue(null, "version");
         String scdlLocation = reader.getAttributeValue(null, "scdlLocation");
         String jarLocation = reader.getAttributeValue(null, "jarLocation");
         LoaderUtil.skipToEndElement(reader);
@@ -93,6 +103,30 @@
                 throw new AssertionError("Could not convert URL to a jar: url");
             }
             impl.setClassLoader(new CompositeClassLoader(new URL[]{jarUrl}, deploymentContext.getClassLoader()));
+        } else if (artifactRepository != null && group != null && version != null) {
+            Artifact artifact = new Artifact();
+            artifact.setGroup(group);
+            artifact.setName(name);
+            artifact.setVersion(version);
+            artifact.setType("jar");
+            artifactRepository.resolve(artifact);
+            if (artifact.getUrl() == null) {
+                MissingResourceException mre = new MissingResourceException(artifact.toString());
+                mre.setIdentifier(name);
+                throw mre;
+            }
+            try {
+                impl.setScdlLocation(new URL("jar:" + artifact.getUrl() + "!/META-INF/sca/default.scdl"));
+            } catch (MalformedURLException e) {
+                throw new AssertionError(e);
+            }
+            Set<URL> artifactURLs = artifact.getUrls();
+            URL[] urls = new URL[artifactURLs.size()];
+            int i = 0;
+            for (URL artifactURL : artifactURLs) {
+                urls[i++] = artifactURL;
+            }
+            impl.setClassLoader(new CompositeClassLoader(urls, deploymentContext.getClassLoader()));
         }
         return impl;
     }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java?view=diff&rev=453835&r1=453834&r2=453835
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java Fri Oct  6 19:03:38 2006
@@ -25,17 +25,21 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
-
-import org.apache.tuscany.spi.deployer.DeploymentContext;
-import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.model.CompositeImplementation;
-
 import junit.framework.TestCase;
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reportMatcher;
 import static org.easymock.EasyMock.verify;
+import org.easymock.IArgumentMatcher;
+import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
+
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.deployer.CompositeClassLoader;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.CompositeImplementation;
+import org.apache.tuscany.spi.services.artifact.Artifact;
+import org.apache.tuscany.spi.services.artifact.ArtifactRepository;
 
 /**
  * @version $Rev$ $Date$
@@ -47,30 +51,63 @@
     private ImplementationCompositeLoader loader;
     private XMLStreamReader reader;
     private DeploymentContext context;
+    private ArtifactRepository artifactRepository;
 
     public void testName() throws LoaderException, XMLStreamException, MalformedURLException {
         String name = "foo";
         expect(reader.getName()).andReturn(IMPLEMENTATION_COMPOSITE);
         expect(reader.getAttributeValue(null, "name")).andReturn(name);
+        expect(reader.getAttributeValue(null, "group")).andReturn(null);
+        expect(reader.getAttributeValue(null, "version")).andReturn(null);
         expect(reader.getAttributeValue(null, "scdlLocation")).andReturn(null);
         expect(reader.getAttributeValue(null, "jarLocation")).andReturn(null);
         expect(reader.next()).andReturn(END_ELEMENT);
         replay(reader);
 
         replay(context);
+        replay(artifactRepository);
 
         CompositeImplementation impl = loader.load(null, reader, context);
         verify(reader);
         verify(context);
+        verify(artifactRepository);
         assertEquals(name, impl.getName());
         assertNull(impl.getScdlLocation());
         assertNull(impl.getClassLoader());
     }
 
+    public void testWithArtifact() throws LoaderException, XMLStreamException, MalformedURLException {
+        String name = "foo";
+        expect(reader.getName()).andReturn(IMPLEMENTATION_COMPOSITE);
+        expect(reader.getAttributeValue(null, "name")).andReturn(name);
+        expect(reader.getAttributeValue(null, "group")).andReturn("com.example");
+        expect(reader.getAttributeValue(null, "version")).andReturn("1.0");
+        expect(reader.getAttributeValue(null, "scdlLocation")).andReturn(null);
+        expect(reader.getAttributeValue(null, "jarLocation")).andReturn(null);
+        expect(reader.next()).andReturn(END_ELEMENT);
+        replay(reader);
+
+        expect(context.getClassLoader()).andReturn(cl);
+        replay(context);
+        URL url = new URL("http://www.example.com/sca/base.jar");
+        artifactRepository.resolve(artifactMatcher(url, "com.example", name, "1.0"));
+        replay(artifactRepository);
+
+        CompositeImplementation impl = loader.load(null, reader, context);
+        verify(reader);
+        verify(context);
+        verify(artifactRepository);
+        assertEquals(name, impl.getName());
+        assertEquals(new URL("jar:http://www.example.com/sca/base.jar!/META-INF/sca/default.scdl"), impl.getScdlLocation());
+        assertTrue(impl.getClassLoader() instanceof CompositeClassLoader);
+    }
+
     public void testWithScdlLocation() throws LoaderException, XMLStreamException, MalformedURLException {
         String name = "foo";
         expect(reader.getName()).andReturn(IMPLEMENTATION_COMPOSITE);
         expect(reader.getAttributeValue(null, "name")).andReturn(name);
+        expect(reader.getAttributeValue(null, "group")).andReturn(null);
+        expect(reader.getAttributeValue(null, "version")).andReturn(null);
         expect(reader.getAttributeValue(null, "scdlLocation")).andReturn("bar.scdl");
         expect(reader.getAttributeValue(null, "jarLocation")).andReturn(null);
         expect(reader.next()).andReturn(END_ELEMENT);
@@ -79,10 +116,12 @@
         expect(context.getScdlLocation()).andReturn(new URL("http://www.example.com/sca/base.scdl"));
         expect(context.getClassLoader()).andReturn(cl);
         replay(context);
+        replay(artifactRepository);
 
         CompositeImplementation impl = loader.load(null, reader, context);
         verify(reader);
         verify(context);
+        verify(artifactRepository);
         assertEquals(name, impl.getName());
         assertEquals(new URL("http://www.example.com/sca/bar.scdl"), impl.getScdlLocation());
         assertSame(cl, impl.getClassLoader());
@@ -92,6 +131,8 @@
         String name = "foo";
         expect(reader.getName()).andReturn(IMPLEMENTATION_COMPOSITE);
         expect(reader.getAttributeValue(null, "name")).andReturn(name);
+        expect(reader.getAttributeValue(null, "group")).andReturn(null);
+        expect(reader.getAttributeValue(null, "version")).andReturn(null);
         expect(reader.getAttributeValue(null, "scdlLocation")).andReturn(null);
         expect(reader.getAttributeValue(null, "jarLocation")).andReturn("bar.jar");
         expect(reader.next()).andReturn(END_ELEMENT);
@@ -100,10 +141,12 @@
         expect(context.getScdlLocation()).andReturn(new URL("http://www.example.com/sca/base.scdl"));
         expect(context.getClassLoader()).andReturn(cl);
         replay(context);
+        replay(artifactRepository);
 
         CompositeImplementation impl = loader.load(null, reader, context);
         verify(reader);
         verify(context);
+        verify(artifactRepository);
         assertEquals(name, impl.getName());
         assertEquals(new URL("jar:http://www.example.com/sca/bar.jar!/META-INF/sca/default.scdl"),
                      impl.getScdlLocation());
@@ -111,9 +154,39 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        loader = new ImplementationCompositeLoader(null);
+        artifactRepository = createMock(ArtifactRepository.class);
         reader = createMock(XMLStreamReader.class);
         context = createMock(DeploymentContext.class);
         cl = getClass().getClassLoader();
+        loader = new ImplementationCompositeLoader(null, artifactRepository);
+    }
+
+    protected static Artifact artifactMatcher(final URL url,
+                                              final String group,
+                                              final String name,
+                                              final String version) {
+        reportMatcher(new IArgumentMatcher() {
+
+            public boolean matches(Object object) {
+                if (!(object instanceof Artifact)) {
+                    return false;
+                }
+
+                Artifact artifact = (Artifact) object;
+                boolean match = group.equals(artifact.getGroup()) &&
+                    name.equals(artifact.getName()) &&
+                    version.equals(artifact.getVersion()) &&
+                    "jar".equals(artifact.getType());
+                if (match) {
+                    artifact.setUrl(url);
+                }
+                return match;
+            }
+
+            public void appendTo(StringBuffer stringBuffer) {
+                stringBuffer.append(group).append(':').append(name).append(':').append(version);
+            }
+        });
+        return null;
     }
 }

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java?view=diff&rev=453835&r1=453834&r2=453835
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java Fri Oct  6 19:03:38 2006
@@ -187,4 +187,11 @@
     public void setUrl(URL url) {
         this.url = url;
     }
+
+
+    public String toString() {
+        StringBuilder buf = new StringBuilder();
+        buf.append(group).append(':').append(name).append(':').append(version).append(':').append(type);
+        return buf.toString();
+    }
 }



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