You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/03/20 19:26:11 UTC

svn commit: r520509 [2/2] - in /incubator/tuscany/java/sca/kernel/databinding: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/tuscany/ src/main/java/org/apache/tuscany/core/ src/main/java/org/apac...

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingInteceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingInteceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,111 @@
+/*
+ * 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.core.databinding.wire;
+
+import java.util.Map;
+
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.databinding.Mediator;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.wire.InvocationChain;
+import org.apache.tuscany.spi.wire.Wire;
+import org.apache.tuscany.spi.wire.WirePostProcessorExtension;
+import org.osoa.sca.annotations.Constructor;
+import org.osoa.sca.annotations.Reference;
+
+/**
+ * This processor is responsible to add an interceptor to invocation chain if
+ * the source and target operations have different databinding requirements
+ * 
+ * @version $Rev$ $Date$
+ */
+public class DataBindingWirePostProcessor extends WirePostProcessorExtension {
+    private Mediator mediator;
+    private ComponentManager componentManager;
+
+    @Constructor({"componentManager", "mediator"})
+    public DataBindingWirePostProcessor(@Reference ComponentManager componentManager, 
+                                        @Reference Mediator mediator) {
+        super();
+        this.componentManager = componentManager;
+        this.mediator = mediator;
+    }
+
+    public void process(Wire wire) {
+        ServiceContract<?> sourceContract = wire.getSourceContract();
+        ServiceContract<?> targetContract = wire.getTargetContract();
+        if (targetContract == null) {
+            targetContract = sourceContract;
+        }
+        if (sourceContract == targetContract) {
+            return;
+        }
+        Map<Operation<?>, InvocationChain> chains = wire.getInvocationChains();
+        for (Map.Entry<Operation<?>, InvocationChain> entry : chains.entrySet()) {
+            String opName = entry.getKey().getName();
+            Operation<?> sourceOperation = sourceContract.getOperation(opName);
+            Operation<?> targetOperation = targetContract.getOperation(opName);
+            String sourceDataBinding = sourceOperation.getDataBinding();
+            String targetDataBinding = targetOperation.getDataBinding();
+            if (sourceDataBinding == null && targetDataBinding == null) {
+                continue;
+            }
+            if (sourceDataBinding == null || targetDataBinding == null 
+                || !sourceDataBinding.equals(targetDataBinding)) {
+                // Add the interceptor to the source side because multiple
+                // references can be wired
+                // to the same service
+                DataBindingInteceptor interceptor =
+                    new DataBindingInteceptor(componentManager, wire, sourceOperation, targetOperation);
+                interceptor.setMediator(mediator);
+                entry.getValue().addInterceptor(0, interceptor);
+            }
+        }
+
+        // Object targetAddress = UriHelper.getBaseName(source.getUri());
+        Map<Operation<?>, InvocationChain> callbackChains = wire.getCallbackInvocationChains();
+        if (callbackChains == null) {
+            // callback chains could be null
+            return;
+        }
+
+        for (Map.Entry<Operation<?>, InvocationChain> entry : callbackChains.entrySet()) {
+            String opName = entry.getKey().getName();
+            Operation<?> sourceOperation = sourceContract.getCallbackOperations().get(opName);
+            Operation<?> targetOperation = targetContract.getCallbackOperations().get(opName);
+            String sourceDataBinding = sourceOperation.getDataBinding();
+            String targetDataBinding = targetOperation.getDataBinding();
+            if (sourceDataBinding == null && targetDataBinding == null) {
+                continue;
+            }
+            if (sourceDataBinding == null || targetDataBinding == null || !sourceDataBinding.equals(targetDataBinding)) {
+                // Add the interceptor to the source side because multiple
+                // references can be wired
+                // to the same service
+                DataBindingInteceptor interceptor =
+                    new DataBindingInteceptor(componentManager, wire, sourceOperation, targetOperation);
+                interceptor.setMediator(mediator);
+                entry.getValue().addInterceptor(0, interceptor);
+            }
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/databinding/src/main/resources/org/apache/tuscany/core/databinding.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/main/resources/org/apache/tuscany/core/databinding.scdl?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/main/resources/org/apache/tuscany/core/databinding.scdl (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/main/resources/org/apache/tuscany/core/databinding.scdl Tue Mar 20 11:26:09 2007
@@ -0,0 +1,185 @@
+<?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.    
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:system="http://tuscany.apache.org/xmlns/sca/system/2.0-alpha"
+    name="org.apache.tuscany.core.DataBinding" autowire="true">
+
+    <component name="databinding.wirePostProcessor" initLevel="50">
+        <system:implementation.system class="org.apache.tuscany.core.databinding.wire.DataBindingWirePostProcessor" />
+    </component>
+
+    <component name="databinding.javaInterfaceProcessor">
+        <system:implementation.system class="org.apache.tuscany.core.databinding.processor.DataBindingJavaInterfaceProcessor" />
+    </component>
+
+    <!-- [rfeng] HACK: Make sure the passByValue interceptor is added before the databinding interceptor -->
+    <!-- 
+        <component name="databinding.passByValueWirePostProcessor" initLevel="80">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.PassByValueWirePostProcessor" />
+        </component>
+    -->
+
+    <!-- DataBinding registry -->
+    <component name="databinding.registry">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.DataBindingRegistryImpl" />
+    </component>
+
+    <!-- DataBinding registry -->
+    <component name="databinding.mediator">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.MediatorImpl" />
+    </component>
+
+    <!-- Transformer registry -->
+    <component name="databinding.transformerRegistry" initLevel="90">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.TransformerRegistryImpl" />
+    </component>
+
+    <component name="dataType.loader">
+        <system:implementation.system class="org.apache.tuscany.core.databinding.loader.DataTypeLoader" />
+    </component>
+
+    <component name="databinding.dom">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.DOMDataBinding" />
+    </component>
+
+    <component name="databinding.xmlString">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLStringDataBinding" />
+    </component>
+
+    <!-- Group databindings -->
+    <component name="databinding.group.xml">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLGroupDataBinding" />
+    </component>
+
+    <!-- Comment out the stax databinding as it's covered in the databinding.group.xml -->
+    <!-- 
+        <component name="databinding.stax">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.StAXDataBinding" />
+        </component>
+    -->
+    <component name="databinding.javabeans">
+        <system:implementation.system class="org.apache.tuscany.databinding.javabeans.JavaBeansDataBinding" />
+    </component>
+
+    <!-- Transformers -->
+
+    <component name="transformer.Input2InputTransformer">
+        <system:implementation.system class="org.apache.tuscany.core.databinding.transformers.Input2InputTransformer" />
+    </component>
+
+    <component name="transformer.Exception2ExceptionTransformer">
+        <system:implementation.system class="org.apache.tuscany.core.databinding.transformers.Exception2ExceptionTransformer" />
+    </component>
+
+    <component name="transformer.Output2OutputTransformer">
+        <system:implementation.system class="org.apache.tuscany.core.databinding.transformers.Output2OutputTransformer" />
+    </component>
+
+    <component name="transformer.Group2GroupTransformer">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.Group2GroupTransformer" />
+    </component>
+
+    <component name="transformer.InputSource2Node">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.InputSource2Node" />
+    </component>
+
+    <component name="transformer.InputSource2SAX">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.InputSource2SAX" />
+    </component>
+
+    <component name="transformer.InputStream2Node">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.InputStream2Node" />
+    </component>
+
+    <component name="transformer.InputStream2SAX">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.InputStream2SAX" />
+    </component>
+
+    <component name="transformer.DOMNode2JavaBean">
+        <system:implementation.system class="org.apache.tuscany.databinding.javabeans.DOMNode2JavaBeanTransformer" />
+    </component>
+
+    <component name="transformer.Node2OutputStream">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2OutputStream" />
+    </component>
+
+    <component name="transformer.Node2String">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2String" />
+    </component>
+
+    <component name="transformer.Node2Writer">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2Writer" />
+    </component>
+
+    <component name="transformer.Node2XMLStreamReader">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2XMLStreamReader" />
+    </component>
+
+    <component name="transformer.JavaBean2DOMNode">
+        <system:implementation.system class="org.apache.tuscany.databinding.javabeans.JavaBean2DOMNodeTransformer" />
+    </component>
+
+    <component name="transformer.Reader2Node">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Reader2Node" />
+    </component>
+
+    <component name="transformer.Reader2SAX">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Reader2SAX" />
+    </component>
+
+    <component name="transformer.SAX2DOMPipe">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.SAX2DOMPipe" />
+    </component>
+
+    <component name="transformer.Source2ResultTransformer">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Source2ResultTransformer" />
+    </component>
+
+    <component name="transformer.StreamDataPipe">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.StreamDataPipe" />
+    </component>
+
+    <component name="transformer.String2Node">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.String2Node" />
+    </component>
+
+    <component name="transformer.String2SAX">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.String2SAX" />
+    </component>
+
+    <component name="transformer.String2XMLStreamReader">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.String2XMLStreamReader" />
+    </component>
+
+    <component name="transformer.Writer2ReaderDataPipe">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Writer2ReaderDataPipe" />
+    </component>
+
+    <component name="transformer.XMLStreamReader2Node">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLStreamReader2Node" />
+    </component>
+
+    <component name="transformer.XMLStreamReader2SAX">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLStreamReader2SAX" />
+    </component>
+
+    <component name="transformer.XMLStreamReader2String">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLStreamReader2String" />
+    </component>
+</composite>
\ No newline at end of file

Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,80 @@
+/*
+ * 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.core.databinding.loader;
+
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.loader.DataTypeLoader;
+import org.apache.tuscany.spi.loader.InvalidValueException;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.ModelObject;
+import org.easymock.EasyMock;
+
+/**
+ * Testcase for DataBindingLoader
+ */
+public class DataBindingLoaderTestCase extends TestCase {
+    private XMLStreamReader reader;
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    public final void testLoad() throws LoaderException, XMLStreamException {
+        reader = EasyMock.createMock(XMLStreamReader.class);
+        // EasyMock.expect(reader.getEventType()).andReturn(XMLStreamConstants.START_ELEMENT);
+        EasyMock.expect(reader.hasNext()).andReturn(true).anyTimes();
+        EasyMock.expect(reader.getName()).andReturn(DataTypeLoader.DATA_BINDING);
+        EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn("ABC");
+        EasyMock.expect(reader.next()).andReturn(XMLStreamConstants.END_ELEMENT);
+        EasyMock.replay(reader);
+
+        ModelObject mo = new DataTypeLoader(null).load(null, reader, null);
+        Assert.assertTrue(mo instanceof DataType);
+        Assert.assertEquals("ABC", ((DataType<?>)mo).getDataBinding());
+        EasyMock.verify(reader);
+
+        EasyMock.reset(reader);
+
+        // EasyMock.expect(reader.getEventType()).andReturn(XMLStreamConstants.START_ELEMENT);
+        EasyMock.expect(reader.hasNext()).andReturn(true).anyTimes();
+        EasyMock.expect(reader.getName()).andReturn(DataTypeLoader.DATA_BINDING);
+        EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn(null);
+        EasyMock.expect(reader.next()).andReturn(XMLStreamConstants.END_ELEMENT);
+        EasyMock.replay(reader);
+        try {
+            mo = new DataTypeLoader(null).load(null, reader, null);
+            Assert.fail("InvalidValueException should have been thrown");
+        } catch (InvalidValueException e) {
+            Assert.assertTrue(true);
+        }
+        EasyMock.verify(reader);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,82 @@
+/*
+ * 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.core.databinding.processor;
+
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.api.annotation.DataType;
+import org.apache.tuscany.core.databinding.processor.DataBindingJavaInterfaceProcessor;
+import org.apache.tuscany.databinding.impl.DataBindingRegistryImpl;
+import org.apache.tuscany.spi.databinding.DataBindingRegistry;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
+import org.osoa.sca.annotations.Remotable;
+import org.w3c.dom.Node;
+
+/**
+ * 
+ */
+public class DataBindingJavaInterfaceProcessorTestCase extends TestCase {
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    /**
+     * @throws InvalidServiceContractException
+     */
+    public final void testVisitInterface() throws InvalidServiceContractException {
+        DataBindingRegistry registry = new DataBindingRegistryImpl();
+        DataBindingJavaInterfaceProcessor processor = new DataBindingJavaInterfaceProcessor(registry);
+        JavaServiceContract<?> contract = new JavaServiceContract(MockInterface.class);
+        Map<String, Operation<Type>> operations = new HashMap<String, Operation<Type>>();
+        Operation<Type> operation = new Operation<Type>("call", null, null, null, false, null, NO_CONVERSATION);
+        Operation<Type> operation1 = new Operation<Type>("call1", null, null, null, false, null, NO_CONVERSATION);
+        operations.put("call", operation);
+        operations.put("call1", operation1);
+        contract.setOperations(operations);
+        contract.setRemotable(true);
+        processor.visitInterface(MockInterface.class, null, contract);
+        Assert.assertEquals("org.w3c.dom.Node", contract.getDataBinding());
+        Assert.assertEquals("org.w3c.dom.Node", contract.getOperations().get("call").getDataBinding());
+        Assert.assertEquals("xml:string", contract.getOperations().get("call1").getDataBinding());
+    }
+
+    @DataType(name = "org.w3c.dom.Node")
+    @Remotable
+    public static interface MockInterface {
+        Node call(Node msg);
+
+        @DataType(name = "xml:string")
+        String call1(String msg);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,223 @@
+/*
+ * 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.core.databinding.transformers;
+
+import static org.apache.tuscany.spi.databinding.DataBinding.IDL_INPUT;
+import static org.apache.tuscany.spi.databinding.DataBinding.IDL_OUTPUT;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.transformers.Input2InputTransformer;
+import org.apache.tuscany.core.databinding.transformers.Output2OutputTransformer;
+import org.apache.tuscany.databinding.impl.DataBindingRegistryImpl;
+import org.apache.tuscany.databinding.impl.MediatorImpl;
+import org.apache.tuscany.databinding.impl.TransformationContextImpl;
+import org.apache.tuscany.databinding.impl.TransformerRegistryImpl;
+import org.apache.tuscany.databinding.javabeans.DOMNode2JavaBeanTransformer;
+import org.apache.tuscany.databinding.javabeans.JavaBean2DOMNodeTransformer;
+import org.apache.tuscany.databinding.xml.DOMDataBinding;
+import org.apache.tuscany.databinding.xml.Node2String;
+import org.apache.tuscany.databinding.xml.String2Node;
+import org.apache.tuscany.spi.databinding.DataBindingRegistry;
+import org.apache.tuscany.spi.databinding.TransformationContext;
+import org.apache.tuscany.spi.databinding.extension.DOMHelper;
+import org.apache.tuscany.spi.databinding.extension.SimpleTypeMapperExtension;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.ElementInfo;
+import org.apache.tuscany.spi.model.TypeInfo;
+import org.apache.tuscany.spi.model.WrapperInfo;
+import org.apache.tuscany.spi.model.XMLType;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class IDLTransformerTestCase extends TestCase {
+    private static final String IPO_XML =
+        "<?xml version=\"1.0\"?>" + "<order1"
+            + "  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+            + "  xmlns:ipo=\"http://www.example.com/IPO\""
+            + "  xsi:schemaLocation=\"http://www.example.com/IPO ipo.xsd\""
+            + "  orderDate=\"1999-12-01\">"
+            + "  <shipTo exportCode=\"1\" xsi:type=\"ipo:UKAddress\">"
+            + "    <name>Helen Zoe</name>"
+            + "    <street>47 Eden Street</street>"
+            + "    <city>Cambridge</city>"
+            + "    <postcode>CB1 1JR</postcode>"
+            + "  </shipTo>"
+            + "  <billTo xsi:type=\"ipo:USAddress\">"
+            + "    <name>Robert Smith</name>"
+            + "    <street>8 Oak Avenue</street>"
+            + "    <city>Old Town</city>"
+            + "    <state>PA</state>"
+            + "    <zip>95819</zip>"
+            + "  </billTo>"
+            + "  <items>"
+            + "    <item partNum=\"833-AA\">"
+            + "      <productName>Lapis necklace</productName>"
+            + "      <quantity>1</quantity>"
+            + "      <USPrice>99.95</USPrice>"
+            + "      <ipo:comment>Want this for the holidays</ipo:comment>"
+            + "      <shipDate>1999-12-05</shipDate>"
+            + "    </item>"
+            + "  </items>"
+            + "</order1>";
+
+    private static final String URI_ORDER_XSD = "http://example.com/order.xsd";
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    public void testTransform() throws Exception {
+        List<DataType<XMLType>> types0 = new ArrayList<DataType<XMLType>>();
+        DataType<XMLType> wrapperType =
+            new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "checkOrderStatus"), null));
+        types0.add(wrapperType);
+        DataType<List<DataType<XMLType>>> inputType0 =
+            new DataType<List<DataType<XMLType>>>(IDL_INPUT, Object[].class, types0);
+
+        List<DataType<XMLType>> types1 = new ArrayList<DataType<XMLType>>();
+        DataType<XMLType> customerIdType =
+            new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "customerId"), null));
+        DataType<XMLType> orderType =
+            new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "order"), null));
+        DataType<XMLType> flagType =
+            new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "flag"), null));
+        types1.add(customerIdType);
+        types1.add(orderType);
+        types1.add(flagType);
+
+        DataType<XMLType> statusType =
+            new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "status"), null));
+        DataType<XMLType> responseType =
+            new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "checkOrderStatusResponse"),
+                                                                  null));
+
+        org.apache.tuscany.spi.model.Operation<XMLType> op =
+            new org.apache.tuscany.spi.model.Operation<XMLType>("checkOrderStatus", inputType0, responseType, null);
+        op.setDataBinding(DOMDataBinding.NAME);
+
+        inputType0.setOperation(op);
+        op.setWrapperStyle(true);
+        ElementInfo inputElement =
+            new ElementInfo(new QName(URI_ORDER_XSD, "checkOrderStatus"), new TypeInfo(null, false, null));
+        wrapperType.setMetadata(ElementInfo.class.getName(), inputElement);
+
+        ElementInfo customerId =
+            new ElementInfo(new QName("", "customerId"), SimpleTypeMapperExtension.XSD_SIMPLE_TYPES.get("string"));
+        ElementInfo order =
+            new ElementInfo(new QName("", "order"), new TypeInfo(new QName(URI_ORDER_XSD), false, null));
+        ElementInfo flag =
+            new ElementInfo(new QName("", "flag"), SimpleTypeMapperExtension.XSD_SIMPLE_TYPES.get("int"));
+
+        customerIdType.setMetadata(ElementInfo.class.getName(), customerId);
+        orderType.setMetadata(ElementInfo.class.getName(), order);
+        flagType.setMetadata(ElementInfo.class.getName(), flag);
+
+        customerIdType.setOperation(op);
+        orderType.setOperation(op);
+        flagType.setOperation(op);
+
+        List<ElementInfo> inputElements = new ArrayList<ElementInfo>();
+        inputElements.add(customerId);
+        inputElements.add(order);
+        inputElements.add(flag);
+
+        ElementInfo statusElement =
+            new ElementInfo(new QName("", "status"), SimpleTypeMapperExtension.XSD_SIMPLE_TYPES.get("string"));
+
+        statusType.setMetadata(ElementInfo.class.getName(), statusElement);
+        statusType.setOperation(op);
+
+        List<ElementInfo> outputElements = new ArrayList<ElementInfo>();
+        outputElements.add(statusElement);
+
+        ElementInfo outputElement =
+            new ElementInfo(new QName(URI_ORDER_XSD, "checkOrderStatusResponse"), new TypeInfo(null, false, null));
+
+        responseType.setMetadata(ElementInfo.class.getName(), inputElement);
+        responseType.setOperation(op);
+
+        WrapperInfo wrapperInfo =
+            new WrapperInfo(DOMDataBinding.NAME, inputElement, outputElement, inputElements, outputElements);
+        op.setWrapper(wrapperInfo);
+        op.setDataBinding(DOMDataBinding.NAME);
+
+        MediatorImpl m = new MediatorImpl();
+        TransformerRegistryImpl tr = new TransformerRegistryImpl();
+        tr.registerTransformer(new String2Node());
+        tr.registerTransformer(new Node2String());
+        tr.registerTransformer(new DOMNode2JavaBeanTransformer());
+        tr.registerTransformer(new JavaBean2DOMNodeTransformer());
+        m.setTransformerRegistry(tr);
+        DataBindingRegistry dataBindingRegistry = new DataBindingRegistryImpl();
+        dataBindingRegistry.register(new DOMDataBinding());
+        m.setDataBindingRegistry(dataBindingRegistry);
+
+        Object[] source = new Object[] {"cust001", IPO_XML, Integer.valueOf(1)};
+        Input2InputTransformer t = new Input2InputTransformer();
+        t.setMediator(m);
+
+        TransformationContext context = new TransformationContextImpl();
+        List<DataType<Class>> types = new ArrayList<DataType<Class>>();
+        types.add(new DataType<Class>(Object.class.getName(), String.class, String.class));
+        types.add(new DataType<Class>("java.lang.String", String.class, String.class));
+        types.add(new DataType<Class>(Object.class.getName(), int.class, int.class));
+        DataType<List<DataType<Class>>> inputType1 =
+            new DataType<List<DataType<Class>>>(IDL_INPUT, Object[].class, types);
+        context.setSourceDataType(inputType1);
+        context.setTargetDataType(op.getInputType());
+        Object[] results = t.transform(source, context);
+        assertEquals(1, results.length);
+        assertTrue(results[0] instanceof Element);
+        Element element = (Element)results[0];
+        assertEquals("http://example.com/order.xsd", element.getNamespaceURI());
+        assertEquals("checkOrderStatus", element.getLocalName());
+
+        TransformationContext context1 = new TransformationContextImpl();
+        DataType<DataType> sourceType = new DataType<DataType>(IDL_OUTPUT, Object.class, op.getOutputType());
+        sourceType.setOperation(op.getOutputType().getOperation());
+
+        context1.setSourceDataType(sourceType);
+        DataType<DataType> targetType =
+            new DataType<DataType>(IDL_OUTPUT, Object.class, new DataType<Class>("java.lang.Object", String.class,
+                                                                                 String.class));
+        context1.setTargetDataType(targetType);
+
+        Document factory = DOMHelper.newDocument();
+        Element responseElement =
+            factory.createElementNS("http://example.com/order.wsdl", "p:checkOrderStatusResponse");
+        Element status = factory.createElement("status");
+        responseElement.appendChild(status);
+        status.appendChild(factory.createTextNode("shipped"));
+        Output2OutputTransformer t2 = new Output2OutputTransformer();
+        t2.setMediator(m);
+        Object st = t2.transform(responseElement, context1);
+        assertEquals("shipped", st);
+
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,129 @@
+/*
+ * 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.core.databinding.wire;
+
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.wire.DataBindingInteceptor;
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.databinding.DataBinding;
+import org.apache.tuscany.spi.databinding.Mediator;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.Wire;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DataBindingInterceptorTestCase extends TestCase {
+
+    @SuppressWarnings("unchecked")
+    public final void testInvoke() {
+        DataType<Class> type1 = new DataType<Class>("xml:string", String.class, String.class);
+        List<DataType<Class>> types1 = new ArrayList<DataType<Class>>();
+        types1.add(type1);
+        DataType<List<DataType<Class>>> inputType1 =
+            new DataType<List<DataType<Class>>>("xml:string", Object[].class, types1);
+
+        DataType<Class> type2 = new DataType<Class>("foo", Foo.class, Foo.class);
+        List<DataType<Class>> types2 = new ArrayList<DataType<Class>>();
+        types2.add(type2);
+        DataType<List<DataType<Class>>> inputType2 = new DataType<List<DataType<Class>>>("foo", Object[].class, types2);
+
+        Operation<Class> operation1 =
+            new Operation<Class>("call", inputType1, type1, null, false, "xml:string", NO_CONVERSATION);
+        Operation<Class> operation2 =
+            new Operation<Class>("call", inputType2, type2, null, false, "org.w3c.dom.Node", NO_CONVERSATION);
+
+        DataType<DataType> outputType1 =
+            new DataType<DataType>(DataBinding.IDL_OUTPUT, Object.class, operation1.getOutputType());
+        DataType<DataType> outputType2 =
+            new DataType<DataType>(DataBinding.IDL_OUTPUT, Object.class, operation2.getOutputType());
+
+        Component component = EasyMock.createMock(Component.class);
+        ComponentManager componentManager = createMock(ComponentManager.class);
+        expect(componentManager.getComponent(EasyMock.isA(URI.class))).andReturn(component).anyTimes();
+        Wire wire = EasyMock.createMock(Wire.class);
+        expect(wire.getSourceUri()).andReturn(URI.create("/componentA/ref1"));
+        expect(wire.getTargetUri()).andReturn(URI.create("/componentB/svc1"));
+        EasyMock.replay(wire, componentManager, component);
+
+        DataBindingInteceptor interceptor = new DataBindingInteceptor(componentManager, wire, operation1, operation2);
+        Mediator mediator = createMock(Mediator.class);
+        Object[] source = new Object[] {"<foo>bar</foo>"};
+        Foo foo = new Foo();
+        foo.bar = "bar";
+        Object[] target = new Object[] {foo};
+        expect(mediator.mediate(EasyMock.same(source), EasyMock.same(inputType1), EasyMock.same(inputType2), EasyMock
+            .isA(Map.class))).andReturn(target);
+        // expect(mediator.mediate(target[0], type2,
+        // type1)).andReturn(source[0]);
+        expect(mediator.mediate(EasyMock.same(target[0]), EasyMock.eq(outputType2), EasyMock.eq(outputType1), EasyMock
+            .isA(Map.class))).andReturn(source[0]);
+        replay(mediator);
+        interceptor.setMediator(mediator);
+        Message msg = createMock(Message.class);
+        msg.setBody(EasyMock.anyObject());
+        expectLastCall().anyTimes();
+        expect(msg.getBody()).andReturn(source).once().andReturn(target[0]).once().andReturn(source[0]);
+        expect(msg.isFault()).andReturn(false).once();
+        replay(msg);
+        Interceptor next = createMock(Interceptor.class);
+        expect(next.invoke(msg)).andReturn(msg);
+        replay(next);
+        interceptor.setNext(next);
+        interceptor.invoke(msg);
+        String result = (String)msg.getBody();
+        Assert.assertEquals(source[0], result);
+        EasyMock.verify(mediator, msg, next);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    private static class Foo {
+        private String bar;
+
+        public String getBar() {
+            return bar;
+        }
+
+        public void setBar(String bar) {
+            this.bar = bar;
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,102 @@
+/*
+ * 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.core.databinding.wire;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
+import java.lang.reflect.Type;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.wire.DataBindingWirePostProcessor;
+import org.apache.tuscany.databinding.impl.MediatorImpl;
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.databinding.Mediator;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.util.UriHelper;
+import org.apache.tuscany.spi.wire.InvocationChain;
+import org.apache.tuscany.spi.wire.Wire;
+import org.easymock.EasyMock;
+
+/**
+ * Verifies that data binding interceptor is not added to invocation chains when the data binding types are not set on
+ * service contracts
+ *
+ * @version $Rev$ $Date$
+ */
+public class DataBindingWirePostProcessorOptimizationTestCase extends TestCase {
+    private DataBindingWirePostProcessor processor;
+    private InvocationChain chain;
+    private Wire wire;
+
+    public void testNoInterceptorInterposedOutboundToInbound() {
+        processor.process(wire);
+        EasyMock.verify(chain);
+        EasyMock.verify(wire);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        
+        URI sourceUri = URI.create("/componentA/#ref1");
+        URI targetUri = URI.create("/componentB/#svc1");
+
+        // FIXME: [rfeng] We should use Mocks here
+        Mediator mediator = new MediatorImpl();
+        ComponentManager componentManager = createMock(ComponentManager.class);
+        Component component = createMock(Component.class);
+        expect(componentManager.getComponent(UriHelper.getDefragmentedName(sourceUri))).andReturn(component);
+        expect(componentManager.getComponent(UriHelper.getDefragmentedName(targetUri))).andReturn(component);
+        
+        replay(component, componentManager);
+        processor = new DataBindingWirePostProcessor(componentManager, mediator);
+
+        ServiceContract<Type> contract = new JavaServiceContract(null);
+        Operation<Type> operation = new Operation<Type>("test", null, null, null);
+        operation.setServiceContract(contract);
+        Map<String, Operation<Type>> operations = new HashMap<String, Operation<Type>>();
+        operations.put("test", operation);
+        contract.setOperations(operations);
+        contract.setCallbackOperations(operations);
+
+        chain = createMock(InvocationChain.class);
+        replay(chain);
+        Map<Operation<?>, InvocationChain> chains = new HashMap<Operation<?>, InvocationChain>();
+        chains.put(operation, chain);
+
+        wire = EasyMock.createMock(Wire.class);
+        expect(wire.getBindingType()).andReturn(Wire.LOCAL_BINDING).anyTimes();
+        expect(wire.getSourceContract()).andReturn(contract).anyTimes();
+        expect(wire.getTargetContract()).andReturn(contract).anyTimes();
+        expect(wire.getInvocationChains()).andReturn(chains).anyTimes();
+        expect(wire.getSourceUri()).andReturn(sourceUri).anyTimes();
+        expect(wire.getTargetUri()).andReturn(targetUri).anyTimes();
+        expect(wire.getCallbackInvocationChains()).andReturn(chains).anyTimes();
+        replay(wire);
+
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,223 @@
+/*
+ * 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.core.databinding.wire;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.processor.JavaInterfaceIntrospector;
+import org.apache.tuscany.core.databinding.wire.DataBindingWirePostProcessor;
+import org.apache.tuscany.databinding.xml.DOMDataBinding;
+import org.apache.tuscany.databinding.xml.StAXDataBinding;
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.component.ReferenceBinding;
+import org.apache.tuscany.spi.databinding.Mediator;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.util.UriHelper;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.InvocationChain;
+import org.apache.tuscany.spi.wire.Wire;
+import org.easymock.EasyMock;
+import org.osoa.sca.Constants;
+import org.osoa.sca.annotations.Remotable;
+import org.w3c.dom.Node;
+
+import com.ibm.rmi.corba.IsA;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DataBindingWirePostProcessorTestCase extends TestCase {
+    private static final QName BINDING_WS = new QName(Constants.SCA_NS, "binding.ws");
+    private DataBindingWirePostProcessor processor;
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    /**
+     * Component.Reference --> Component.Service
+     */
+    public void testProcess1() throws Exception {
+        URI sourceUri = URI.create("/composite1/component1/#reference1");
+        URI targetUri = URI.create("/composite1/component2/#service1");
+        
+        Mediator mediator = createMock(Mediator.class);
+        ComponentManager componentManager = createMock(ComponentManager.class);
+        Component component1 = createMock(Component.class);
+        // expect(component1.getReference("reference1")).andReturn(null);
+        Component component2 = createMock(Component.class);
+        // expect(component2.getService("service1")).andReturn(null);
+        expect(componentManager.getComponent(UriHelper.getDefragmentedName(sourceUri))).andReturn(component1).anyTimes();
+        expect(componentManager.getComponent(UriHelper.getDefragmentedName(targetUri))).andReturn(component2).anyTimes();
+        replay(mediator, componentManager, component1, component2);
+        DataBindingWirePostProcessor processor = new DataBindingWirePostProcessor(componentManager, mediator);
+
+        Wire wire = createWire(sourceUri, targetUri, Wire.LOCAL_BINDING);
+        processor.process(wire);
+        
+        verify(mediator, componentManager, component1, component2);
+    }
+
+    /**
+     * Component.Reference --> Composite.Reference
+     */
+    public void testProcess2() throws Exception {
+        ReferenceBinding referenceBinding = createMock(ReferenceBinding.class);
+        Component composite = createMock(Component.class);
+        expect(referenceBinding.getUri()).andReturn(URI.create("/compositeA/#ref1"));
+
+        URI sourceUri = URI.create("/composite1/component1/#reference1");
+        URI targetUri = URI.create("/composite1/#reference1");
+        Mediator mediator = createMock(Mediator.class);
+        ComponentManager componentManager = createMock(ComponentManager.class);
+        Component component1 = createMock(Component.class);
+        expect(component1.getReference("reference1")).andReturn(null);
+        Component component2 = createMock(Component.class);
+        expect(component2.getReference("reference1")).andReturn(null);
+        expect(componentManager.getComponent(UriHelper.getDefragmentedName(sourceUri))).andReturn(component1).anyTimes();
+        expect(componentManager.getComponent(UriHelper.getDefragmentedName(targetUri))).andReturn(component2).anyTimes();
+        replay(mediator, componentManager, component1, component2);
+        DataBindingWirePostProcessor processor = new DataBindingWirePostProcessor(componentManager, mediator);
+        
+        Wire wire = createWire(sourceUri, targetUri, BINDING_WS);
+        processor.process(wire);
+    }
+
+    /**
+     * Composite.Service --> Component Service
+     */
+    public void testProcess3() throws Exception {
+        URI sourceUri = URI.create("/composite1/#service1");
+        URI targetUri = URI.create("/composite1/component1/#service1");
+        
+        Mediator mediator = createMock(Mediator.class);
+        ComponentManager componentManager = createMock(ComponentManager.class);
+        Component component1 = createMock(Component.class);
+        expect(component1.getService("service1")).andReturn(null);
+        Component component2 = createMock(Component.class);
+        expect(component2.getService("service1")).andReturn(null);
+        expect(componentManager.getComponent(UriHelper.getDefragmentedName(sourceUri))).andReturn(component1).anyTimes();
+        expect(componentManager.getComponent(UriHelper.getDefragmentedName(targetUri))).andReturn(component2).anyTimes();
+        replay(mediator, componentManager, component1, component2);
+        DataBindingWirePostProcessor processor = new DataBindingWirePostProcessor(componentManager, mediator);
+        
+        Wire wire = createWire(sourceUri, targetUri, BINDING_WS);
+        processor.process(wire);
+    }
+
+    private Wire createWire(URI sourceUri, URI targetUri, QName bindingType) throws InvalidServiceContractException {
+        ServiceContract<?> contract1 = new JavaInterfaceIntrospector().introspect(TestInterface1.class);
+        contract1.setDataBinding(DOMDataBinding.NAME);
+        ServiceContract<?> contract2 = new JavaInterfaceIntrospector().introspect(TestInterface2.class);
+        contract2.setDataBinding(StAXDataBinding.NAME);
+        Map<Operation<?>, InvocationChain> chains = new HashMap<Operation<?>, InvocationChain>();
+        for (Operation<?> op : contract1.getOperations().values()) {
+            InvocationChain chain = createMock(InvocationChain.class);
+            chain.addInterceptor(EasyMock.anyInt(), EasyMock.isA(Interceptor.class));
+            replay(chain);
+            chains.put(op, chain);
+        }        
+        Map<Operation<?>, InvocationChain> callbackChains = new HashMap<Operation<?>, InvocationChain>();
+        for (Operation<?> op : contract1.getCallbackOperations().values()) {
+            InvocationChain chain = createMock(InvocationChain.class);
+            chain.addInterceptor(EasyMock.anyInt(), EasyMock.isA(Interceptor.class));
+            replay(chain);
+            callbackChains.put(op, chain);
+        }                
+        Wire wire = EasyMock.createMock(Wire.class);
+        expect(wire.getBindingType()).andReturn(bindingType).anyTimes();
+        expect(wire.getSourceContract()).andReturn(contract1).anyTimes();
+        expect(wire.getTargetContract()).andReturn(contract2).anyTimes();
+        expect(wire.getInvocationChains()).andReturn(chains);
+        expect(wire.getSourceUri()).andReturn(sourceUri).anyTimes();
+        expect(wire.getTargetUri()).andReturn(targetUri).anyTimes();
+        expect(wire.getCallbackInvocationChains()).andReturn(callbackChains).anyTimes();
+        replay(wire);
+        return wire;
+    }
+
+    @Remotable
+    private static interface TestInterface1 {
+        String test1(String str);
+
+        Node test2(Node node);
+
+        void test3(int i, String s) throws MyException;
+    }
+
+    @Remotable
+    private static interface TestInterface2 {
+        String test1(String str);
+
+        XMLStreamReader test2(XMLStreamReader reader);
+
+        void test3(int i, String s) throws MyException;
+    }
+    
+    private static class MyException extends Exception {
+        private static final long serialVersionUID = 7203411584939696390L;
+
+        public MyException() {
+            super();
+        }
+
+        /**
+         * @param message
+         * @param cause
+         */
+        public MyException(String message, Throwable cause) {
+            super(message, cause);
+        }
+
+        /**
+         * @param message
+         */
+        public MyException(String message) {
+            super(message);
+        }
+
+        /**
+         * @param cause
+         */
+        public MyException(Throwable cause) {
+            super(cause);
+        }
+
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



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