You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by na...@apache.org on 2008/07/21 19:38:02 UTC

svn commit: r678491 [2/4] - in /tuscany/branches/sca-java-1.3: itest/ itest/builder/ itest/builder/src/ itest/builder/src/main/ itest/builder/src/main/java/ itest/builder/src/main/java/org/ itest/builder/src/main/java/org/apache/ itest/builder/src/main...

Added: tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario8/scenarios.wsdl
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario8/scenarios.wsdl?rev=678491&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario8/scenarios.wsdl (added)
+++ tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario8/scenarios.wsdl Mon Jul 21 10:37:59 2008
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.    
+-->
+<wsdl:definitions name="Service3Service"
+                  targetNamespace="http://scenarios"
+                  xmlns:tns="http://scenarios"
+                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+
+  <wsdl:types>
+    <xs:schema attributeFormDefault="qualified"
+               elementFormDefault="unqualified"
+               targetNamespace="http://scenarios"
+               xmlns:xs="http://www.w3.org/2001/XMLSchema">
+      <xs:element name="getGreetings2">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="arg0" nillable="true" type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="getGreetings2Response">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:schema>
+  </wsdl:types>
+
+  <wsdl:message name="getGreetings2">
+    <wsdl:part name="getGreetings2" element="tns:getGreetings2" />
+  </wsdl:message>
+
+  <wsdl:message name="getGreetings2Response">
+    <wsdl:part name="getGreetings2Response" element="tns:getGreetings2Response" />
+  </wsdl:message>
+
+  <wsdl:portType name="Service3a">
+    <wsdl:operation name="getGreetings2">
+      <wsdl:input message="tns:getGreetings2" />
+      <wsdl:output message="tns:getGreetings2Response" />
+    </wsdl:operation>
+  </wsdl:portType>
+
+</wsdl:definitions>

