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/04 00:23:08 UTC

svn commit: r399459 - in /incubator/tuscany/sandbox/jboynes/sca: core2/src/main/java/org/apache/tuscany/core/builder/ model/src/main/java/org/apache/tuscany/model/ spi/src/main/java/org/apache/tuscany/spi/builder/

Author: jboynes
Date: Wed May  3 15:23:05 2006
New Revision: 399459

URL: http://svn.apache.org/viewcvs?rev=399459&view=rev
Log:
add binding builder support to spi

Added:
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BindingBuilder.java   (with props)
Modified:
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
    incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundReference.java
    incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundService.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BuilderRegistry.java

Modified: 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=399459&r1=399458&r2=399459&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java Wed May  3 15:23:05 2006
@@ -21,10 +21,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.tuscany.model.Binding;
 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.BindingBuilder;
 import org.apache.tuscany.spi.builder.BuilderRegistry;
 import org.apache.tuscany.spi.builder.ComponentBuilder;
 import org.apache.tuscany.spi.builder.WireBuilder;
@@ -38,10 +40,10 @@
  */
 public class BuilderRegistryImpl implements BuilderRegistry {
     private final Map<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>> componentBuilders = new HashMap<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>>();
+    private final Map<Class<? extends Binding>, BindingBuilder<? extends Binding>> bindingBuilders = new HashMap<Class<? extends Binding>, BindingBuilder<? extends Binding>>();
 
     public <I extends Implementation<?>> void register(ComponentBuilder<I> builder) {
-        Class<?> aClass = builder.getClass();
-        Type[] interfaces = aClass.getGenericInterfaces();
+        Type[] interfaces = builder.getClass().getGenericInterfaces();
         for (Type type : interfaces) {
             if (! (type instanceof ParameterizedType)) {
                 continue;
@@ -61,21 +63,46 @@
         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 <B extends Binding> void register(BindingBuilder<B> builder) {
+        Type[] interfaces = builder.getClass().getGenericInterfaces();
+        for (Type type : interfaces) {
+            if (! (type instanceof ParameterizedType)) {
+                continue;
+            }
+            ParameterizedType interfaceType = (ParameterizedType) type;
+            if (!BindingBuilder.class.equals(interfaceType.getRawType())) {
+                continue;
+            }
+            Class<B> implClass = (Class<B>) interfaceType.getActualTypeArguments()[0];
+            register(implClass, builder);
+            return;
+        }
+        throw new IllegalArgumentException("builder is not generified");
+    }
+
+    public <B extends Binding> void register(Class<B> implClass, BindingBuilder<B> builder) {
+        bindingBuilders.put(implClass, builder);
     }
 
-    public Context build(CompositeContext parent, BoundReference boundReference) {
+    public <B extends Binding> Context build(CompositeContext parent, BoundService<B> boundService) {
+        Class<B> bindingClass = (Class<B>) boundService.getBinding().getClass();
+        BindingBuilder<B> bindingBuilder = (BindingBuilder<B>) bindingBuilders.get(bindingClass);
+        return bindingBuilder.build(parent, boundService);
+    }
+
+    public <B extends Binding> Context build(CompositeContext parent, BoundReference<B> boundReference) {
+        Class<B> bindingClass = (Class<B>) boundReference.getBinding().getClass();
+        BindingBuilder<B> bindingBuilder = (BindingBuilder<B>) bindingBuilders.get(bindingClass);
+        return bindingBuilder.build(parent, boundReference);
+    }
+
+    public void register(WireBuilder builder) {
         throw new UnsupportedOperationException();
     }
 

Modified: incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundReference.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundReference.java?rev=399459&r1=399458&r2=399459&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundReference.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundReference.java Wed May  3 15:23:05 2006
@@ -19,14 +19,14 @@
 /**
  * @version $Rev$ $Date$
  */
-public class BoundReference extends Reference {
-    private Binding binding;
+public class BoundReference<B extends Binding> extends Reference {
+    private B binding;
 
-    public Binding getBinding() {
+    public B getBinding() {
         return binding;
     }
 
-    public void setBinding(Binding binding) {
+    public void setBinding(B binding) {
         this.binding = binding;
     }
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundService.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundService.java?rev=399459&r1=399458&r2=399459&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundService.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/BoundService.java Wed May  3 15:23:05 2006
@@ -21,15 +21,15 @@
 /**
  * @version $Rev$ $Date$
  */
-public class BoundService extends Service {
-    private Binding binding;
+public class BoundService<B extends Binding> extends Service {
+    private B binding;
     private URI target;
 
-    public Binding getBinding() {
+    public B getBinding() {
         return binding;
     }
 
-    public void setBinding(Binding binding) {
+    public void setBinding(B binding) {
         this.binding = binding;
     }
 

Added: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BindingBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BindingBuilder.java?rev=399459&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BindingBuilder.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/BindingBuilder.java Wed May  3 15:23:05 2006
@@ -0,0 +1,31 @@
+/**
+ *
+ * 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.spi.builder;
+
+import org.apache.tuscany.model.Binding;
+import org.apache.tuscany.model.BoundService;
+import org.apache.tuscany.model.BoundReference;
+import org.apache.tuscany.spi.context.Context;
+import org.apache.tuscany.spi.context.CompositeContext;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public interface BindingBuilder<B extends Binding> {
+    Context build(CompositeContext parent, BoundService<B> boundService);
+    Context build(CompositeContext parent, BoundReference<B> boundReference);
+}

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

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

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=399459&r1=399458&r2=399459&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 15:23:05 2006
@@ -16,6 +16,7 @@
  */
 package org.apache.tuscany.spi.builder;
 
+import org.apache.tuscany.model.Binding;
 import org.apache.tuscany.model.BoundReference;
 import org.apache.tuscany.model.BoundService;
 import org.apache.tuscany.model.Component;
@@ -33,13 +34,17 @@
 
     <I extends Implementation<?>> void register(Class<I> implClass, ComponentBuilder<I> builder);
 
-    void register(WireBuilder builder);
-
     <I extends Implementation<?>> Context build(CompositeContext parent, Component<I> component);
 
-    Context build(CompositeContext parent, BoundService boundService);
+    <B extends Binding> void register(BindingBuilder<B> builder);
+
+    <B extends Binding> void register(Class<B> implClass, BindingBuilder<B> builder);
 
-    Context build(CompositeContext parent, BoundReference boundReference);
+    <B extends Binding> Context build(CompositeContext parent, BoundService<B> boundService);
+
+    <B extends Binding> Context build(CompositeContext parent, BoundReference<B> boundReference);
+
+    void register(WireBuilder builder);
 
     void connect(SourceWireFactory<?> source, TargetWireFactory<?> target);