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/09/06 19:48:14 UTC

svn commit: r440806 - in /incubator/tuscany/java/sca/kernel: core/src/main/java/org/apache/tuscany/core/loader/ core/src/test/java/org/apache/tuscany/core/loader/ core/src/test/resources/org/apache/tuscany/core/loader/ spi/src/main/java/org/apache/tusc...

Author: jboynes
Date: Wed Sep  6 10:48:13 2006
New Revision: 440806

URL: http://svn.apache.org/viewvc?view=rev&rev=440806
Log:
support scdlResource for <include>

Added:
    incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/loader/
    incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/loader/test-include.scdl   (with props)
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingIncludeException.java   (with props)
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/IncludeLoaderTestCase.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java?view=diff&rev=440806&r1=440805&r2=440806
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/IncludeLoader.java Wed Sep  6 10:48:13 2006
@@ -34,6 +34,7 @@
 import org.apache.tuscany.spi.loader.LoaderUtil;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.MissingResourceException;
+import org.apache.tuscany.spi.loader.MissingIncludeException;
 import org.apache.tuscany.spi.model.Include;
 import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.annotation.Autowire;
@@ -62,26 +63,39 @@
         assert INCLUDE.equals(reader.getName());
         String name = reader.getAttributeValue(null, "name");
         String scdlLocation = reader.getAttributeValue(null, "scdlLocation");
+        String scdlResource = reader.getAttributeValue(null, "scdlResource");
+        LoaderUtil.skipToEndElement(reader);
 
-        Include include = new Include();
-        include.setName(name);
+        ClassLoader cl = deploymentContext.getClassLoader();
+        URL url;
         if (scdlLocation != null) {
             try {
-                include.setScdlLocation(new URL(deploymentContext.getScdlLocation(), scdlLocation));
+                url = new URL(deploymentContext.getScdlLocation(), scdlLocation);
             } catch (MalformedURLException e) {
                 MissingResourceException mre = new MissingResourceException(scdlLocation, e);
                 mre.setIdentifier(name);
                 throw mre;
             }
-            URL location = include.getScdlLocation();
-            DeploymentContext childContext = new ChildDeploymentContext(deploymentContext,
-                                                                        deploymentContext.getClassLoader(),
-                                                                        location);
-            CompositeComponentType composite = loadFromSidefile(parent, location, childContext);
-            include.setIncluded(composite);
+        } else if (scdlResource != null) {
+            url = cl.getResource(scdlResource);
+            if (url == null) {
+                MissingResourceException mre = new MissingResourceException(scdlResource);
+                mre.setIdentifier(name);
+                throw mre;
+            }
+        } else {
+            MissingIncludeException mie = new MissingIncludeException();
+            mie.setIdentifier(name);
+            throw mie;
         }
 
-        LoaderUtil.skipToEndElement(reader);
+        DeploymentContext childContext = new ChildDeploymentContext(deploymentContext, cl, url);
+        CompositeComponentType composite = loadFromSidefile(parent, url, childContext);
+
+        Include include = new Include();
+        include.setName(name);
+        include.setScdlLocation(url);
+        include.setIncluded(composite);
         return include;
     }
 

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/IncludeLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/IncludeLoaderTestCase.java?view=diff&rev=440806&r1=440805&r2=440806
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/IncludeLoaderTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/IncludeLoaderTestCase.java Wed Sep  6 10:48:13 2006
@@ -18,6 +18,7 @@
  */
 package org.apache.tuscany.core.loader;
 