Added: tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java?rev=678491&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java (added)
+++ tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java Mon Jul 21 10:37:59 2008
@@ -0,0 +1,693 @@
+/*
+ * 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.builder;
+
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.xml.namespace.QName;
+import junit.framework.TestCase;
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
+
+/**
+ * Load and build some composites and inspect the results.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class BuilderTestCase extends TestCase {
+    private CustomCompositeBuilder customBuilder;
+    
+    @Override
+    protected void setUp() throws Exception {
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+    }
+
+    // Scenario 1: <binding.ws> on outer composite service CompositeA/Service1
+    public void testScenario1() throws Exception {
+        System.out.println("====>Running testScenario1");
+        customBuilder = new CustomCompositeBuilder(false);
+        customBuilder.loadContribution("scenario1.composite", "TestContribution", "src/main/resources/scenario1/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario1Results(false);
+    }
+
+    public void testScenario1NonWiring() throws Exception {
+        System.out.println("====>Running testScenario1NonWiring");
+        customBuilder = new CustomCompositeBuilder(true);
+        customBuilder.loadContribution("scenario1.composite", "TestContribution", "src/main/resources/scenario1/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario1Results(true);
+    }
+
+    private void checkScenario1Results(boolean nonWiring) {
+        Composite domainComposite = customBuilder.getDomainComposite();
+
+        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
+        if (!nonWiring) {
+            // Should create component service $promoted$.Service1 on innermost component
+            //  ComponentD, with <binding.ws> and uri="/Service1"
+            // No other services on ComponentD should have <binding.ws>
+            WebServiceBinding wsBinding = null;
+            for (ComponentService service : componentD.getServices()) {
+                WebServiceBinding wsb = service.getBinding(WebServiceBinding.class);
+                if ("$promoted$.Service1".equals(service.getName())) {
+                    wsBinding = wsb;
+                } else {
+                    assert wsb == null;
+                }
+            }
+            assert "/Service1".equals(wsBinding.getURI());
+
+            // Should create WSDL document for ComponentD/$promoted$.Service1 with endpoint uri="/Service1"
+            Definition def = wsBinding.getWSDLDocument();
+            javax.wsdl.Service svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
+            Port port = svc.getPort("Service3Port");
+            assert "/Service1".equals(TestUtils.getPortAddress(port));
+        } else {
+            // Should not create component service $promoted$.Service1 on innermost component ComponentD
+            // No component services on ComponentD should have <binding.ws>
+            for (ComponentService service : componentD.getServices()) {
+                assert !"$promoted$.Service1".equals(service.getName());
+                assert service.getBinding(WebServiceBinding.class) == null;
+            }
+        }
+
+        // No services on ComponentB should have <binding.ws>
+        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
+        for (ComponentService service : componentB.getServices()) {
+            assert service.getBinding(WebServiceBinding.class) == null;
+        }
+
+        // No services on CompositeC should have <binding.ws>
+        Composite compositeC = TestUtils.getComposite(domainComposite, new QName("http://scenario1", "CompositeC"));
+        for (Service service : compositeC.getServices()) {
+            assert service.getBinding(WebServiceBinding.class) == null;
+        }
+
+        if (nonWiring) {
+            // Should not add a WSDL document to domain composite service Service1
+            WebServiceBinding wsBinding = null;
+            for (Service service : domainComposite.getServices()) {
+                if ("Service1".equals(service.getName())) {
+                    wsBinding = service.getBinding(WebServiceBinding.class);
+                }
+            }
+            assert wsBinding.getWSDLDocument() == null;
+        }
+    }
+
+    // Scenario 2: <binding.ws> on outer component service ComponentB/Service2
+    public void testScenario2() throws Exception {
+        System.out.println("====>Running testScenario2");
+        customBuilder = new CustomCompositeBuilder(false);
+        customBuilder.loadContribution("scenario2.composite", "TestContribution", "src/main/resources/scenario2/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario2and3Results("http://scenario2", false);
+    }
+
+    public void testScenario2NonWiring() throws Exception {
+        System.out.println("====>Running testScenario2NonWiring");
+        customBuilder = new CustomCompositeBuilder(true);
+        customBuilder.loadContribution("scenario2.composite", "TestContribution", "src/main/resources/scenario2/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario2and3Results("http://scenario2", true);
+    }
+
+    private void checkScenario2and3Results(String namespace, boolean nonWiring) {
+        Composite domainComposite = customBuilder.getDomainComposite();
+
+        // Should create WSDL document for ComponentB/Service2 with endpoint uri="/ComponentB/Service2"
+        // No other services on ComponentB should have <binding.ws>
+        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
+        WebServiceBinding wsBinding = null;
+        for (ComponentService service : componentB.getServices()) {
+            WebServiceBinding wsb = service.getBinding(WebServiceBinding.class);
+            if ("Service2".equals(service.getName())) {
+                wsBinding = wsb;
+            } else {
+                assert wsb == null;
+            }
+        }
+        Definition def = wsBinding.getWSDLDocument();
+        javax.wsdl.Service svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
+        Port port = svc.getPort("Service3Port");
+        assert "/ComponentB/Service2".equals(TestUtils.getPortAddress(port));
+
+        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
+        /*
+        if (!nonWiring) {
+        */
+            // Should create component service $promoted$.ComponentB.Service2 on innermost component
+            //  ComponentD, with <binding.ws> and uri="/ComponentB/Service2"
+            wsBinding = null;
+            for (ComponentService service : componentD.getServices()) {
+                if ("$promoted$.ComponentB.Service2".equals(service.getName())) {
+                    wsBinding = service.getBinding(WebServiceBinding.class);
+                }
+            }
+            assert "/ComponentB/Service2".equals(wsBinding.getURI());
+
+            // Should create WSDL document for ComponentD/$promoted$.ComponentB.Service2 with endpoint uri="/ComponentB/Service2"
+            def = wsBinding.getWSDLDocument();
+            svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
+            port = svc.getPort("Service3Port");
+            assert "/ComponentB/Service2".equals(TestUtils.getPortAddress(port));
+        /*
+        } else {
+            // Should not create component service $promoted$.ComponentB.Service2 on innermost component ComponentD
+            for (ComponentService service : componentD.getServices()) {
+                assert !"$promoted$.ComponentB.Service2".equals(service.getName());
+            }
+        }
+        */
+
+        // Should add <binding.ws> to outer composite service CompositeA/Service1 
+        wsBinding = null;
+        for (Service service : domainComposite.getServices()) {
+            if ("Service1".equals(service.getName())) {
+                wsBinding = service.getBinding(WebServiceBinding.class);
+            }
+        }
+        assert wsBinding != null;
+        if (nonWiring) {
+            // Should not add a WSDL document to domain composite service Service1
+            assert wsBinding.getWSDLDocument() == null;
+        }
+
+        if (!nonWiring) {
+            // Should create component service $promoted$.Service1 on innermost component
+            //  ComponentD, with <binding.ws> and uri="/Service1"
+            wsBinding = null;
+            for (ComponentService service : componentD.getServices()) {
+                if ("$promoted$.Service1".equals(service.getName())) {
+                    wsBinding = service.getBinding(WebServiceBinding.class);
+                }
+            }
+            assert "/Service1".equals(wsBinding.getURI());
+
+            // Should create WSDL document for ComponentD/$promoted$.Service1 with endpoint uri="/Service1"
+            def = wsBinding.getWSDLDocument();
+            svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
+            port = svc.getPort("Service3Port");
+            assert "/Service1".equals(TestUtils.getPortAddress(port));
+        } else {
+            // Should not create component service $promoted$.Service1 on innermost component ComponentD
+            for (ComponentService service : componentD.getServices()) {
+                assert !"$promoted$.Service1".equals(service.getName());
+            }
+        }
+
+        // No services on ComponentD should have <binding.ws>, except for $promoted$.Service1
+        // and $promoted$.ComponentB.Service2  
+        for (ComponentService service : componentD.getServices()) {
+            if (!"$promoted$.Service1".equals(service.getName()) &&
+                !"$promoted$.ComponentB.Service2".equals(service.getName())) {
+                assert service.getBinding(WebServiceBinding.class) == null;
+            }
+        }
+
+        // No services on CompositeC should have <binding.ws>, except for Service2 in Scenario 3
+        Composite compositeC = TestUtils.getComposite(domainComposite, new QName(namespace, "CompositeC"));
+        for (Service service : compositeC.getServices()) {
+            if ("http://scenario3".equals(namespace) && "Service2".equals(service.getName())) {
+                assert service.getBinding(WebServiceBinding.class) != null;
+            } else {
+                assert service.getBinding(WebServiceBinding.class) == null;
+            }
+        }
+    }
+
+    // Scenario 3: <binding.ws> on inner composite service CompositeC/Service2
+    public void testScenario3() throws Exception {
+        System.out.println("====>Running testScenario3");
+        customBuilder = new CustomCompositeBuilder(false);
+        customBuilder.loadContribution("scenario3.composite", "TestContribution", "src/main/resources/scenario3/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario2and3Results("http://scenario3", false);
+    }
+
+    public void testScenario3NonWiring() throws Exception {
+        System.out.println("====>Running testScenario3NonWiring");
+        customBuilder = new CustomCompositeBuilder(true);
+        customBuilder.loadContribution("scenario3.composite", "TestContribution", "src/main/resources/scenario3/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario2and3Results("http://scenario3", true);
+    }
+
+    // Scenario 4: <binding.ws> on inner component service ComponentD/Service3
+    public void testScenario4() throws Exception {
+        System.out.println("====>Running testScenario4");
+        customBuilder = new CustomCompositeBuilder(false);
+        customBuilder.loadContribution("scenario4.composite", "TestContribution", "src/main/resources/scenario4/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario4Results(false);
+    }
+
+    public void testScenario4NonWiring() throws Exception {
+        System.out.println("====>Running testScenario4NonWiring");
+        customBuilder = new CustomCompositeBuilder(true);
+        customBuilder.loadContribution("scenario4.composite", "TestContribution", "src/main/resources/scenario4/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario4Results(true);
+    }
+
+    private void checkScenario4Results(boolean nonWiring) {
+        Composite domainComposite = customBuilder.getDomainComposite();
+
+        // Should create WSDL document for ComponentD/Service3 with endpoint uri="/ComponentD/Service3"
+        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
+        WebServiceBinding wsBinding = null;
+        for (ComponentService service : componentD.getServices()) {
+            if ("Service3".equals(service.getName())) {
+                wsBinding = service.getBinding(WebServiceBinding.class);
+            }
+        }
+        Definition def = wsBinding.getWSDLDocument();
+        javax.wsdl.Service svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
+        Port port = svc.getPort("Service3Port");
+        assert "/ComponentB/ComponentD/Service3".equals(TestUtils.getPortAddress(port));
+
+        // Should add <binding.ws> to inner composite service CompositeC/Service2 
+        // No other services on CompositeC should have <binding.ws>
+        Composite compositeC = TestUtils.getComposite(domainComposite, new QName("http://scenario4", "CompositeC"));
+        wsBinding = null;
+        for (Service service : compositeC.getServices()) {
+            WebServiceBinding wsb = service.getBinding(WebServiceBinding.class);
+            if ("Service2".equals(service.getName())) {
+                wsBinding = wsb;
+            } else {
+                assert wsb == null;
+            }
+        }
+        assert "/ComponentB/Service2".equals(wsBinding.getURI());
+
+        // Should add <binding.ws> to outer component service ComponentB/Service2 
+        // Should create WSDL document for ComponentB/Service2 with endpoint uri="/ComponentB/Service2"
+        // No other services on ComponentB should have <binding.ws>
+        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
+        wsBinding = null;
+        for (ComponentService service : componentB.getServices()) {
+            WebServiceBinding wsb = service.getBinding(WebServiceBinding.class);
+            if ("Service2".equals(service.getName())) {
+                wsBinding = wsb;
+            } else {
+                assert wsb == null;
+            }
+        }
+        assert "/ComponentB/Service2".equals(wsBinding.getURI());
+        def = wsBinding.getWSDLDocument();
+        svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
+        port = svc.getPort("Service3Port");
+        assert "/ComponentB/Service2".equals(TestUtils.getPortAddress(port));
+
+        /*
+        if (!nonWiring) {
+        */
+            // Should create component service $promoted$.ComponentB.Service2 on innermost component
+            //  ComponentD, with <binding.ws> and uri="/ComponentB/Service2"
+            wsBinding = null;
+            for (ComponentService service : componentD.getServices()) {
+                if ("$promoted$.ComponentB.Service2".equals(service.getName())) {
+                    wsBinding = service.getBinding(WebServiceBinding.class);
+                }
+            }
+            assert "/ComponentB/Service2".equals(wsBinding.getURI());
+
+            // Should create WSDL document for ComponentD/$promoted$.ComponentB.Service2 with endpoint uri="/ComponentB/Service2"
+            def = wsBinding.getWSDLDocument();
+            svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
+            port = svc.getPort("Service3Port");
+            assert "/ComponentB/Service2".equals(TestUtils.getPortAddress(port));
+        /*
+        } else {
+            // Should not create component service $promoted$.ComponentB.Service2 on innermost component ComponentD
+            for (ComponentService service : componentD.getServices()) {
+                assert !"$promoted$.ComponentB.Service2".equals(service.getName());
+            }
+        }
+        */
+
+        // Should add <binding.ws> to outer composite service CompositeA/Service1 
+        wsBinding = null;
+        for (Service service : domainComposite.getServices()) {
+            if ("Service1".equals(service.getName())) {
+                wsBinding = service.getBinding(WebServiceBinding.class);
+            }
+        }
+        assert wsBinding != null;
+        if (nonWiring) {
+            // Should not add a WSDL document to domain composite service Service1
+            assert wsBinding.getWSDLDocument() == null;
+        }
+
+        if (!nonWiring) {
+            // Should create component service $promoted$.Service1 on innermost component
+            //  ComponentD, with <binding.ws> and uri="/Service1"
+            wsBinding = null;
+            for (ComponentService service : componentD.getServices()) {
+                if ("$promoted$.Service1".equals(service.getName())) {
+                    wsBinding = service.getBinding(WebServiceBinding.class);
+                }
+            }
+            assert "/Service1".equals(wsBinding.getURI());
+
+            // Should create WSDL document for ComponentD/$promoted$.Service1 with endpoint uri="/Service1"
+            def = wsBinding.getWSDLDocument();
+            svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
+            port = svc.getPort("Service3Port");
+            assert "/Service1".equals(TestUtils.getPortAddress(port));
+        } else {
+            // Should not create component service $promoted$.Service1 on innermost component ComponentD
+            for (ComponentService service : componentD.getServices()) {
+                assert !"$promoted$.Service1".equals(service.getName());
+            }
+        }
+
+        // No services on ComponentD should have <binding.ws>, except for Service3,
+        //  $promoted$.Service1 and $promoted$.ComponentB.Service2
+        for (ComponentService service : componentD.getServices()) {
+            if (!"Service3".equals(service.getName()) &&
+                !"$promoted$.Service1".equals(service.getName()) &&
+                !"$promoted$.ComponentB.Service2".equals(service.getName())) {
+                assert service.getBinding(WebServiceBinding.class) == null;
+            }
+        }
+    }
+
+    // Scenario 5: <binding.ws> and <interface.wsdl> on outer composite reference CompositeA/reference1
+    public void testScenario5() throws Exception {
+        System.out.println("====>Running testScenario5");
+        customBuilder = new CustomCompositeBuilder(false);
+        customBuilder.loadContribution("scenario5.composite", "TestContribution", "src/main/resources/scenario5/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario5Results(false);
+    }
+
+    public void testScenario5NonWiring() throws Exception {
+        System.out.println("====>Running testScenario5NonWiring");
+        customBuilder = new CustomCompositeBuilder(true);
+        customBuilder.loadContribution("scenario5.composite", "TestContribution", "src/main/resources/scenario5/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario5Results(true);
+    }
+
+    private void checkScenario5Results(boolean nonWiring) {
+        Composite domainComposite = customBuilder.getDomainComposite();
+
+        // Should not add <binding.ws> to any outer component references 
+        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
+        for (ComponentReference reference : componentB.getReferences()) {
+            assert reference.getBinding(WebServiceBinding.class) == null;
+        }
+
+        Definition def;
+        javax.wsdl.Service svc;
+        Port port;
+        WebServiceBinding wsBinding;
+        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
+        if (!nonWiring) {
+            // Should add <binding.ws> to inner component reference ComponentD/reference3 with uri="http://foo.com/bar" 
+            // Should set <interface.wsdl> on inner component reference ComponentD/reference3 
+            wsBinding = null;
+            for (ComponentReference reference : componentD.getReferences()) {
+                if ("reference3".equals(reference.getName())) {
+                    wsBinding = reference.getBinding(WebServiceBinding.class);
+                    assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
+                }
+            }
+            assert "http://foo.com/bar".equals(wsBinding.getURI());
+
+            // Should create WSDL document for ComponentD/reference3 with endpoint uri="http://foo.com/bar"
+            def = wsBinding.getWSDLDocument();
+            svc = def.getService(new QName("http://scenarios/ComponentD/reference3", "Service3aService")); 
+            port = svc.getPort("Service3aPort");
+            assert "http://foo.com/bar".equals(TestUtils.getPortAddress(port));
+        } else {
+            // Should not add <binding.ws> to any inner component references 
+            for (ComponentReference reference : componentD.getReferences()) {
+                assert reference.getBinding(WebServiceBinding.class) == null;
+            }
+        }
+
+        // Should not add <binding.ws> or <interface.wsdl> to inner composite reference CompositeC/reference2 
+        Composite compositeC = TestUtils.getComposite(domainComposite, new QName("http://scenario5", "CompositeC"));
+        for (Reference reference : compositeC.getReferences()) {
+            assert reference.getBinding(WebServiceBinding.class) == null;
+            assert reference.getInterfaceContract() instanceof JavaInterfaceContract;
+        }
+    }
+
+    // Scenario 6: <binding.ws> and <interface.wsdl> on outer component reference ComponentB/reference2
+    public void testScenario6() throws Exception {
+        System.out.println("====>Running testScenario6");
+        customBuilder = new CustomCompositeBuilder(false);
+        customBuilder.loadContribution("scenario6.composite", "TestContribution", "src/main/resources/scenario6/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario6and7Results("http://scenario6", false);
+    }
+
+    public void testScenario6NonWiring() throws Exception {
+        System.out.println("====>Running testScenario6NonWiring");
+        customBuilder = new CustomCompositeBuilder(true);
+        customBuilder.loadContribution("scenario6.composite", "TestContribution", "src/main/resources/scenario6/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario6and7Results("http://scenario6", true);
+    }
+
+    private void checkScenario6and7Results(String namespace, boolean nonWiring) {
+        Composite domainComposite = customBuilder.getDomainComposite();
+
+        // Should remove target= on ComponentB/reference2 (for Scenario 6) or
+        //  CompositeC/reference2 (for Scenario 7), and add uri="http://foo.com/bar"
+        //  to the <binding.ws> element on ComponentB/reference2
+        // For nonWiring, ComponentB/reference2 should have target=
+        //  and no uri= should be added
+        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
+        WebServiceBinding wsBinding = null;
+        for (ComponentReference reference : componentB.getReferences()) {
+            if ("reference2".equals(reference.getName())) {
+                if (!nonWiring) {
+                    assert reference.getTargets().size() == 0;
+                } else {
+                    assert reference.getTargets().size() == 1;
+                }
+                wsBinding = reference.getBinding(WebServiceBinding.class);
+            }
+        }
+        if (!nonWiring) {
+            assert "http://foo.com/bar".equals(wsBinding.getURI());
+        } else {
+            assert wsBinding.getURI() == null;
+        }
+
+        Definition def;
+        javax.wsdl.Service svc;
+        Port port;
+        if (!nonWiring) {
+            // Should create WSDL document for ComponentB/reference2 with endpoint uri="http://foo.com/bar"
+            def = wsBinding.getWSDLDocument();
+            svc = def.getService(new QName("http://scenarios/ComponentB/reference2", "Service3aService")); 
+            port = svc.getPort("Service3aPort");
+            assert "http://foo.com/bar".equals(TestUtils.getPortAddress(port));
+        }
+
+        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
+        if (!nonWiring) {
+            // Should add <binding.ws> to inner component reference ComponentD/reference3 with uri="http://foo.com/bar" 
+            // Should set <interface.wsdl> on inner component reference ComponentD/reference3 
+            wsBinding = null;
+            for (ComponentReference reference : componentD.getReferences()) {
+                if ("reference3".equals(reference.getName())) {
+                    wsBinding = reference.getBinding(WebServiceBinding.class);
+                    assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
+                }
+            }
+            assert "http://foo.com/bar".equals(wsBinding.getURI());
+
+            // Should create WSDL document for ComponentD/reference3 with endpoint uri="http://foo.com/bar"
+            def = wsBinding.getWSDLDocument();
+            svc = def.getService(new QName("http://scenarios/ComponentB/reference2", "Service3aService")); 
+            port = svc.getPort("Service3aPort");
+            assert "http://foo.com/bar".equals(TestUtils.getPortAddress(port));
+        } else {
+            // Should not add <binding.ws> to any inner component references 
+            for (ComponentReference reference : componentD.getReferences()) {
+                assert reference.getBinding(WebServiceBinding.class) == null;
+            }
+        }
+
+        // No references on CompositeC should have <binding.ws> or <interface.wsdl>, except for
+        //  reference2 in Scenario 7
+        Composite compositeC = TestUtils.getComposite(domainComposite, new QName(namespace, "CompositeC"));
+        for (Reference reference : compositeC.getReferences()) {
+            if ("http://scenario7".equals(namespace) && "reference2".equals(reference.getName())) {
+                assert reference.getBinding(WebServiceBinding.class)!= null;
+                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
+            } else {
+                assert reference.getBinding(WebServiceBinding.class) == null;
+                assert reference.getInterfaceContract() instanceof JavaInterfaceContract;
+            }
+        }
+
+        // Should add <binding.ws> and <interface.wsdl> to outer composite reference CompositeA/reference1 
+        wsBinding = null;
+        for (Reference reference : domainComposite.getReferences()) {
+            if ("reference1".equals(reference.getName())) {
+                wsBinding = reference.getBinding(WebServiceBinding.class);
+                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
+            }
+        }
+        assert wsBinding.getURI() == null;
+
+        // Should not add a WSDL document to domain composite reference reference1
+        assert wsBinding.getWSDLDocument() == null;
+    }
+
+    // Scenario 7: <binding.ws> and <interface.wsdl> on inner composite reference CompositeC/reference2
+    public void testScenario7() throws Exception {
+        System.out.println("====>Running testScenario7");
+        customBuilder = new CustomCompositeBuilder(false);
+        customBuilder.loadContribution("scenario7.composite", "TestContribution", "src/main/resources/scenario7/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario6and7Results("http://scenario7", false);
+    }
+
+    public void testScenario7NonWiring() throws Exception {
+        System.out.println("====>Running testScenario7NonWiring");
+        customBuilder = new CustomCompositeBuilder(true);
+        customBuilder.loadContribution("scenario7.composite", "TestContribution", "src/main/resources/scenario7/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario6and7Results("http://scenario7", true);
+    }
+
+    // Scenario 8: <binding.ws> and <interface.wsdl> on inner component reference ComponentD/reference3
+    public void testScenario8() throws Exception {
+        System.out.println("====>Running testScenario8");
+        customBuilder = new CustomCompositeBuilder(false);
+        customBuilder.loadContribution("scenario8.composite", "TestContribution", "src/main/resources/scenario8/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario8Results(false);
+    }
+
+    public void testScenario8NonWiring() throws Exception {
+        System.out.println("====>Running testScenario8NonWiring");
+        customBuilder = new CustomCompositeBuilder(true);
+        customBuilder.loadContribution("scenario8.composite", "TestContribution", "src/main/resources/scenario8/");
+        //TestUtils.printResults(customBuilder);
+        TestUtils.checkProblems(customBuilder);
+        checkScenario8Results(true);
+    }
+
+    private void checkScenario8Results(boolean nonWiring) {
+        Composite domainComposite = customBuilder.getDomainComposite();
+
+        // Should replace target= on ComponentD/reference3 by uri="http://foo.com/bar" on <binding.ws>
+        // For nonWiring, the original target= is preserved and there is no uri=
+        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
+        WebServiceBinding wsBinding = null;
+        for (ComponentReference reference : componentD.getReferences()) {
+            if ("reference3".equals(reference.getName())) {
+                if (!nonWiring) {
+                    assert reference.getTargets().size() == 0;
+                } else {
+                    assert reference.getTargets().size() == 1;
+                }
+                wsBinding = reference.getBinding(WebServiceBinding.class);
+            }
+        }
+        if (!nonWiring) {
+            assert "http://foo.com/bar".equals(wsBinding.getURI());
+        } else {
+            assert wsBinding.getURI() == null;
+        }
+
+        Definition def;
+        javax.wsdl.Service svc;
+        Port port;
+        if (!nonWiring) {
+            // Should create WSDL document for ComponentD/reference3 with endpoint uri="http://foo.com/bar"
+            def = wsBinding.getWSDLDocument();
+            svc = def.getService(new QName("http://scenarios/ComponentD/reference3", "Service3aService")); 
+            port = svc.getPort("Service3aPort");
+            assert "http://foo.com/bar".equals(TestUtils.getPortAddress(port));
+        }
+
+        // Should add <binding.ws> and <interface.wsdl> to inner composite reference CompositeC/reference2 
+        Composite compositeC = TestUtils.getComposite(domainComposite, new QName("http://scenario8", "CompositeC"));
+        wsBinding = null;
+        for (Reference reference : compositeC.getReferences()) {
+            if ("reference2".equals(reference.getName())) {
+                wsBinding = reference.getBinding(WebServiceBinding.class);
+                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
+            }
+        }
+        assert wsBinding.getURI() == null;
+
+        // Should add <binding.ws> and <interface.wsdl> to outer component reference ComponentB/reference2 
+        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
+        wsBinding = null;
+        for (ComponentReference reference : componentB.getReferences()) {
+            if ("reference2".equals(reference.getName())) {
+                wsBinding = reference.getBinding(WebServiceBinding.class);
+                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
+            }
+        }
+        assert wsBinding.getURI() == null;
+
+        // Should add <binding.ws> and <interface.wsdl> to outer composite reference CompositeA/reference1 
+        wsBinding = null;
+        for (Reference reference : domainComposite.getReferences()) {
+            if ("reference1".equals(reference.getName())) {
+                wsBinding = reference.getBinding(WebServiceBinding.class);
+                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
+            }
+        }
+        assert wsBinding.getURI() == null;
+
+        // Should not add a WSDL document to domain composite reference reference1
+        assert wsBinding.getWSDLDocument() == null;
+    }
+
+}

Added: tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/CompositeBuilderNonWiringImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/CompositeBuilderNonWiringImpl.java?rev=678491&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/CompositeBuilderNonWiringImpl.java (added)
+++ tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/CompositeBuilderNonWiringImpl.java Mon Jul 21 10:37:59 2008
@@ -0,0 +1,176 @@
+/*
+ * 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.builder;
+
+import java.util.logging.Logger;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.DefaultEndpointFactory;
+import org.apache.tuscany.sca.assembly.EndpointFactory;
+import org.apache.tuscany.sca.assembly.SCABindingFactory;
+import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
+import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.definitions.SCADefinitions;
+import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
+
+/**
+ * Test version of org.apache.tuscany.sca.assembly.builder.impl.builder.CompositeBuilderImpl
+ *
+ * This class should be identical to CompositeBuilderImpl except for omitting the
+ * following builders:
+ *  componentWireBuilder
+ *  compositeReferenceWireBuilder
+ *  compositePromotedServiceBuilder
+ * It omits the component wiring step and the special processing that's performed
+ * for composite service and reference promotion.
+ * 
+ * @version $Rev: 674139 $ $Date: 2008-07-05 00:20:36 +0100 (Sat, 05 Jul 2008) $
+ */
+public class CompositeBuilderNonWiringImpl implements CompositeBuilder {
+    private static final Logger logger = Logger.getLogger(CompositeBuilderNonWiringImpl.class.getName());
+    private CompositeBuilder compositeIncludeBuilder;
+  //private CompositeBuilder componentReferenceWireBuilder;
+  //private CompositeBuilder componentReferencePromotionWireBuilder;
+  //private CompositeBuilder compositeReferenceWireBuilder;
+    private CompositeBuilder compositeCloneBuilder;
+    private CompositeBuilder componentConfigurationBuilder;
+    private CompositeBuilder compositeServiceConfigurationBuilder;
+    private CompositeBuilder compositeReferenceConfigurationBuilder;
+    private CompositeBuilder compositeBindingURIBuilder;
+    private CompositeBuilder componentServicePromotionBuilder;
+  //private CompositeBuilder compositeServicePromotionBuilder;
+    private CompositeBuilder compositePromotionBuilder;
+    private CompositeBuilder compositePolicyBuilder;
+    private CompositeBuilder componentServiceBindingBuilder;
+    private CompositeBuilder componentReferenceBindingBuilder;
+    
+    /**
+     * Constructs a new composite builder.
+     * 
+     * @param assemblyFactory
+     * @param scaBindingFactory
+     * @param intentAttachPointTypeFactory
+     * @param interfaceContractMapper
+     * @param monitor
+     */
+    public CompositeBuilderNonWiringImpl(AssemblyFactory assemblyFactory,
+                                SCABindingFactory scaBindingFactory,
+                                IntentAttachPointTypeFactory  intentAttachPointTypeFactory,
+                                InterfaceContractMapper interfaceContractMapper,
+                                Monitor monitor) {
+        this(assemblyFactory, null, scaBindingFactory,  intentAttachPointTypeFactory, interfaceContractMapper, null, monitor);
+    }
+    
+    /**
+     * Constructs a new composite builder.
+     * 
+     * @param assemblyFactory
+     * @param scaBindingFactory
+     * @param endpointFactory
+     * @param intentAttachPointTypeFactory
+     * @param interfaceContractMapper
+     * @param policyDefinitions
+     * @param monitor
+     */
+    public CompositeBuilderNonWiringImpl(AssemblyFactory assemblyFactory,
+                                EndpointFactory endpointFactory,
+                                SCABindingFactory scaBindingFactory,
+                                IntentAttachPointTypeFactory  intentAttachPointTypeFactory,
+                                InterfaceContractMapper interfaceContractMapper,
+                                SCADefinitions policyDefinitions,
+                                Monitor monitor) {
+        
+        if (endpointFactory == null){
+            endpointFactory = new DefaultEndpointFactory();
+        }       
+        
+        compositeIncludeBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositeIncludeBuilderImpl(monitor); 
+      //componentReferenceWireBuilder = new org.apache.tuscany.sca.assembly.builder.impl.ComponentReferenceWireBuilderImpl(assemblyFactory, endpointFactory, interfaceContractMapper, monitor);
+      //componentReferencePromotionWireBuilder = new org.apache.tuscany.sca.assembly.builder.impl.ComponentReferencePromotionWireBuilderImpl(assemblyFactory, monitor);
+      //compositeReferenceWireBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositeReferenceWireBuilderImpl(assemblyFactory, monitor);
+        compositeCloneBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositeCloneBuilderImpl(monitor);
+        componentConfigurationBuilder = new org.apache.tuscany.sca.assembly.builder.impl.ComponentConfigurationBuilderImpl(assemblyFactory, scaBindingFactory, interfaceContractMapper, policyDefinitions, monitor);
+        compositeServiceConfigurationBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositeServiceConfigurationBuilderImpl(assemblyFactory);
+        compositeReferenceConfigurationBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositeReferenceConfigurationBuilderImpl(assemblyFactory);
+        compositeBindingURIBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositeBindingURIBuilderImpl(assemblyFactory, scaBindingFactory, interfaceContractMapper, policyDefinitions, monitor);
+        componentServicePromotionBuilder = new org.apache.tuscany.sca.assembly.builder.impl.ComponentServicePromotionBuilderImpl(assemblyFactory);
+      //compositeServicePromotionBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositeServicePromotionBuilderImpl(assemblyFactory);
+        compositePromotionBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositePromotionBuilderImpl(assemblyFactory, endpointFactory, interfaceContractMapper, monitor);
+        compositePolicyBuilder = new org.apache.tuscany.sca.assembly.builder.impl.CompositePolicyBuilderImpl(assemblyFactory, endpointFactory, interfaceContractMapper, monitor);
+        componentServiceBindingBuilder = new org.apache.tuscany.sca.assembly.builder.impl.ComponentServiceBindingBuilderImpl(monitor);
+        componentReferenceBindingBuilder = new org.apache.tuscany.sca.assembly.builder.impl.ComponentReferenceBindingBuilderImpl(monitor);
+    }
+
+    public void build(Composite composite) throws CompositeBuilderException {
+
+        // Collect and fuse includes
+        compositeIncludeBuilder.build(composite);
+
+        // Expand nested composites
+        compositeCloneBuilder.build(composite);
+
+        // Configure all components
+        componentConfigurationBuilder.build(composite);
+
+        // Connect composite services/references to promoted services/references
+        compositePromotionBuilder.build(composite);
+        
+        // Compute the policies across the model hierarchy
+        compositePolicyBuilder.build(composite);
+        
+        // Configure composite services
+        compositeServiceConfigurationBuilder.build(composite);
+        
+        // Configure composite references
+        compositeReferenceConfigurationBuilder.build(composite);
+
+        // Configure binding URIs
+        compositeBindingURIBuilder.build(composite);
+
+        // Create promoted component services
+        componentServicePromotionBuilder.build(composite);
+
+        // Create promoted composite services
+//      compositeServicePromotionBuilder.build(composite);
+
+        // Build component service binding-related information
+        componentServiceBindingBuilder.build(composite);
+        
+        // Wire the components
+//      componentReferenceWireBuilder.build(composite);
+
+        // Wire the promoted component references
+//      componentReferencePromotionWireBuilder.build(composite);
+
+        // Wire the composite references
+//      compositeReferenceWireBuilder.build(composite);
+
+        // Build component reference binding-related information
+        componentReferenceBindingBuilder.build(composite);
+        
+        // Fuse nested composites
+        //FIXME do this later
+        //cloneBuilder.fuseCompositeImplementations(composite);
+    }
+
+}

Added: tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/CustomCompositeBuilder.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/CustomCompositeBuilder.java?rev=678491&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/CustomCompositeBuilder.java (added)
+++ tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/CustomCompositeBuilder.java Mon Jul 21 10:37:59 2008
@@ -0,0 +1,210 @@
+/*
+ * 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.builder;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.SCABindingFactory;
+import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
+import org.apache.tuscany.sca.assembly.builder.impl.CompositeBuilderImpl;
+import org.apache.tuscany.sca.assembly.xml.Constants;
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ModuleActivator;
+import org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.definitions.SCADefinitions;
+import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.MonitorFactory;
+import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
+import org.apache.tuscany.sca.workspace.Workspace;
+import org.apache.tuscany.sca.workspace.WorkspaceFactory;
+import org.apache.tuscany.sca.workspace.builder.ContributionDependencyBuilder;
+import org.apache.tuscany.sca.workspace.builder.impl.ContributionDependencyBuilderImpl;
+
+public class CustomCompositeBuilder {
+    private URLArtifactProcessor<Contribution> contributionProcessor;
+    private ModelResolverExtensionPoint modelResolvers;
+    private ModelFactoryExtensionPoint modelFactories;
+    private WorkspaceFactory workspaceFactory;
+    private AssemblyFactory assemblyFactory;
+    private XMLOutputFactory outputFactory;
+    private StAXArtifactProcessor<Object> xmlProcessor; 
+    private ContributionDependencyBuilder contributionDependencyBuilder;
+    private CompositeBuilder domainCompositeBuilder;
+    private static Workspace workspace;
+    private List<SCADefinitions> policyDefinitions;
+    private Monitor monitor;
+    private Composite domainComposite;
+    private boolean nonWiring;
+
+    protected CustomCompositeBuilder(boolean nonWiring) {
+        this.nonWiring = nonWiring;
+    }
+
+    private void init() {
+        
+        // Create extension point registry 
+        ExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
+        
+        // Create a monitor
+        UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class);
+        MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+        monitor = monitorFactory.createMonitor();
+        
+        // Initialize the Tuscany module activators
+        ModuleActivatorExtensionPoint moduleActivators = extensionPoints.getExtensionPoint(ModuleActivatorExtensionPoint.class);
+        for (ModuleActivator activator : moduleActivators.getModuleActivators()) {
+            activator.start(extensionPoints);
+        }
+        
+        // Get XML input/output factories
+        modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
+        XMLInputFactory inputFactory = modelFactories.getFactory(XMLInputFactory.class);
+        outputFactory = modelFactories.getFactory(XMLOutputFactory.class);       
+        
+        // Get contribution workspace and assembly model factories
+        workspaceFactory = modelFactories.getFactory(WorkspaceFactory.class); 
+        assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+        
+        // Create XML artifact processors
+        StAXArtifactProcessorExtensionPoint xmlProcessorExtensions = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        xmlProcessor = new ExtensibleStAXArtifactProcessor(xmlProcessorExtensions, inputFactory, outputFactory, monitor);
+        
+        // Create contribution content processor
+        URLArtifactProcessorExtensionPoint docProcessorExtensions = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+        contributionProcessor = docProcessorExtensions.getProcessor(Contribution.class);
+        
+        // Get the model resolvers
+        modelResolvers = extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class);
+        
+        // Create a contribution dependency builder
+        contributionDependencyBuilder = new ContributionDependencyBuilderImpl(monitor);
+        
+        // Create a composite builder
+        SCABindingFactory scaBindingFactory = modelFactories.getFactory(SCABindingFactory.class);
+        IntentAttachPointTypeFactory attachPointTypeFactory = modelFactories.getFactory(IntentAttachPointTypeFactory.class);
+        InterfaceContractMapper contractMapper = utilities.getUtility(InterfaceContractMapper.class);
+        if (nonWiring) {
+            domainCompositeBuilder = new CompositeBuilderNonWiringImpl(assemblyFactory, scaBindingFactory, attachPointTypeFactory, contractMapper, monitor);
+        } else {
+            domainCompositeBuilder = new CompositeBuilderImpl(assemblyFactory, scaBindingFactory, attachPointTypeFactory, contractMapper, monitor);
+        }
+    }
+    
+    public void loadContribution(String compositeURL, String sourceURI, String sourceURL) throws Exception {
+        init();
+
+        // Create workspace model
+        workspace = workspaceFactory.createWorkspace();
+        workspace.setModelResolver(new ExtensibleModelResolver(workspace, modelResolvers, modelFactories));
+
+        // Read the test contribution
+        URI artifactURI = URI.create(sourceURI);
+        URL artifactURL = new File(sourceURL).toURI().toURL();
+        URL contributionURL = new File(compositeURL).toURI().toURL();
+        Contribution testContribution = contributionProcessor.read(contributionURL, artifactURI, artifactURL);                 
+        workspace.getContributions().add(testContribution);
+        
+        // Build the contribution dependencies
+        Map<Contribution, List<Contribution>> contributionDependencies = new HashMap<Contribution, List<Contribution>>();
+        Set<Contribution> resolved = new HashSet<Contribution>();
+        for (Contribution contribution: workspace.getContributions()) {
+            List<Contribution> dependencies = contributionDependencyBuilder.buildContributionDependencies(contribution, workspace);
+            
+            // Resolve contributions
+            for (Contribution dependency: dependencies) {
+                if (!resolved.contains(dependency)) {
+                    resolved.add(dependency);
+                    contributionProcessor.resolve(dependency, workspace.getModelResolver());                                       
+                }
+            }
+            
+            contributionDependencies.put(contribution, dependencies);
+        }
+        
+        // Create a composite model for the domain
+        domainComposite = assemblyFactory.createComposite();
+        domainComposite.setName(new QName(Constants.SCA10_NS, "domain"));
+        
+        // Add all deployables to it, normally the domain administrator would select
+        // the deployables to include
+        domainComposite.getIncludes().addAll(workspace.getDeployables());
+        
+        // Build the domain composite and wire the components included in it
+        domainCompositeBuilder.build(domainComposite);
+    }
+    
+    /**
+     * Returns the delegating model processor.
+     * @return the delegating model processor
+     */
+    public StAXArtifactProcessor<Object> getModelProcessor() {
+        return xmlProcessor;
+    }
+    
+    /**
+     * Returns the XML output factory.
+     * @return the XML output factory
+     */
+    public XMLOutputFactory getOutputFactory() {
+        return outputFactory;
+    }
+    
+    /**
+     * Returns the domain composite.
+     * @return the domain composite model object
+     */
+    public Composite getDomainComposite() {
+        return domainComposite;
+    }
+    
+    /**
+     * Returns the monitor.
+     * @return the monitor instance
+     */
+    public Monitor getMonitor() {
+        return monitor;
+    }
+
+}

Added: tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/TestUtils.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/TestUtils.java?rev=678491&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/TestUtils.java (added)
+++ tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/TestUtils.java Mon Jul 21 10:37:59 2008
@@ -0,0 +1,203 @@
+/*
+ * 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.builder;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.soap.SOAPAddress;
+import javax.wsdl.extensions.soap12.SOAP12Address;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLWriter;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.stream.XMLStreamWriter;
+import junit.framework.TestCase;
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.Implementation;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.Problem;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.XMLSerializer;
+import org.w3c.dom.Document;
+
+/**
+ * Static utility methods for use by test cases.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class TestUtils {
+
+    protected static void checkProblems(CustomCompositeBuilder customBuilder) throws Exception {
+        boolean problems = false;
+        for (Problem problem : customBuilder.getMonitor().getProblems()) {
+            if (problem.getCause() != null) {
+                problem.getCause().printStackTrace();
+            }
+            problems = true;
+        }
+        assert !problems;
+    }
+
+    protected static String getPortAddress(Port port) {
+        Object ext = port.getExtensibilityElements().get(0);
+        if (ext instanceof SOAPAddress) {
+            return ((SOAPAddress)ext).getLocationURI();
+        }
+        if (ext instanceof SOAP12Address) {
+            return ((SOAP12Address)ext).getLocationURI();
+        }
+        return null;
+    }
+
+    protected static Component getComponent(Composite composite, String name) {
+        for (Component component : composite.getComponents()) {
+            if (name.equals(component.getName())) {
+                return component;
+            }
+            // process implementation composites recursively
+            Implementation impl = component.getImplementation();
+            if (impl instanceof Composite) {
+                Component comp = getComponent((Composite)impl, name);
+                if (comp != null) {
+                    return comp;
+                }
+            }
+        }
+        return null;
+    }
+
+    protected static Composite getComposite(Composite composite, QName name) {
+        if (name.equals(composite.getName())) {
+            return composite;
+        }
+        for (Component component : composite.getComponents()) {
+            // process implementation composites recursively
+            Implementation impl = component.getImplementation();
+            if (impl instanceof Composite) {
+                Composite comp = getComposite((Composite)impl, name);
+                if (comp != null) {
+                    return comp;
+                }
+            }
+        }
+        return null;
+    }
+
+    protected static void printResults(CustomCompositeBuilder customBuilder) throws Exception {
+        for (Problem problem : customBuilder.getMonitor().getProblems()) {
+            if (problem.getCause() != null) {
+                problem.getCause().printStackTrace();
+            }
+        }
+        Composite domainComposite = customBuilder.getDomainComposite();
+        printComposite(domainComposite, customBuilder);
+    }
+
+    private static void printComposite(Composite composite, CustomCompositeBuilder customBuilder) throws Exception {
+        // process implementation composites recursively
+        for (Component component : composite.getComponents()) {
+            Implementation implementation = component.getImplementation();
+            if (implementation instanceof Composite) {
+                printComposite((Composite)implementation, customBuilder);
+            }
+        }
+
+        // write out the SCDL
+        writeSCDL(composite, customBuilder);
+
+        // find all the component service and reference bindings     
+        for (Component component : composite.getComponents()) {
+            for (ComponentService componentService : component.getServices()) {
+                for (Binding binding : componentService.getBindings()) {
+                    if (binding instanceof WebServiceBinding) {
+                        writeWSDL(component, componentService, ((WebServiceBinding)binding).getWSDLDocument());
+                    }
+                }
+            }
+            for (ComponentReference componentReference : component.getReferences()) {
+                for (Binding binding : componentReference.getBindings()) {
+                    if (binding instanceof WebServiceBinding) {
+                        writeWSDL(component, componentReference, ((WebServiceBinding)binding).getWSDLDocument());
+                    }
+                }
+            }
+        }
+
+        // find all the composite service and reference bindings     
+        for (Service service : composite.getServices()) {
+            for (Binding binding : service.getBindings()) {
+                if (binding instanceof WebServiceBinding) {
+                    writeWSDL(null, service, ((WebServiceBinding)binding).getWSDLDocument());
+                }
+            }
+        }
+        for (Reference reference : composite.getReferences()) {
+            for (Binding binding : reference.getBindings()) {
+                if (binding instanceof WebServiceBinding) {
+                    writeWSDL(null, reference, ((WebServiceBinding)binding).getWSDLDocument());
+                }
+            }
+        }
+    }
+
+    private static void writeSCDL(Composite composite, CustomCompositeBuilder customBuilder) throws Exception {
+        // Print out a composite
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        XMLStreamWriter writer = customBuilder.getOutputFactory().createXMLStreamWriter(bos);
+        customBuilder.getModelProcessor().write(composite, writer);
+        
+        // Parse and write again to pretty format it
+        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+        Document document = documentBuilder.parse(new ByteArrayInputStream(bos.toByteArray()));
+        OutputFormat format = new OutputFormat();
+        format.setIndenting(true);
+        format.setIndent(2);
+        XMLSerializer serializer = new XMLSerializer(System.out, format);
+        System.out.println("-->Runtime SCDL model for composite " + composite.getName());
+        serializer.serialize(document);
+    }
+
+    private static void writeWSDL(Component component, Contract contract, Definition definition) {
+        if (definition == null) {
+            System.out.println("-->No generated WSDL for " + (component != null ? component.getName() : "") + "/" + contract.getName());
+        } else {
+            try {
+                System.out.println("-->Generated WSDL for " + (component != null ? component.getName() : "") + "/" + contract.getName());
+                WSDLWriter writer =  WSDLFactory.newInstance().newWSDLWriter();
+                writer.writeWSDL(definition, System.out);
+            } catch (WSDLException e) {
+                // ignore
+            }
+        }
+    }
+
+}

Modified: tuscany/branches/sca-java-1.3/itest/policy/src/main/resources/definitions.xml
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/policy/src/main/resources/definitions.xml?rev=678491&r1=678490&r2=678491&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/policy/src/main/resources/definitions.xml (original)
+++ tuscany/branches/sca-java-1.3/itest/policy/src/main/resources/definitions.xml Mon Jul 21 10:37:59 2008
@@ -45,6 +45,7 @@
 
     <sca:intent name="TestIntent_1.Qualifier_1" />
 
+    <sca:intent name="TestIntent_4.Qualifier_1" />
 
 
     <!-- PolicySets -->

Modified: tuscany/branches/sca-java-1.3/itest/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/pom.xml?rev=678491&r1=678490&r2=678491&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/pom.xml (original)
+++ tuscany/branches/sca-java-1.3/itest/pom.xml Mon Jul 21 10:37:59 2008
@@ -59,6 +59,7 @@
             </activation>
             <modules>
                 <module>bpel</module>
+                <module>builder</module>
                 <module>callablereferences</module>
                 <module>callablereferences-ws</module>
                 <module>callback-api</module>

Modified: tuscany/branches/sca-java-1.3/itest/validation/src/main/resources/policy/xml/UnableToMapPolicies/definitions.xml
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/validation/src/main/resources/policy/xml/UnableToMapPolicies/definitions.xml?rev=678491&r1=678490&r2=678491&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/validation/src/main/resources/policy/xml/UnableToMapPolicies/definitions.xml (original)
+++ tuscany/branches/sca-java-1.3/itest/validation/src/main/resources/policy/xml/UnableToMapPolicies/definitions.xml Mon Jul 21 10:37:59 2008
@@ -19,6 +19,7 @@
 -->
 <definitions xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0"
     xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+    xmlns:test="http://tuscany.apache.org/xmlns/sca/1.0"
     xmlns:calc="http://calculator">
     
     <!-- Extension Types Metadata -->
@@ -46,7 +47,7 @@
  
   <intent name="TestIntentTwo" 
  			 constrains="sca:binding"
- 			 requires="TestIntentOne">
+ 			 requires="test:TestIntentOne">
  			 <description>
  			 	Protect messages from unauthorized reading or modification
  			 </description>
@@ -137,7 +138,7 @@
 
 <policySet name="ConfidentialityPolicies"
  provides="test:confidentiality"
- bindings="binding.ws"
+ appliesTo="binding.ws"
  xmlns="http://www.osoa.org/xmlns/sca/1.0"
     xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
     <intentMap provides="test:confidentiality"  default="transport">

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Reference.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Reference.java?rev=678491&r1=678490&r2=678491&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Reference.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Reference.java Mon Jul 21 10:37:59 2008
@@ -47,6 +47,24 @@
     void setWiredByImpl(boolean wiredByImpl);
 
     /**
+     * Returns a boolean value, "false" by default, which indicates whether
+     * the configuration of this reference is a promotion override for
+     * another more deeply nested reference.
+     * 
+     * @return true if the reference is a promotion override
+     */
+    boolean isPromotionOverride();
+
+    /**
+     * Sets a boolean value, "false" by default, which indicates whether
+     * the configuration of this reference is a promotion override for
+     * another more deeply nested reference.
+     * 
+     * @param promotionOverride whether the reference is a promotion override
+     */
+    void setPromotionOverride(boolean promotionOverride);
+
+    /**
      * Returns the targets of this reference.
      * 
      * @return the targets of this reference.