Author: slaws
Date: Mon Oct  6 02:15:42 2008
New Revision: 702034

URL: http://svn.apache.org/viewvc?rev=702034&view=rev
Log:
TUSCANY-2617 perform autowire processing after all targets have been processes. 
In this was explicitly specified targets will take precedence over autwires as 
described in the assembly spec.  

Added:
    
tuscany/java/sca/itest/references/src/main/java/org/apache/tuscany/sca/itest/references/BComponentWrongTargetImpl.java
   (with props)
Modified:
    
tuscany/java/sca/itest/references/src/main/resources/AutoWiredReferencesTest.composite
    
tuscany/java/sca/itest/references/src/test/java/org/apache/tuscany/sca/itest/references/AutoWiredReferenceTestCase.java
    
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java

Added: 
tuscany/java/sca/itest/references/src/main/java/org/apache/tuscany/sca/itest/references/BComponentWrongTargetImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/itest/references/src/main/java/org/apache/tuscany/sca/itest/references/BComponentWrongTargetImpl.java?rev=702034&view=auto
==============================================================================
--- 
tuscany/java/sca/itest/references/src/main/java/org/apache/tuscany/sca/itest/references/BComponentWrongTargetImpl.java
 (added)
+++ 
tuscany/java/sca/itest/references/src/main/java/org/apache/tuscany/sca/itest/references/BComponentWrongTargetImpl.java
 Mon Oct  6 02:15:42 2008
