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 2006/09/08 23:37:45 UTC
svn commit: r441661 [1/2] - in /incubator/tuscany/java/sca:
databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/
databinding/databinding-axiom/src/main/resources/
databinding/databinding-axiom/src/main/resources/META-INF/ d...
Author: rfeng
Date: Fri Sep 8 14:37:43 2006
New Revision: 441661
URL: http://svn.apache.org/viewvc?view=rev&rev=441661
Log:
Integrate databinding with the core as interceptors (please see my mailing list post for more info)
Added:
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java (with props)
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java (with props)
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java (with props)
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java (with props)
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java (with props)
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java (with props)
incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java (with props)
incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java (with props)
Modified:
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl
incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java
incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java
incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java
incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InvocationChainImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireService.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImplTestCase.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/idl/java/JavaIDLUtils.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/InvocationChain.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WireService.java
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/idl/java/JavaIDLUtilsTestCase.java
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java
incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/ArtifactFactory.java
Added: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java Fri Sep 8 14:37:43 2006
@@ -0,0 +1,37 @@
+/*
+ * 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.databinding.axiom;
+
+import org.apache.axiom.om.OMNode;
+import org.apache.tuscany.databinding.DataBinding;
+import org.apache.tuscany.databinding.extension.DataBindingExtension;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * DataBinding for AXIOM
+ */
+@Service(DataBinding.class)
+public class AxiomDataBinding extends DataBindingExtension {
+
+ public AxiomDataBinding() {
+ super(OMNode.class);
+ }
+
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java Fri Sep 8 14:37:43 2006
@@ -26,8 +26,14 @@
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformationException;
import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
+/**
+ * Transformer to convert data from an OMElement to XML String
+ */
+@Service(Transformer.class)
public class OMElement2String extends TransformerExtension<OMElement, String> implements PullTransformer<OMElement, String> {
// private XmlOptions options;
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java Fri Sep 8 14:37:43 2006
@@ -23,8 +23,11 @@
import org.apache.axiom.om.OMElement;
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
+@Service(Transformer.class)
public class OMElement2XMLStreamReader extends TransformerExtension<OMElement, XMLStreamReader> implements PullTransformer<OMElement, XMLStreamReader> {
// private XmlOptions options;
Added: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java Fri Sep 8 14:37:43 2006
@@ -0,0 +1,106 @@
+/*
+ * 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.databinding.axiom;
+
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNode;
+import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.Transformer;
+import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.model.DataType;
+import org.osoa.sca.annotations.Service;
+
+/**
+ *
+ */
+@Service(Transformer.class)
+public class ObjectArray2OM extends TransformerExtension<Object[], OMElement> implements
+ PullTransformer<Object[], OMElement> {
+
+ private Mediator mediator;
+
+ /**
+ *
+ */
+ public ObjectArray2OM() {
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
+ */
+ @Override
+ protected Class getSourceType() {
+ return Object[].class;
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.extension.TransformerExtension#getTargetType()
+ */
+ @Override
+ protected Class getTargetType() {
+ return OMElement.class;
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.Transformer#getWeight()
+ */
+ public int getWeight() {
+ return 10;
+ }
+
+ @SuppressWarnings("unchecked")
+ public OMElement transform(Object[] source, TransformationContext context) {
+ DataType<List<DataType<QName>>> targetType = context.getTargetDataType();
+ DataType<List<DataType<Class>>> sourceType = context.getSourceDataType();
+ OMFactory factory = OMAbstractFactory.getOMFactory();
+ QName elementName = (QName) targetType.getMetadata("element.name");
+ OMElement element = factory.createOMElement(elementName, null);
+ if (source == null)
+ return null;
+ for (int i = 0; i < source.length; i++) {
+ Object child = mediator.mediate(source[i], sourceType.getLogical().get(i), targetType.getLogical().get(i));
+ if (child instanceof OMNode) {
+ element.addChild((OMNode) child);
+ } else {
+ OMElement childElement = factory.createOMElement(targetType.getLogical().get(i).getLogical(), element);
+ factory.createOMText(childElement, child.toString());
+ }
+ }
+ return element;
+ }
+
+ /**
+ * @param mediator the mediator to set
+ */
+ @Autowire
+ public void setMediator(Mediator mediator) {
+ this.mediator = mediator;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java Fri Sep 8 14:37:43 2006
@@ -25,8 +25,11 @@
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformationException;
import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
+@Service(Transformer.class)
public class String2OMElement extends TransformerExtension<String, OMElement> implements PullTransformer<String, OMElement> {
public OMElement transform(String source, TransformationContext context) {
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java Fri Sep 8 14:37:43 2006
@@ -25,9 +25,16 @@
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformationException;
import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
+@Service(Transformer.class)
public class XMLStreamReader2OMElement extends TransformerExtension<XMLStreamReader, OMElement> implements PullTransformer<XMLStreamReader, OMElement> {
+
+ public XMLStreamReader2OMElement() {
+ super();
+ }
public OMElement transform(XMLStreamReader source, TransformationContext context) {
try {
Added: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl (added)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl Fri Sep 8 14:37:43 2006
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Copyright (c) 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
+ name="org.apache.tuscany.databinding.Axiom">
+
+ <component name="databinding.axiom">
+ <system:implementation.system class="org.apache.tuscany.databinding.axiom.AxiomDataBinding" />
+ </component>
+
+ <!-- Transformers -->
+ <component name="transformer.ObjectArray2OM">
+ <system:implementation.system class="org.apache.tuscany.databinding.axiom.ObjectArray2OM" />
+ </component>
+
+ <component name="transformer.XMLStreamReader2OMElement">
+ <system:implementation.system class="org.apache.tuscany.databinding.axiom.XMLStreamReader2OMElement" />
+ </component>
+
+ <component name="transformer.OMElement2XMLStreamReader">
+ <system:implementation.system class="org.apache.tuscany.databinding.axiom.OMElement2XMLStreamReader" />
+ </component>
+
+ <component name="transformer.String2OMElement">
+ <system:implementation.system class="org.apache.tuscany.databinding.axiom.String2OMElement" />
+ </component>
+
+ <component name="transformer.OMElement2String">
+ <system:implementation.system class="org.apache.tuscany.databinding.axiom.OMElement2String" />
+ </component>
+</composite>
\ No newline at end of file
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java Fri Sep 8 14:37:43 2006
@@ -22,20 +22,29 @@
import org.apache.tuscany.spi.model.DataType;
/**
- * DataBinding represents a data format provider, for example, SDO, JAXB and AXIOM
+ * DataBinding represents a data representation, for example, SDO, JAXB and AXIOM
*/
public interface DataBinding {
/**
* The name of a databinding should be case-insensitive and unique
+ *
* @return The name of the databinding
*/
String getName();
-
+
/**
* Introspect a java class or interface to create a DataType model
+ *
* @param javaType The java class or interface to be introspected
- * @return The newly created DataType or null if the java type is not supported
- * by this databinding
+ * @return The DataType or null if the java type is not supported by this databinding
*/
DataType introspect(Class<?> javaType);
+
+ /**
+ * Introspect the data to figure out the corresponding data type
+ *
+ * @param value The object to be checked
+ * @return The DataType or null if the java type is not supported by this databinding
+ */
+ DataType introspect(Object value);
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java Fri Sep 8 14:37:43 2006
@@ -48,5 +48,6 @@
* @param javaType The java class or interface
* @return
*/
- public DataType<?> introspectType(Class<?> javaType);
+ public DataType introspectType(Class<?> javaType);
+ public DataType introspectType(Object value);
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java Fri Sep 8 14:37:43 2006
@@ -22,11 +22,14 @@
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.model.DataType;
import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
/**
* Base Implementation of DataBinding
*/
-@org.osoa.sca.annotations.Scope("MODULE")
+@Scope("MODULE")
+@Service(DataBinding.class)
public abstract class DataBindingExtension implements DataBinding {
protected DataBindingRegistry registry;
@@ -35,22 +38,19 @@
protected String name = null;
/**
- * Create a databinding with the base java type whose name will be used as the name of
- * the databinding
+ * Create a databinding with the base java type whose name will be used as the name of the databinding
*
- * @param baseType The base java class or interface representing the databinding,
- * for example, org.w3c.dom.Node
+ * @param baseType The base java class or interface representing the databinding, for example, org.w3c.dom.Node
*/
protected DataBindingExtension(Class<?> baseType) {
this(baseType.getName(), baseType);
}
/**
- * Create a databinding with the name and base java type
- *
+ * Create a databinding with the name and base java type
+ *
* @param name The name of the databinding
- * @param baseType The base java class or interface representing the databinding,
- * for example, org.w3c.dom.Node
+ * @param baseType The base java class or interface representing the databinding, for example, org.w3c.dom.Node
*/
protected DataBindingExtension(String name, Class<?> baseType) {
this.name = name;
@@ -73,6 +73,14 @@
return dataType;
} else {
return null;
+ }
+ }
+
+ public DataType introspect(Object value) {
+ if (value == null) {
+ return null;
+ } else {
+ return introspect(value.getClass());
}
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java Fri Sep 8 14:37:43 2006
@@ -21,11 +21,13 @@
import org.apache.tuscany.databinding.TransformerRegistry;
import org.apache.tuscany.spi.annotation.Autowire;
import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Service;
/**
* Base Implementation of Transformer which provides the registration to the transformer registry
*/
@org.osoa.sca.annotations.Scope("MODULE")
+@Service(Transformer.class)
public abstract class TransformerExtension<S, T> implements Transformer {
protected TransformerRegistry registry;
@@ -55,5 +57,9 @@
return getTargetType().getName();
}
+ public int getWeight() {
+ // default to 50
+ return 50;
+ }
}
Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java Fri Sep 8 14:37:43 2006
@@ -0,0 +1,109 @@
+/*
+ * 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.databinding.impl;
+
+import org.apache.tuscany.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.RuntimeWire;
+
+/**
+ * An interceptor to transform data accross databindings on the wire
+ */
+public class DataBindingInteceptor implements Interceptor {
+ private Interceptor next;
+
+ private RuntimeWire<?> sourceWire; // NOPMD by rfeng on 8/29/06 10:15 AM
+
+ private RuntimeWire<?> targetWire; // NOPMD by rfeng on 8/29/06 10:15 AM
+
+ private Operation<?> sourceOperation;
+
+ private Operation<?> targetOperation;
+
+ private Mediator mediator;
+
+ public DataBindingInteceptor(RuntimeWire<?> sourceWire, Operation<?> sourceOperation, RuntimeWire<?> targetWire,
+ Operation<?> targetOperation) {
+ super();
+ this.sourceWire = sourceWire;
+ this.sourceOperation = sourceOperation;
+ this.targetWire = targetWire;
+ this.targetOperation = targetOperation;
+ }
+
+ /**
+ * @see org.apache.tuscany.spi.wire.Interceptor#getNext()
+ */
+ public Interceptor getNext() {
+ return next;
+ }
+
+ /**
+ * @see org.apache.tuscany.spi.wire.Interceptor#invoke(org.apache.tuscany.spi.wire.Message)
+ */
+ @SuppressWarnings("unchecked")
+ public Message invoke(Message msg) {
+ Object input = transform(msg.getBody(), sourceOperation.getInputType(), targetOperation.getInputType());
+ msg.setBody(input);
+ Message resultMsg = next.invoke(msg);
+ Object result = resultMsg.getBody();
+ if (result != null) {
+ result = transform(result, targetOperation.getOutputType(), sourceOperation.getOutputType());
+ resultMsg.setBody(result);
+ }
+ return resultMsg;
+ }
+
+ private Object transform(Object source, DataType sourceType, DataType targetType) {
+ if (source == null) {
+ // Shortcut for null value
+ return null;
+ }
+ if (sourceType == targetType || (sourceType != null && sourceType.equals(targetType))) {
+ return source;
+ }
+ return mediator.mediate(source, sourceType, targetType);
+ }
+
+ /**
+ * @see org.apache.tuscany.spi.wire.Interceptor#isOptimizable()
+ */
+ public boolean isOptimizable() {
+ return false;
+ }
+
+ /**
+ * @see org.apache.tuscany.spi.wire.Interceptor#setNext(org.apache.tuscany.spi.wire.Interceptor)
+ */
+ public void setNext(Interceptor next) {
+ this.next = next;
+ }
+
+ /**
+ * @param mediator the mediator to set
+ */
+ public void setMediator(Mediator mediator) {
+ this.mediator = mediator;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java Fri Sep 8 14:37:43 2006
@@ -0,0 +1,74 @@
+/*
+ * 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.databinding.impl;
+
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.api.annotation.DataContext;
+import org.apache.tuscany.api.annotation.DataType;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorExtension;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
+
+/**
+ * The databinding annotation processor for java interfaces
+ */
+public class DataBindingJavaInterfaceProcessor extends JavaInterfaceProcessorExtension {
+
+ /**
+ * @see org.apache.tuscany.spi.idl.java.JavaInterfaceProcessor#visitInterface(java.lang.Class,
+ * org.apache.tuscany.spi.idl.java.JavaServiceContract)
+ */
+ public void visitInterface(Class<?> clazz, JavaServiceContract contract) throws InvalidServiceContractException {
+ DataType interfaceDataType = clazz.getAnnotation(DataType.class);
+ if (interfaceDataType != null) {
+ contract.setDataBinding(interfaceDataType.name());
+ // FIXME: [rfeng] Keep data context as metadata?
+ for (DataContext c : interfaceDataType.context()) {
+ contract.addMetaData(c.key(), c.value());
+ }
+ }
+ for (Method method : clazz.getMethods()) {
+ DataType operationDataType = method.getAnnotation(DataType.class);
+ if (operationDataType == null) {
+ operationDataType = interfaceDataType;
+ }
+ if (operationDataType != null) {
+ Operation<?> operation = contract.getOperations().get(method.getName());
+ String dataBinding = operationDataType.name();
+ operation.setDataBinding(dataBinding);
+ // FIXME: [rfeng] Keep data context as metadata?
+ for (DataContext c : operationDataType.context()) {
+ operation.addMetaData(c.key(), c.value());
+ }
+ for (org.apache.tuscany.spi.model.DataType<?> d : operation.getInputType().getLogical()) {
+ d.setDataBinding(dataBinding);
+ }
+ if (operation.getOutputType() != null) {
+ operation.getOutputType().setDataBinding(dataBinding);
+ }
+ for (org.apache.tuscany.spi.model.DataType<?> d : operation.getFaultTypes()) {
+ d.setDataBinding(dataBinding);
+ }
+ }
+ }
+ }
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java Fri Sep 8 14:37:43 2006
@@ -56,9 +56,8 @@
public void init() {
}
- @SuppressWarnings("unchecked")
- public DataType<?> introspectType(Class<?> javaType) {
- DataType<?> dataType = null;
+ public DataType introspectType(Class<?> javaType) {
+ DataType dataType = null;
for (DataBinding binding : bindings.values()) {
dataType = binding.introspect(javaType);
if (dataType != null) {
@@ -67,5 +66,15 @@
}
return null;
}
+
+ public DataType introspectType(Object value) {
+ DataType dataType = null;
+ for (DataBinding binding : bindings.values()) {
+ dataType = binding.introspect(value);
+ if (dataType != null) {
+ return dataType;
+ }
+ }
+ return null; }
}
Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java Fri Sep 8 14:37:43 2006
@@ -0,0 +1,112 @@
+/*
+ * 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.databinding.impl;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.builder.WirePostProcessorExtension;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.wire.InboundInvocationChain;
+import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.OutboundWire;
+import org.osoa.sca.annotations.Constructor;
+
+/**
+ * This processor is responsible to add an interceptor to invocation chain if the
+ * source and target operations have different databinding requirements
+ */
+public class DataBindingWirePostProcessor extends WirePostProcessorExtension {
+ private Mediator mediator;
+
+ @Constructor( {"mediator" })
+ public DataBindingWirePostProcessor(@Autowire Mediator mediator) {
+ super();
+ this.mediator = mediator;
+ }
+
+ /**
+ * @see org.apache.tuscany.spi.builder.WirePostProcessor#process(org.apache.tuscany.spi.wire.OutboundWire,
+ * org.apache.tuscany.spi.wire.InboundWire)
+ */
+ public <T> void process(OutboundWire<T> source, InboundWire<T> target) {
+ Map<Operation<?>, OutboundInvocationChain> chains = source.getInvocationChains();
+ for (Map.Entry<Operation<?>, OutboundInvocationChain> entry : chains.entrySet()) {
+ Operation<?> sourceOperation = entry.getKey();
+ Operation<?> targetOperation =
+ getTargetOperation(target.getInvocationChains().keySet(), sourceOperation.getName());
+ String sourceDataBinding = getDataBinding(sourceOperation);
+ String targetDataBinding = getDataBinding(targetOperation);
+ if (!sourceDataBinding.equals(targetDataBinding)) {
+ // Add the interceptor to the source side because multiple references can be wired
+ // to the same service
+ DataBindingInteceptor interceptor =
+ new DataBindingInteceptor(source, sourceOperation, target, targetOperation);
+ interceptor.setMediator(mediator);
+ entry.getValue().addInterceptor(0, interceptor);
+ }
+ }
+ }
+
+ /**
+ * @see org.apache.tuscany.spi.builder.WirePostProcessor#process(org.apache.tuscany.spi.wire.InboundWire,
+ * org.apache.tuscany.spi.wire.OutboundWire)
+ */
+ public <T> void process(InboundWire<T> source, OutboundWire<T> target) {
+ Map<Operation<?>, InboundInvocationChain> chains = source.getInvocationChains();
+ for (Map.Entry<Operation<?>, InboundInvocationChain> entry : chains.entrySet()) {
+ Operation<?> sourceOperation = entry.getKey();
+ Operation<?> targetOperation =
+ getTargetOperation(target.getInvocationChains().keySet(), sourceOperation.getName());
+ String sourceDataBinding = getDataBinding(sourceOperation);
+ String targetDataBinding = getDataBinding(targetOperation);
+ if (!sourceDataBinding.equals(targetDataBinding)) {
+ // Add the interceptor to the source side
+ DataBindingInteceptor interceptor =
+ new DataBindingInteceptor(source, sourceOperation, target, targetOperation);
+ interceptor.setMediator(mediator);
+ entry.getValue().addInterceptor(0, interceptor);
+ }
+ }
+ }
+
+ private Operation getTargetOperation(Set<Operation<?>> operations, String operationName) {
+ for (Operation<?> op : operations) {
+ if (op.getName().equals(operationName)) {
+ return op;
+ }
+ }
+ return null;
+ }
+
+ private String getDataBinding(Operation<?> operation) {
+ String dataBinding = operation.getDataBinding();
+ if (dataBinding == null) {
+ ServiceContract<?> serviceContract = operation.getServiceContract();
+ dataBinding = serviceContract.getDataBinding();
+ }
+ return dataBinding;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java Fri Sep 8 14:37:43 2006
@@ -0,0 +1,104 @@
+/*
+ * 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.databinding.impl;
+
+import java.util.List;
+
+import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.Transformer;
+import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.model.DataType;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * This is a special transformer to convert java parameters by the inputType
+ */
+@Service(Transformer.class)
+public class JavaParametersTransformer extends TransformerExtension<Object[], Object[]> implements
+ PullTransformer<Object[], Object[]> {
+
+ @Override
+ public String getSourceBinding() {
+ return "java:parameters";
+ }
+
+ @Override
+ public String getTargetBinding() {
+ return "java:parameters";
+ }
+
+ private Mediator mediator;
+
+ /**
+ *
+ */
+ public JavaParametersTransformer() {
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
+ */
+ @Override
+ protected Class getSourceType() {
+ return Object[].class;
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.extension.TransformerExtension#getTargetType()
+ */
+ @Override
+ protected Class getTargetType() {
+ return Object[].class;
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.Transformer#getWeight()
+ */
+ public int getWeight() {
+ return 10;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object[] transform(Object[] source, TransformationContext context) {
+ List sourceParameterTypes = (List) context.getSourceDataType().getLogical();
+ List targetParameterTypes = (List) context.getTargetDataType().getLogical();
+ Object[] args = source;
+ if (args != null) {
+ Object[] newArgs = new Object[args.length];
+ for (int i = 0; i < sourceParameterTypes.size(); i++) {
+ newArgs[i] = mediator.mediate(args[i], (DataType) sourceParameterTypes.get(i), (DataType) targetParameterTypes.get(i));
+ }
+ return newArgs;
+ }
+ return null;
+ }
+
+ /**
+ * @param mediator the mediator to set
+ */
+ @Autowire
+ public void setMediator(Mediator mediator) {
+ this.mediator = mediator;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java Fri Sep 8 14:37:43 2006
@@ -21,6 +21,7 @@
import java.util.Iterator;
import java.util.List;
+import org.apache.tuscany.databinding.DataBindingRegistry;
import org.apache.tuscany.databinding.DataPipe;
import org.apache.tuscany.databinding.Mediator;
import org.apache.tuscany.databinding.PullTransformer;
@@ -39,6 +40,8 @@
@Scope("MODULE")
public class MediatorImpl implements Mediator {
+ private DataBindingRegistry dataBindingRegistry;
+
private TransformerRegistry transformerRegistry;
@Autowire
@@ -47,25 +50,48 @@
}
/**
+ * @param dataBindingRegistry the dataBindingRegistry to set
+ */
+ @Autowire
+ public void setDataBindingRegistry(DataBindingRegistry dataBindingRegistry) {
+ this.dataBindingRegistry = dataBindingRegistry;
+ }
+
+ /**
* @see org.apache.tuscany.databinding.Mediator#mediate(java.lang.Object, org.apache.tuscany.spi.model.DataType,
* org.apache.tuscany.spi.model.DataType)
*/
@SuppressWarnings("unchecked")
public Object mediate(Object source, DataType sourceDataType, DataType targetDataType) {
+ if (source == null) {
+ // Shortcut for null value
+ return null;
+ }
+ if (sourceDataType == null) {
+ sourceDataType = dataBindingRegistry.introspectType(source);
+ }
+ if (sourceDataType == null) {
+ return source;
+ } else if (sourceDataType.equals(targetDataType)) {
+ return source;
+ }
+
List<Transformer> path = getTransformerChain(sourceDataType, targetDataType);
-
+
Object result = source;
for (Iterator<Transformer> i = path.iterator(); i.hasNext();) {
Transformer transformer = i.next();
// FIXME: We probably need to reset the context for each transformation on the path to reflect
// the source and target type
if (transformer instanceof PullTransformer) {
- TransformationContext context = new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
- .getContextClassLoader());
+ TransformationContext context =
+ new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
+ .getContextClassLoader());
result = ((PullTransformer) transformer).transform(result, context);
} else if (transformer instanceof PushTransformer) {
- TransformationContext context = new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
- .getContextClassLoader());
+ TransformationContext context =
+ new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
+ .getContextClassLoader());
DataPipe dataPipe = i.hasNext() ? (DataPipe) i.next() : null;
((PushTransformer) transformer).transform(result, dataPipe.getSink(), context);
result = dataPipe.getResult();
@@ -77,18 +103,33 @@
@SuppressWarnings("unchecked")
public void mediate(Object source, Object target, DataType sourceDataType, DataType targetDataType) {
+ if (source == null) {
+ // Shortcut for null value
+ return;
+ }
+ if (sourceDataType == null) {
+ sourceDataType = dataBindingRegistry.introspectType(source);
+ }
+ if (sourceDataType == null) {
+ return;
+ } else if (sourceDataType.equals(targetDataType)) {
+ return;
+ }
+
List<Transformer> path = getTransformerChain(sourceDataType, targetDataType);
Object result = source;
for (Iterator<Transformer> i = path.iterator(); i.hasNext();) {
Transformer transformer = i.next();
if (transformer instanceof PullTransformer) {
- TransformationContext context = new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
- .getContextClassLoader());
+ TransformationContext context =
+ new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
+ .getContextClassLoader());
result = ((PullTransformer) transformer).transform(result, context);
} else if (transformer instanceof PushTransformer) {
- TransformationContext context = new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
- .getContextClassLoader());
+ TransformationContext context =
+ new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
+ .getContextClassLoader());
DataPipe dataPipe = i.hasNext() ? (DataPipe) i.next() : null;
Object sink = dataPipe != null ? dataPipe.getSink() : target;
((PushTransformer) transformer).transform(result, sink, context);
@@ -109,5 +150,4 @@
}
return path;
}
-
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java Fri Sep 8 14:37:43 2006
@@ -229,6 +229,17 @@
VertexPair pair = new VertexPair(source, target);
if (paths.containsKey(pair))
return paths.get(pair);
+
+ // HACK: To support same vertex
+ if (source == target) {
+ Path path = new Path();
+ Edge edge = getEdge(source, target);
+ if (edge != null) {
+ path.addEdge(edge);
+ }
+ paths.put(pair, path);
+ return path;
+ }
Map<Vertex, Node> nodes = new HashMap<Vertex, Node>();
for (Vertex v : vertices.values()) {
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java Fri Sep 8 14:37:43 2006
@@ -21,7 +21,9 @@
import org.apache.tuscany.databinding.PullTransformer;
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformationException;
+import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
import org.w3c.dom.Node;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSSerializer;
@@ -30,6 +32,7 @@
* Transform DOM Node to XML String
*
*/
+@Service(Transformer.class)
public class Node2String extends TransformerExtension<Node, String> implements PullTransformer<Node, String> {
public String transform(Node source, TransformationContext context) {
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java Fri Sep 8 14:37:43 2006
@@ -25,10 +25,13 @@
import org.apache.tuscany.databinding.PullTransformer;
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformationException;
+import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
+@Service(Transformer.class)
public class String2Node extends TransformerExtension<String, Node> implements PullTransformer<String, Node> {
public Node transform(String source, TransformationContext context) {
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl Fri Sep 8 14:37:43 2006
@@ -15,15 +15,28 @@
* limitations under the License.
-->
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
- name="org.apache.tuscany.launcher.DataBinding">
+ name="org.apache.tuscany.databinding.Framework">
+
+ <component name="databinding.wirePostProcessor">
+ <system:implementation.system class="org.apache.tuscany.databinding.impl.DataBindingWirePostProcessor"/>
+ </component>
+
+ <component name="databinding.javaInterfaceProcessor">
+ <system:implementation.system class="org.apache.tuscany.databinding.impl.DataBindingJavaInterfaceProcessor"/>
+ </component>
<!-- DataBinding registry -->
- <component name="dataBindingRegistry">
+ <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="transformerRegistry">
+ <component name="databinding.transformerRegistry" initLevel="90">
<system:implementation.system class="org.apache.tuscany.databinding.impl.TransformerRegistryImpl" />
</component>
@@ -35,6 +48,19 @@
<component name="databinding.dom">
<system:implementation.system class="org.apache.tuscany.databinding.impl.SimpleDataBinding" />
<property name="className">org.w3c.dom.Node</property>
+ </component>
+
+ <!-- Transformers -->
+ <component name="transformer.Node2String">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2String" />
+ </component>
+
+ <component name="transformer.String2Node">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.String2Node" />
+ </component>
+
+ <component name="transformer.ObjectArray2ObjectArray">
+ <system:implementation.system class="org.apache.tuscany.databinding.impl.JavaParametersTransformer" />
</component>
</composite>
Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java Fri Sep 8 14:37:43 2006
@@ -0,0 +1,99 @@
+/*
+ * 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.databinding.impl;
+
+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.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.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.easymock.EasyMock;
+
+/**
+ *
+ */
+public class DataBindingInterceptorTestCase extends TestCase {
+ private DataBindingInteceptor interceptor;
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.tuscany.databinding.impl.DataBindingInteceptor#invoke(org.apache.tuscany.spi.wire.Message)}.
+ */
+ 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");
+ Operation<Class> operation2 = new Operation<Class>("call", inputType2, type2, null, false, "org.w3c.dom.Node");
+ interceptor = new DataBindingInteceptor(null, operation1, null, 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(source, inputType1, inputType2)).andReturn(target);
+ expect(mediator.mediate(target[0], type2, type1)).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]);
+ 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);
+ }
+
+ private static class Foo {
+ private String bar;
+ }
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java Fri Sep 8 14:37:43 2006
@@ -0,0 +1,78 @@
+/*
+ * 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.databinding.impl;
+
+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.DataContext;
+import org.apache.tuscany.api.annotation.DataType;
+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 {
+ DataBindingJavaInterfaceProcessor processor = new DataBindingJavaInterfaceProcessor();
+ 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, "dummy");
+ Operation<Type> operation1 = new Operation<Type>("call1", null, null, null, false, "dummy");
+ operations.put("call", operation);
+ operations.put("call1", operation1);
+ contract.setOperations(operations);
+ processor.visitInterface(MockInterface.class, contract);
+ Assert.assertEquals("org.w3c.dom.Node", contract.getDataBinding());
+ Assert.assertEquals("element", (String) contract.getMetaData().get("nodeType"));
+ 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", context={@DataContext(key="nodeType", value="element")})
+ @Remotable
+ public static interface MockInterface {
+ Node call(Node msg);
+
+ @DataType(name = "xml:string")
+ String call1(String msg);
+ }
+
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java Fri Sep 8 14:37:43 2006
@@ -24,6 +24,7 @@
import junit.framework.Assert;
import junit.framework.TestCase;
+import org.apache.tuscany.databinding.DataBindingRegistry;
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformerRegistry;
import org.apache.tuscany.databinding.trax.Node2String;
@@ -63,6 +64,9 @@
mediator = new MediatorImpl();
mediator.setTransformerRegistry(registry);
+
+ DataBindingRegistry dataBindingRegistry = new DataBindingRegistryImpl();
+ mediator.setDataBindingRegistry(dataBindingRegistry);
}
@SuppressWarnings("unchecked")
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java Fri Sep 8 14:37:43 2006
@@ -41,6 +41,7 @@
graph.addEdge("c", "d", null, 2);
graph.addEdge("d", "b", null, 1);
graph.addEdge("a", "e", null, 8);
+ graph.addEdge("c", "c", null, 2);
}
public void testGraph() {
@@ -67,13 +68,16 @@
Assert.assertEquals(edges.get(1), graph.getEdge("b", "c"));
Assert.assertEquals(path.getWeight(), 4);
-
+
DirectedGraph<String, Object>.Path path2 = graph.getShortestPath("b", "e");
Assert.assertNull(path2);
DirectedGraph<String, Object>.Path path3 = graph.getShortestPath("a", "a");
- Assert.assertTrue(path3.getWeight()==0 && path3.getEdges().isEmpty());
-
+ Assert.assertTrue(path3.getWeight() == 0 && path3.getEdges().isEmpty());
+
+ DirectedGraph<String, Object>.Path path4 = graph.getShortestPath("c", "c");
+ Assert.assertTrue(path4.getWeight() == 2 && path4.getEdges().size() == 1);
+
// System.out.println(path);
}
Modified: incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java (original)
+++ incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java Fri Sep 8 14:37:43 2006
@@ -24,6 +24,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+
import javax.wsdl.Fault;
import javax.wsdl.Input;
import javax.wsdl.Message;
@@ -52,21 +53,21 @@
Input input = wsdlOp.getInput();
Message inputMsg = (input == null) ? null : input.getMessage();
- List<DataType<QName>> parameterTypes = introspectTypes(inputMsg);
+ DataType<List<DataType<QName>>> inputType = introspectType(inputMsg);
Message outputMsg;
Output output = wsdlOp.getOutput();
outputMsg = (output == null) ? null : output.getMessage();
List outputParts = (outputMsg == null) ? null : outputMsg.getOrderedParts(null);
- DataType<QName> returnType = null;
+ DataType<QName> outputType = null;
if (outputParts != null || outputParts.size() > 0) {
if (outputParts.size() > 1) {
// We don't support output with multiple parts
throw new NotSupportedWSDLException("Multi-part output is not supported");
}
Part part = (Part) outputParts.get(0);
- returnType = introspectType(part);
+ outputType = introspectType(part);
}
Collection faults = wsdlOp.getFaults().values();
@@ -86,14 +87,13 @@
// FIXME: [rfeng] How to figure the nonBlocking and dataBinding?
org.apache.tuscany.spi.model.Operation<QName> operation =
- new org.apache.tuscany.spi.model.Operation<QName>(name, returnType, parameterTypes, faultTypes,
- true, null);
+ new org.apache.tuscany.spi.model.Operation<QName>(name, inputType, outputType, faultTypes);
operations.put(name, operation);
}
return operations;
}
- protected List<DataType<QName>> introspectTypes(Message message) {
+ protected DataType<List<DataType<QName>>> introspectType(Message message) {
List<DataType<QName>> dataTypes = new ArrayList<DataType<QName>>();
if (message != null) {
List parts = message.getOrderedParts(null);
@@ -103,7 +103,8 @@
dataTypes.add(dataType);
}
}
- return dataTypes;
+ DataType<List<DataType<QName>>> msgType = new DataType<List<DataType<QName>>>(Object.class, dataTypes);
+ return msgType;
}
protected DataType<QName> introspectType(Part part) {
@@ -138,7 +139,7 @@
contract.setOperations(introspectOperations(portType));
contract.setCallbackPortType(callbackPortType);
contract.setCallbackName(callbackPortType.getQName().getLocalPart());
- contract.setCallbacksOperations(introspectOperations(callbackPortType));
+ contract.setCallbackOperations(introspectOperations(callbackPortType));
return contract;
}
Modified: incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java (original)
+++ incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java Fri Sep 8 14:37:43 2006
@@ -32,6 +32,15 @@
private PortType portType;
private PortType callbackPortType;
+ /**
+ *
+ */
+ public WSDLServiceContract() {
+ super();
+ this.remotable = true; // WSDL interface is always remotable by the SCA spec
+ }
+
+
public PortType getPortType() {
return portType;
}
Modified: incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java (original)
+++ incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java Fri Sep 8 14:37:43 2006
@@ -65,9 +65,9 @@
Assert.assertEquals(1, operations.size());
Operation<QName> operation = operations.get("getLastTradePrice");
Assert.assertNotNull(operation);
- List<DataType<QName>> inputTypes = operation.getParameterTypes();
- Assert.assertEquals(1, inputTypes.size());
- DataType<QName> returnType = operation.getReturnType();
+ DataType<List<DataType<QName>>> inputType = operation.getInputType();
+ Assert.assertEquals(1, inputType.getLogical().size());
+ DataType<QName> returnType = operation.getOutputType();
Assert.assertNotNull(returnType);
Assert.assertEquals(0, operation.getFaultTypes().size());
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java Fri Sep 8 14:37:43 2006
@@ -22,8 +22,12 @@
import java.util.List;
import java.util.Map;
-import org.osoa.sca.annotations.Constructor;
-
+import org.apache.tuscany.core.wire.BridgingInterceptor;
+import org.apache.tuscany.core.wire.InvokerInterceptor;
+import org.apache.tuscany.core.wire.MessageChannelImpl;
+import org.apache.tuscany.core.wire.MessageDispatcher;
+import org.apache.tuscany.core.wire.OutboundAutowire;
+import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
import org.apache.tuscany.spi.QualifiedName;
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.builder.BuilderConfigException;
@@ -46,13 +50,8 @@
import org.apache.tuscany.spi.wire.OutboundInvocationChain;
import org.apache.tuscany.spi.wire.OutboundWire;
import org.apache.tuscany.spi.wire.TargetInvoker;
-
-import org.apache.tuscany.core.wire.BridgingInterceptor;
-import org.apache.tuscany.core.wire.InvokerInterceptor;
-import org.apache.tuscany.core.wire.MessageChannelImpl;
-import org.apache.tuscany.core.wire.MessageDispatcher;
-import org.apache.tuscany.core.wire.OutboundAutowire;
-import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
+import org.apache.tuscany.spi.wire.WireService;
+import org.osoa.sca.annotations.Constructor;
/**
* The default connector implmentation
@@ -62,13 +61,16 @@
public class ConnectorImpl implements Connector {
private WirePostProcessorRegistry postProcessorRegistry;
+ private WireService wireService;
public ConnectorImpl() {
}
- @Constructor
- public ConnectorImpl(@Autowire WirePostProcessorRegistry postProcessorRegistry) {
+ @Constructor({"wireService", "postProcessorRegistry"})
+ public ConnectorImpl(@Autowire WireService wireService,
+ @Autowire WirePostProcessorRegistry postProcessorRegistry) {
this.postProcessorRegistry = postProcessorRegistry;
+ this.wireService = wireService;
}
public <T> void connect(SCAObject<T> source) {
@@ -352,9 +354,14 @@
e.setIdentifier(targetName.getPortName());
throw e;
}
- Class sourceInterface = sourceWire.getServiceContract().getInterfaceClass();
- Class targetInterface = targetWire.getServiceContract().getInterfaceClass();
- if (!sourceInterface.isAssignableFrom(targetInterface)) {
+ if (wireService == null) {
+ // FIXME: [rfeng] wireService won't be injected for the system connector?
+ Class sourceInterface = sourceWire.getServiceContract().getInterfaceClass();
+ Class targetInterface = targetWire.getServiceContract().getInterfaceClass();
+ if (!sourceInterface.isAssignableFrom(targetInterface)) {
+ throw new BuilderConfigException("Incompatible source and target interfaces");
+ }
+ } else if (!wireService.isWireable(sourceWire.getServiceContract(), targetWire.getServiceContract())) {
throw new BuilderConfigException("Incompatible source and target interfaces");
}
boolean optimizable = isOptimizable(source.getScope(), target.getScope());
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java Fri Sep 8 14:37:43 2006
@@ -80,12 +80,13 @@
contract.setInterfaceName(getBaseName(type));
contract.setInterfaceClass(type);
boolean remotable = type.isAnnotationPresent(Remotable.class);
+ contract.setRemotable(remotable);
contract.setOperations(getOperations(type, remotable));
if (callback != null) {
contract.setCallbackName(getBaseName(callback));
contract.setCallbackClass(callback);
- contract.setCallbacksOperations(getOperations(callback, remotable));
+ contract.setCallbackOperations(getOperations(callback, remotable));
}
Scope interactionScope = type.getAnnotation(Scope.class);
@@ -129,12 +130,10 @@
faultDataTypes.add(new DataType<Type>(faultType, faultType));
}
- org.apache.tuscany.api.annotation.DataType dataType =
- method.getAnnotation(org.apache.tuscany.api.annotation.DataType.class);
- String dataBinding = (dataType != null) ? dataType.name() : Object.class.getName();
-
+ String dataBinding = "java.lang.Object";
+ DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>("java:parameters", Object[].class, paramDataTypes);
Operation<Type> operation =
- new Operation<Type>(name, returnDataType, paramDataTypes, faultDataTypes, nonBlocking, dataBinding);
+ new Operation<Type>(name, inputType, returnDataType, faultDataTypes, nonBlocking, dataBinding);
operations.put(name, operation);
}
return operations;
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org