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 2007/01/05 04:06:17 UTC

svn commit: r492881 - in /incubator/tuscany/java/sca/kernel: core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java

Author: jboynes
Date: Thu Jan  4 19:06:16 2007
New Revision: 492881

URL: http://svn.apache.org/viewvc?view=rev&rev=492881
Log:
allow autowire to resolve based on assignability rather than exact match

Modified:
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java?view=diff&rev=492881&r1=492880&r2=492881
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java Thu Jan  4 19:06:16 2007
@@ -59,6 +59,8 @@
         parent.register(component);
         InboundWire source = parent.resolveSystemAutowire(Source.class);
         assertNotNull(source);
+        InboundWire sourceBase = parent.resolveSystemAutowire(SourceBase.class);
+        assertSame(source, sourceBase);
         InboundWire source2 = parent.resolveSystemAutowire(Source2.class);
         assertSame(source.getContainer(), source2.getContainer());
         assertNull(parent.resolveSystemExternalAutowire(Source.class));
@@ -87,6 +89,8 @@
 
         InboundWire source = parent.resolveAutowire(Source.class);
         assertNotNull(source);
+        InboundWire sourceBase = parent.resolveAutowire(SourceBase.class);
+        assertSame(source, sourceBase);
         InboundWire source2 = parent.resolveAutowire(Source2.class);
         assertSame(source.getContainer(), source2.getContainer());
         assertNull(parent.resolveExternalAutowire(Source.class));
@@ -118,6 +122,8 @@
 
         InboundWire source = parent.resolveSystemExternalAutowire(Source.class);
         assertSame(serviceBinding, source.getContainer());
+        InboundWire sourceBase = parent.resolveSystemExternalAutowire(SourceBase.class);
+        assertSame(source, sourceBase);
         InboundWire source2 = parent.resolveSystemExternalAutowire(Source2.class);
         assertNull(source2);
         EasyMock.verify(serviceBinding);
@@ -148,6 +154,8 @@
 
         InboundWire source = parent.resolveExternalAutowire(Source.class);
         assertSame(serviceBinding, source.getContainer());
+        InboundWire sourceBase = parent.resolveExternalAutowire(SourceBase.class);
+        assertSame(source, sourceBase);
         InboundWire source2 = parent.resolveExternalAutowire(Source2.class);
         assertNull(source2);
         EasyMock.verify(serviceBinding);
@@ -174,6 +182,8 @@
 
         InboundWire source = parent.resolveSystemAutowire(Source.class);
         assertNotNull(source);
+        InboundWire sourceBase = parent.resolveSystemAutowire(SourceBase.class);
+        assertSame(source, sourceBase);
         EasyMock.verify(binding);
     }
 
@@ -197,6 +207,8 @@
 
         InboundWire source = parent.resolveAutowire(Source.class);
         assertNotNull(source);
+        InboundWire sourceBase = parent.resolveAutowire(SourceBase.class);
+        assertSame(source, sourceBase);
         EasyMock.verify(binding);
     }
 
@@ -206,8 +218,10 @@
         }
     }
 
-    public static interface Source {
+    public static interface SourceBase {
+    }
 
+    public static interface Source extends SourceBase {
     }
 
     public static interface Source2 {

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java?view=diff&rev=492881&r1=492880&r2=492881
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java Thu Jan  4 19:06:16 2007
@@ -28,7 +28,6 @@
 
 import org.w3c.dom.Document;
 
-import org.apache.tuscany.spi.CoreRuntimeException;
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.builder.Connector;
 import org.apache.tuscany.spi.builder.WiringException;
@@ -277,65 +276,63 @@
     }
 
     public InboundWire resolveAutowire(Class<?> instanceInterface) throws TargetResolutionException {
-        InboundWire wire = autowireInternal.get(instanceInterface);
-        if (wire != null) {
-            SCAObject parent = wire.getContainer();
-
-            if (parent instanceof AtomicComponent || parent instanceof ReferenceBinding
-                || parent instanceof ServiceBinding) {
-                return wire;
-            } else {
-                throw new IllegalTargetException("Autowire target must be a system type", parent.getName());
-            }
-        } else {
-            // resolve to parent
-            if (getParent() == null) {
-                return null;
+        // FIXME JNB make this faster and thread safe
+        for (Map.Entry<Class, InboundWire> service : autowireInternal.entrySet()) {
+            if (instanceInterface.isAssignableFrom(service.getKey())) {
+                InboundWire wire = service.getValue();
+                SCAObject parent = wire.getContainer();
+
+                if (parent instanceof AtomicComponent
+                    || parent instanceof ReferenceBinding
+                    || parent instanceof ServiceBinding) {
+                    return wire;
+                } else {
+                    throw new IllegalTargetException("Autowire target must be a system type", parent.getName());
+                }
             }
+        }
+        if (getParent() != null) {
             return getParent().resolveAutowire(instanceInterface);
         }
+        return null;
     }
 
     public InboundWire resolveSystemAutowire(Class<?> instanceInterface) throws TargetResolutionException {
-        InboundWire wire = systemAutowireInternal.get(instanceInterface);
-        if (wire != null) {
-            return wire;
-        } else {
-            // resolve to parent
-            if (getParent() != null) {
-                return getParent().resolveSystemAutowire(instanceInterface);
-            } else {
-                return null;
-            }
+        // FIXME JNB make this faster and thread safe
+        for (Map.Entry<Class, InboundWire> service : systemAutowireInternal.entrySet()) {
+            if (instanceInterface.isAssignableFrom(service.getKey())) {
+                return service.getValue();            }
+        }
+        if (getParent() != null) {
+            return getParent().resolveSystemAutowire(instanceInterface);
         }
+        return null;
     }
 
     public InboundWire resolveExternalAutowire(Class<?> instanceInterface) throws TargetResolutionException {
-        InboundWire wire = autowireExternal.get(instanceInterface);
-        if (wire != null) {
-            try {
-                return wire;
-            } catch (CoreRuntimeException e) {
-                e.addContextName(getName());
-                throw e;
+        // FIXME JNB make this faster and thread safe
+        for (Map.Entry<Class, InboundWire> service : autowireExternal.entrySet()) {
+            if (instanceInterface.isAssignableFrom(service.getKey())) {
+                return service.getValue();
             }
-        } else {
-            return null;
         }
+        if (getParent() != null) {
+            return getParent().resolveAutowire(instanceInterface);
+        }
+        return null;
     }
 
     public InboundWire resolveSystemExternalAutowire(Class<?> instanceInterface) throws TargetResolutionException {
-        InboundWire wire = systemAutowireExternal.get(instanceInterface);
-        if (wire != null) {
-            try {
-                return wire;
-            } catch (CoreRuntimeException e) {
-                e.addContextName(getName());
-                throw e;
+        // FIXME JNB make this faster and thread safe
+        for (Map.Entry<Class, InboundWire> service : systemAutowireExternal.entrySet()) {
+            if (instanceInterface.isAssignableFrom(service.getKey())) {
+                return service.getValue();
             }
-        } else {
-            return null;
         }
+        if (getParent() != null) {
+            return getParent().resolveAutowire(instanceInterface);
+        }
+        return null;
     }
 
     public void prepare() throws PrepareException {



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