@@ -0,0 +1,39 @@
+/*
+ * 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.sca.itest.references;
+
+import org.osoa.sca.annotations.Reference;
+
+public class BComponentWrongTargetImpl implements BComponent {
+
+    protected CComponent cReference;
+
+    public BComponentWrongTargetImpl(@Reference(name = "cReference") 
CComponent cReference) {
+        this.cReference = cReference;
+    }
+
+    public String bFoo() {
+        return "BComponentWrongTarget";
+    }
+
+    public String fooC() {
+        return "B" + cReference.cFoo();
+    }
+
+}

Propchange: 
tuscany/java/sca/itest/references/src/main/java/org/apache/tuscany/sca/itest/references/BComponentWrongTargetImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/java/sca/itest/references/src/main/java/org/apache/tuscany/sca/itest/references/BComponentWrongTargetImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
tuscany/java/sca/itest/references/src/main/resources/AutoWiredReferencesTest.composite
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/itest/references/src/main/resources/AutoWiredReferencesTest.composite?rev=702034&r1=702033&r2=702034&view=diff
==============================================================================
--- 
tuscany/java/sca/itest/references/src/main/resources/AutoWiredReferencesTest.composite
 (original)
+++ 
tuscany/java/sca/itest/references/src/main/resources/AutoWiredReferencesTest.composite
 Mon Oct  6 02:15:42 2008
@@ -37,7 +37,16 @@
         <reference name="dServiceReferences" target="DComponent DComponent1" />
 
     </component>
+    
+    <component name="AComponentAutowire" autowire="true">
+        <implementation.java 
class="org.apache.tuscany.sca.itest.references.AComponentImpl" />
+        <reference name="bReference" target="BComponent" />
+    </component>    
 
+    <component name="BComponentWrongTarget">
+        <implementation.java 
class="org.apache.tuscany.sca.itest.references.BComponentWrongTargetImpl" />
+    </component>
+    
     <component name="BComponent">
         <implementation.java 
class="org.apache.tuscany.sca.itest.references.BComponentImpl" />
     </component>

Modified: 
tuscany/java/sca/itest/references/src/test/java/org/apache/tuscany/sca/itest/references/AutoWiredReferenceTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/itest/references/src/test/java/org/apache/tuscany/sca/itest/references/AutoWiredReferenceTestCase.java?rev=702034&r1=702033&r2=702034&view=diff
==============================================================================
--- 
tuscany/java/sca/itest/references/src/test/java/org/apache/tuscany/sca/itest/references/AutoWiredReferenceTestCase.java
 (original)
+++ 
tuscany/java/sca/itest/references/src/test/java/org/apache/tuscany/sca/itest/references/AutoWiredReferenceTestCase.java
 Mon Oct  6 02:15:42 2008
@@ -29,11 +29,13 @@
 public class AutoWiredReferenceTestCase {
     private static SCADomain domain;
     private static AComponent acomponent;
+    private static AComponent acomponentAutowire;
 
     @BeforeClass
     public static void init() throws Exception {
         domain = SCADomain.newInstance("AutoWiredReferencesTest.composite");
         acomponent = domain.getService(AComponent.class, "AComponent");
+        acomponentAutowire = domain.getService(AComponent.class, 
"AComponentAutowire");
     }
 
     @AfterClass
@@ -87,5 +89,14 @@
             Assert.assertTrue(true);
         }
     }
+    
+    @Test
+    public void testTargetPrecendence() {
+        try {
+            assertEquals("BComponent", acomponentAutowire.fooB());
+        } catch (Exception e) {
+            Assert.assertTrue(true);
+        }
+    }
 
 }

Modified: 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java?rev=702034&r1=702033&r2=702034&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java
 (original)
+++ 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java
 Mon Oct  6 02:15:42 2008
@@ -401,50 +401,7 @@
 
         List<Endpoint> endpoints = new ArrayList<Endpoint>();
         
-        if (componentReference.getAutowire() == Boolean.TRUE) {
-
-            // Find suitable targets in the current composite for an
-            // autowired reference
-            Multiplicity multiplicity = componentReference.getMultiplicity();
-            for (Component targetComponent : composite.getComponents()) {
-                // prevent autowire connecting to self
-                boolean skipSelf = false;
-                for (ComponentReference targetComponentReference : 
targetComponent.getReferences()) {
-                    if (componentReference == targetComponentReference){
-                        skipSelf = true;
-                    }
-                }
-                
-                if (!skipSelf){
-                    for (ComponentService targetComponentService : 
targetComponent.getServices()) {
-                        if (componentReference.getInterfaceContract() == null 
||
-                            
interfaceContractMapper.isCompatible(componentReference.getInterfaceContract(), 
targetComponentService.getInterfaceContract())) {
-                            
-                            Endpoint endpoint = 
endpointFactory.createEndpoint();
-                            endpoint.setTargetName(targetComponent.getName());
-                            endpoint.setSourceComponent(null); // TODO - fixed 
up at start
-                            
endpoint.setSourceComponentReference(componentReference);
-                            
endpoint.setInterfaceContract(componentReference.getInterfaceContract());
-                            endpoint.setTargetComponent(targetComponent);
-                            
endpoint.setTargetComponentService(targetComponentService);
-                            
endpoint.getCandidateBindings().addAll(componentReference.getBindings());
-                            endpoints.add(endpoint);
-                            
-                            if (multiplicity == Multiplicity.ZERO_ONE || 
multiplicity == Multiplicity.ONE_ONE) {
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-            
-            if (multiplicity == Multiplicity.ONE_N || multiplicity == 
Multiplicity.ONE_ONE) {
-                if (endpoints.size() == 0) {
-                    warning("NoComponentReferenceTarget", componentReference, 
componentReference.getName());
-                }
-            }
-
-        } else if (!componentReference.getTargets().isEmpty()) {
+        if (!componentReference.getTargets().isEmpty()) {
                
                // Check if the component reference does not mix the use of 
endpoints specified via 
                // binding elements with target endpoints specified via the 
target attribute
@@ -511,7 +468,8 @@
                                composite.getName().toString(), 
componentService.getName());
                 }
             }
-        } else if (componentReference.getReference() != null) {
+        } else if ((componentReference.getReference() != null) &&
+                   
(!componentReference.getReference().getTargets().isEmpty())) {
 
             // Resolve targets from the corresponding reference in the
             // componentType
@@ -573,7 +531,49 @@
                                         composite.getName().toString(), 
componentService.getName());
                 }
             }
-        } 
+        } else if (componentReference.getAutowire() == Boolean.TRUE) {
+
+            // Find suitable targets in the current composite for an
+            // autowired reference
+            Multiplicity multiplicity = componentReference.getMultiplicity();
+            for (Component targetComponent : composite.getComponents()) {
+                // prevent autowire connecting to self
+                boolean skipSelf = false;
+                for (ComponentReference targetComponentReference : 
targetComponent.getReferences()) {
+                    if (componentReference == targetComponentReference){
+                        skipSelf = true;
+                    }
+                }
+                
+                if (!skipSelf){
+                    for (ComponentService targetComponentService : 
targetComponent.getServices()) {
+                        if (componentReference.getInterfaceContract() == null 
||
+                            
interfaceContractMapper.isCompatible(componentReference.getInterfaceContract(), 
targetComponentService.getInterfaceContract())) {
+                            
+                            Endpoint endpoint = 
endpointFactory.createEndpoint();
+                            endpoint.setTargetName(targetComponent.getName());
+                            endpoint.setSourceComponent(null); // TODO - fixed 
up at start
+                            
endpoint.setSourceComponentReference(componentReference);
+                            
endpoint.setInterfaceContract(componentReference.getInterfaceContract());
+                            endpoint.setTargetComponent(targetComponent);
+                            
endpoint.setTargetComponentService(targetComponentService);
+                            
endpoint.getCandidateBindings().addAll(componentReference.getBindings());
+                            endpoints.add(endpoint);
+                            
+                            if (multiplicity == Multiplicity.ZERO_ONE || 
multiplicity == Multiplicity.ONE_ONE) {
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+            
+            if (multiplicity == Multiplicity.ONE_N || multiplicity == 
Multiplicity.ONE_ONE) {
+                if (endpoints.size() == 0) {
+                    warning("NoComponentReferenceTarget", componentReference, 
componentReference.getName());
+                }
+            }
+        }
             
                 
         // if no endpoints have found so far retrieve any target names that 
are in binding URIs


Reply via email to