+import java.net.URL;
 import javax.xml.namespace.QName;
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 import javax.xml.stream.XMLStreamException;
@@ -25,12 +26,20 @@
 
 import junit.framework.TestCase;
 import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.isNull;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 import org.osoa.sca.Version;
 
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.MissingIncludeException;
+import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.Include;
 
 /**
@@ -39,25 +48,117 @@
 public class IncludeLoaderTestCase extends TestCase {
     private static final QName INCLUDE = new QName(Version.XML_NAMESPACE_1_0, "include");
 
+    private LoaderRegistry registry;
     private IncludeLoader loader;
     private XMLStreamReader reader;
+    private DeploymentContext context;
+    private URL base;
+    private URL includeURL;
+    private ClassLoader cl;
 
-    public void testName() throws LoaderException, XMLStreamException {
+    public void testNoLocation() throws LoaderException, XMLStreamException {
         String name = "foo";
         expect(reader.getName()).andReturn(INCLUDE);
         expect(reader.getAttributeValue(null, "name")).andReturn(name);
         expect(reader.getAttributeValue(null, "scdlLocation")).andReturn(null);
+        expect(reader.getAttributeValue(null, "scdlResource")).andReturn(null);
         expect(reader.next()).andReturn(END_ELEMENT);
-        replay(reader);
 
-        Include include = loader.load(null, reader, null);
+        expect(context.getClassLoader()).andReturn(cl);
+        replay(registry, reader, context);
+
+        try {
+            loader.load(null, reader, context);
+            fail();
+        } catch (MissingIncludeException e) {
+            // OK expected
+        }
+        verify(registry, reader, context);
+    }
+
+    public void testWithAbsoluteScdlLocation() throws LoaderException, XMLStreamException {
+        String name = "foo";
+        expect(reader.getName()).andReturn(INCLUDE);
+        expect(reader.getAttributeValue(null, "name")).andReturn(name);
+        expect(reader.getAttributeValue(null, "scdlLocation")).andReturn("http://example.com/include.scdl");
+        expect(reader.getAttributeValue(null, "scdlResource")).andReturn(null);
+        expect(reader.next()).andReturn(END_ELEMENT);
+
+        expect(context.getScdlLocation()).andReturn(base);
+        expect(context.getClassLoader()).andReturn(cl);
+
+        expect(registry.load((CompositeComponent) isNull(),
+                             eq(includeURL),
+                             eq(CompositeComponentType.class),
+                             isA(DeploymentContext.class)))
+            .andReturn(null);
+        replay(registry, reader, context);
+
+        Include include = loader.load(null, reader, context);
+        assertEquals(name, include.getName());
+        assertEquals(includeURL, include.getScdlLocation());
+        verify(registry, reader, context);
+    }
+
+    public void testWithRelativeScdlLocation() throws LoaderException, XMLStreamException {
+        String name = "foo";
+        expect(reader.getName()).andReturn(INCLUDE);
+        expect(reader.getAttributeValue(null, "name")).andReturn(name);
+        expect(reader.getAttributeValue(null, "scdlLocation")).andReturn("include.scdl");
+        expect(reader.getAttributeValue(null, "scdlResource")).andReturn(null);
+        expect(reader.next()).andReturn(END_ELEMENT);
+
+        expect(context.getScdlLocation()).andReturn(base);
+        expect(context.getClassLoader()).andReturn(cl);
+
+        expect(registry.load((CompositeComponent) isNull(),
+                             eq(includeURL),
+                             eq(CompositeComponentType.class),
+                             isA(DeploymentContext.class)))
+            .andReturn(null);
+        replay(registry, reader, context);
+
+        Include include = loader.load(null, reader, context);
+        assertEquals(name, include.getName());
+        assertEquals(includeURL, include.getScdlLocation());
+        verify(registry, reader, context);
+    }
+
+    public void testWithScdlResource() throws LoaderException, XMLStreamException {
+        String name = "foo";
+        String resource = "org/apache/tuscany/core/loader/test-include.scdl";
+        includeURL = cl.getResource(resource);
+        assertNotNull(includeURL);
+
+        expect(reader.getName()).andReturn(INCLUDE);
+        expect(reader.getAttributeValue(null, "name")).andReturn(name);
+        expect(reader.getAttributeValue(null, "scdlLocation")).andReturn(null);
+        expect(reader.getAttributeValue(null, "scdlResource")).andReturn(resource);
+        expect(reader.next()).andReturn(END_ELEMENT);
+
+        expect(context.getClassLoader()).andReturn(cl);
+
+        expect(registry.load((CompositeComponent) isNull(),
+                             eq(includeURL),
+                             eq(CompositeComponentType.class),
+                             isA(DeploymentContext.class)))
+            .andReturn(null);
+        replay(registry, reader, context);
+
+        Include include = loader.load(null, reader, context);
         assertEquals(name, include.getName());
-        verify(reader);
+        assertEquals(includeURL, include.getScdlLocation());
+        verify(registry, reader, context);
     }
 
     protected void setUp() throws Exception {
         super.setUp();
-        this.loader = new IncludeLoader(null);
+        registry = createMock(LoaderRegistry.class);
         reader = createMock(XMLStreamReader.class);
+        context = createMock(DeploymentContext.class);
+        cl = getClass().getClassLoader();
+        base = new URL("http://example.com/test.scdl");
+        includeURL = new URL("http://example.com/include.scdl");
+        loader = new IncludeLoader(registry);
     }
 }

Added: incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/loader/test-include.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/loader/test-include.scdl?view=auto&rev=440806
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/loader/test-include.scdl (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/loader/test-include.scdl Wed Sep  6 10:48:13 2006
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<composite>
+    This file just needs to exist
+</composite>
\ No newline at end of file

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/loader/test-include.scdl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/loader/test-include.scdl
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingIncludeException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingIncludeException.java?view=auto&rev=440806
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingIncludeException.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingIncludeException.java Wed Sep  6 10:48:13 2006
@@ -0,0 +1,35 @@
+/*
+ * 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.spi.loader;
+
+/**
+ * Exception that indicates that an include was not provided.
+ *
+ * @version $Rev$ $Date$
+ */
+public class MissingIncludeException extends LoaderException {
+    private static final long serialVersionUID = -2917278473974880124L;
+
+    /**
+     * Default constructor.
+     */
+    public MissingIncludeException() {
+        super();
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingIncludeException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/loader/MissingIncludeException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



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