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/05/03 22:00:03 UTC

svn commit: r399391 - in /incubator/tuscany/sandbox/jboynes/sca: core2/src/main/java/org/apache/tuscany/core/builder/ core2/src/test/java/org/apache/tuscany/core/builder/ core2/src/test/java/org/apache/tuscany/core/loader/ model/src/main/java/org/apach...

Author: jboynes
Date: Wed May  3 12:59:57 2006
New Revision: 399391

URL: http://svn.apache.org/viewcvs?rev=399391&view=rev
Log:
refactor builder for spi

Added:
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java   (with props)
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java   (with props)
Modified:
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/ServiceLoaderTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/StAXLoaderRegistryImplTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java
    incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/CompositeComponentType.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BuilderRegistry.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderContext.java

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java?rev=399391&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java Wed May  3 12:59:57 2006
@@ -0,0 +1,89 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.builder;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.model.BoundReference;
+import org.apache.tuscany.model.BoundService;
+import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.Implementation;
+import org.apache.tuscany.spi.builder.BuilderRegistry;
+import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.builder.WireBuilder;
+import org.apache.tuscany.spi.context.CompositeContext;
+import org.apache.tuscany.spi.context.Context;
+import org.apache.tuscany.spi.wire.SourceWireFactory;
+import org.apache.tuscany.spi.wire.TargetWireFactory;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BuilderRegistryImpl implements BuilderRegistry {
+    private final Map<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>> componentBuilders = new HashMap<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>>();
+
+    public <I extends Implementation<?>> void register(ComponentBuilder<I> builder) {
+        Class<?> aClass = builder.getClass();
+        Type[] interfaces = aClass.getGenericInterfaces();
+        for (Type type : interfaces) {
+            if (! (type instanceof ParameterizedType)) {
+                continue;
+            }
+            ParameterizedType interfaceType = (ParameterizedType) type;
+            if (!ComponentBuilder.class.equals(interfaceType.getRawType())) {
+                continue;
+            }
+            Class<I> implClass = (Class<I>) interfaceType.getActualTypeArguments()[0];
+            register(implClass, builder);
+            return;
+        }
+        throw new IllegalArgumentException("builder is not generified");
+    }
+
+    public <I extends Implementation<?>> void register(Class<I> implClass, ComponentBuilder<I> builder) {
+        componentBuilders.put(implClass, builder);
+    }
+
+    public void register(WireBuilder builder) {
+        throw new UnsupportedOperationException();
+    }
+
+    public <I extends Implementation<?>> Context build(CompositeContext parent, Component<I> component) {
+        Class<I> implClass = (Class<I>) component.getImplementation().getClass();
+        ComponentBuilder<I> componentBuilder = (ComponentBuilder<I>) componentBuilders.get(implClass);
+        return componentBuilder.build(parent, component);
+    }
+
+    public Context build(CompositeContext parent, BoundService boundService) {
+        throw new UnsupportedOperationException();
+    }
+
+    public Context build(CompositeContext parent, BoundReference boundReference) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void connect(SourceWireFactory<?> source, TargetWireFactory<?> target) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void completeChain(TargetWireFactory<?> target) {
+        throw new UnsupportedOperationException();
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java?rev=399391&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java Wed May  3 12:59:57 2006
@@ -0,0 +1,63 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.builder;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.CompositeImplementation;
+import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.context.CompositeContext;
+import org.apache.tuscany.spi.context.Context;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BuilderRegistryTestCase extends TestCase {
+    private BuilderRegistryImpl registry;
+
+    public void testRegistrationWithGenerics() {
+        GenerifiedBuilder builder = new GenerifiedBuilder();
+        registry.register(builder);
+        Component<CompositeImplementation> component = new Component(new CompositeImplementation());
+        registry.build(null, component);
+    }
+
+    public void testRegistrationWithoutGenerics() {
+        RawBuilder builder = new RawBuilder();
+        registry.register(CompositeImplementation.class, builder);
+        Component<CompositeImplementation> component = new Component(new CompositeImplementation());
+        registry.build(null, component);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        registry = new BuilderRegistryImpl();
+    }
+
+    public static class GenerifiedBuilder implements ComponentBuilder<CompositeImplementation> {
+        public Context build(CompositeContext parent, Component<CompositeImplementation> component) {
+            return null;
+        }
+    }
+
+    @SuppressWarnings({"RawUseOfParameterizedType"})
+    public static class RawBuilder implements ComponentBuilder {
+        public Context build(CompositeContext parent, Component component) {
+            return null;
+        }
+    }
+}

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/ServiceLoaderTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/ServiceLoaderTestCase.java?rev=399391&r1=399390&r2=399391&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/ServiceLoaderTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/ServiceLoaderTestCase.java Wed May  3 12:59:57 2006
@@ -67,6 +67,6 @@
         mockReader = mock(XMLStreamReader.class);
         mockRegistry = mock(StAXLoaderRegistry.class);
         loader.setRegistry((StAXLoaderRegistry) mockRegistry.proxy());
-        loaderContext = new LoaderContext(null);
+        loaderContext = new LoaderContext(null, null);
     }
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/StAXLoaderRegistryImplTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/StAXLoaderRegistryImplTestCase.java?rev=399391&r1=399390&r2=399391&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/StAXLoaderRegistryImplTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/loader/StAXLoaderRegistryImplTestCase.java Wed May  3 12:59:57 2006
@@ -76,7 +76,7 @@
     protected void setUp() throws Exception {
         super.setUp();
         name = new QName("http://mock", "test");
-        loaderContext = new LoaderContext(null);
+        loaderContext = new LoaderContext(null, null);
         registry = new StAXLoaderRegistryImpl();
         mockMonitor = mock(StAXLoaderRegistryImpl.Monitor.class);
         registry.setMonitor((StAXLoaderRegistryImpl.Monitor) mockMonitor.proxy());

Modified: incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java?rev=399391&r1=399390&r2=399391&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java Wed May  3 12:59:57 2006
@@ -16,19 +16,19 @@
  */
 package org.apache.tuscany.model;
 
-import java.util.Map;
 import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @version $Rev$ $Date$
  */
-public class Component<T extends Implementation> extends ModelObject {
+public class Component<I extends Implementation<?>> extends ModelObject {
     private String name;
-    private final T implementation;
+    private final I implementation;
     private final Map<String, ReferenceTarget> referenceTargets = new HashMap<String, ReferenceTarget>();
     private final Map<String, PropertyValue<?>> propertyValues = new HashMap<String, PropertyValue<?>>();
 
-    public Component(T implementation) {
+    public Component(I implementation) {
         this.implementation = implementation;
     }
 
@@ -40,7 +40,7 @@
         this.name = name;
     }
 
-    public T getImplementation() {
+    public I getImplementation() {
         return implementation;
     }
 

Modified: incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/CompositeComponentType.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/CompositeComponentType.java?rev=399391&r1=399390&r2=399391&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/CompositeComponentType.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/CompositeComponentType.java Wed May  3 12:59:57 2006
@@ -24,7 +24,7 @@
  */
 public class CompositeComponentType extends ComponentType {
     private String name;
-    private final Map<String, Component> components = new HashMap<String, Component>();
+    private final Map<String, Component<?>> components = new HashMap<String, Component<?>>();
 
     public String getName() {
         return name;
@@ -34,7 +34,7 @@
         this.name = name;
     }
 
-    public Map<String, Component> getComponents() {
+    public Map<String, Component<?>> getComponents() {
         return components;
     }
 

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BuilderRegistry.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BuilderRegistry.java?rev=399391&r1=399390&r2=399391&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BuilderRegistry.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BuilderRegistry.java Wed May  3 12:59:57 2006
@@ -19,6 +19,7 @@
 import org.apache.tuscany.model.BoundReference;
 import org.apache.tuscany.model.BoundService;
 import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.Implementation;
 import org.apache.tuscany.spi.context.CompositeContext;
 import org.apache.tuscany.spi.context.Context;
 import org.apache.tuscany.spi.wire.SourceWireFactory;
@@ -28,11 +29,13 @@
  * @version $Rev$ $Date$
  */
 public interface BuilderRegistry {
-    void register(ComponentBuilder<?> builder);
+    <I extends Implementation<?>> void register(ComponentBuilder<I> builder);
+
+    <I extends Implementation<?>> void register(Class<I> implClass, ComponentBuilder<I> builder);
 
     void register(WireBuilder builder);
 
-    Context build(CompositeContext parent, Component component);
+    <I extends Implementation<?>> Context build(CompositeContext parent, Component<I> component);
 
     Context build(CompositeContext parent, BoundService boundService);
 

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java?rev=399391&r1=399390&r2=399391&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java Wed May  3 12:59:57 2006
@@ -17,11 +17,13 @@
 package org.apache.tuscany.spi.builder;
 
 import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.Implementation;
 import org.apache.tuscany.spi.context.CompositeContext;
+import org.apache.tuscany.spi.context.Context;
 
 /**
  * @version $Rev$ $Date$
  */
-public interface ComponentBuilder<T extends Component> {
-    void build(CompositeContext parent, T component);
+public interface ComponentBuilder<I extends Implementation<?>> {
+    Context build(CompositeContext parent, Component<I> component);
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderContext.java?rev=399391&r1=399390&r2=399391&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderContext.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/loader/LoaderContext.java Wed May  3 12:59:57 2006
@@ -16,6 +16,8 @@
  */
 package org.apache.tuscany.spi.loader;
 
+import javax.xml.stream.XMLInputFactory;
+
 /**
  * Context holder that can be used during the load process to store information
  * that is not part of the logical model. This should be regarded as transient
@@ -25,21 +27,34 @@
  */
 public class LoaderContext {
     private final ClassLoader classLoader;
+    private final XMLInputFactory xmlFactory;
 
     /**
      * Constructor specifying the loader for application resources.
      *
      * @param classLoader the loader for application resources
+     * @param xmlFactory  a factory that can be used to obtain an StAX XMLStreamReader
      */
-    public LoaderContext(ClassLoader classLoader) {
+    public LoaderContext(ClassLoader classLoader, XMLInputFactory xmlFactory) {
         this.classLoader = classLoader;
+        this.xmlFactory = xmlFactory;
     }
 
     /**
      * Returns a class loader that can be used to load application resources.
+     *
      * @return a class loader that can be used to load application resources
      */
     public ClassLoader getClassLoader() {
         return classLoader;
+    }
+
+    /**
+     * Returns a factory that can be used to obtain an StAX XMLStreamReader.
+     *
+     * @return a factory that can be used to obtain an StAX XMLStreamReader
+     */
+    public XMLInputFactory getXmlFactory() {
+        return xmlFactory;
     }
 }