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/07/09 18:58:07 UTC

svn commit: r554707 - in /incubator/tuscany/java/sca/modules: core-databinding/src/main/java/org/apache/tuscany/core/databinding/module/ databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/ databinding/src/main/java/org/apache/tuscany/sca...

Author: rfeng
Date: Mon Jul  9 09:58:04 2007
New Revision: 554707

URL: http://svn.apache.org/viewvc?view=rev&rev=554707
Log:
Separate the simple and complex java databinding

Added:
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java   (with props)
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java   (with props)
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java   (with props)
Modified:
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/core/databinding/module/DataBindingModuleActivator.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Java2SimpleTypeTransformer.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleType2JavaTransformer.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleTypeMapperImpl.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/core/databinding/module/DataBindingModuleActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/core/databinding/module/DataBindingModuleActivator.java?view=diff&rev=554707&r1=554706&r2=554707
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/core/databinding/module/DataBindingModuleActivator.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/core/databinding/module/DataBindingModuleActivator.java Mon Jul  9 09:58:04 2007
@@ -35,18 +35,21 @@
 import org.apache.tuscany.sca.databinding.javabeans.DOMNode2JavaBeanTransformer;
 import org.apache.tuscany.sca.databinding.javabeans.JavaBean2DOMNodeTransformer;
 import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
+import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding;
 import org.apache.tuscany.sca.databinding.xml.DOMDataBinding;
 import org.apache.tuscany.sca.databinding.xml.InputSource2Node;
 import org.apache.tuscany.sca.databinding.xml.InputSource2SAX;
 import org.apache.tuscany.sca.databinding.xml.InputStream2Node;
 import org.apache.tuscany.sca.databinding.xml.InputStream2SAX;
 import org.apache.tuscany.sca.databinding.xml.Node2OutputStream;
+import org.apache.tuscany.sca.databinding.xml.Node2SimpleJavaType;
 import org.apache.tuscany.sca.databinding.xml.Node2String;
 import org.apache.tuscany.sca.databinding.xml.Node2Writer;
 import org.apache.tuscany.sca.databinding.xml.Node2XMLStreamReader;
 import org.apache.tuscany.sca.databinding.xml.Reader2Node;
 import org.apache.tuscany.sca.databinding.xml.Reader2SAX;
 import org.apache.tuscany.sca.databinding.xml.SAX2DOMPipe;
+import org.apache.tuscany.sca.databinding.xml.SimpleJavaType2Node;
 import org.apache.tuscany.sca.databinding.xml.Source2ResultTransformer;
 import org.apache.tuscany.sca.databinding.xml.StreamDataPipe;
 import org.apache.tuscany.sca.databinding.xml.String2Node;
@@ -112,6 +115,10 @@
         JavaBeansDataBinding javaBeansDataBinding = new JavaBeansDataBinding();
         javaBeansDataBinding.setDataBindingRegistry(dataBindings);
         dataBindings.addDataBinding(javaBeansDataBinding);
+        
+        SimpleJavaDataBinding simpleJavaDataBinding = new SimpleJavaDataBinding();
+        simpleJavaDataBinding.setDataBindingRegistry(dataBindings);
+        dataBindings.addDataBinding(simpleJavaDataBinding);
 
         Group2GroupTransformer group2GroupTransformer = new Group2GroupTransformer();
         group2GroupTransformer.setMediator(mediator);
@@ -144,6 +151,9 @@
         transformers.addTransformer(new XMLStreamReader2Node());
         transformers.addTransformer(new XMLStreamReader2SAX());
         transformers.addTransformer(new XMLStreamReader2String());
+        
+        transformers.addTransformer(new Node2SimpleJavaType());
+        transformers.addTransformer(new SimpleJavaType2Node());
     }
 
     public void stop(ExtensionPointRegistry registry) {

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Java2SimpleTypeTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Java2SimpleTypeTransformer.java?view=diff&rev=554707&r1=554706&r2=554707
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Java2SimpleTypeTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/Java2SimpleTypeTransformer.java Mon Jul  9 09:58:04 2007
@@ -23,6 +23,7 @@
 import org.apache.tuscany.sca.databinding.PullTransformer;
 import org.apache.tuscany.sca.databinding.SimpleTypeMapper;
 import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
@@ -56,5 +57,10 @@
     }
 
     protected abstract T createElement(QName element, String literal, TransformationContext context);
+
+    @Override
+    public String getSourceDataBinding() {
+        return SimpleJavaDataBinding.NAME;
+    }
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleType2JavaTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleType2JavaTransformer.java?view=diff&rev=554707&r1=554706&r2=554707
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleType2JavaTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleType2JavaTransformer.java Mon Jul  9 09:58:04 2007
@@ -18,9 +18,12 @@
  */
 package org.apache.tuscany.sca.databinding.impl;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.databinding.PullTransformer;
 import org.apache.tuscany.sca.databinding.SimpleTypeMapper;
 import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
@@ -41,8 +44,13 @@
     }
 
     public Object transform(T source, TransformationContext context) {
-        XMLType xmlType = (XMLType) context.getSourceDataType().getLogical();
-        return mapper.toJavaObject(xmlType.getTypeName(), getText(source), context);
+        XMLType xmlType = (XMLType)context.getSourceDataType().getLogical();
+        QName type = (xmlType != null) ? xmlType.getTypeName() : null;
+        if (type == null) {
+            xmlType = (XMLType)context.getTargetDataType().getLogical();
+            type = (xmlType != null) ? xmlType.getTypeName() : null;
+        }
+        return mapper.toJavaObject(type, getText(source), context);
     }
 
     public Class getTargetType() {
@@ -60,4 +68,9 @@
      * @return A string
      */
     protected abstract String getText(T source);
+
+    @Override
+    public String getTargetDataBinding() {
+        return SimpleJavaDataBinding.NAME;
+    }
 }

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleTypeMapperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleTypeMapperImpl.java?view=diff&rev=554707&r1=554706&r2=554707
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleTypeMapperImpl.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/SimpleTypeMapperImpl.java Mon Jul  9 09:58:04 2007
@@ -232,7 +232,7 @@
         }
     }
 
-    public TypeInfo getXMLType(Class javaType) {
+    public static TypeInfo getXMLType(Class javaType) {
         return XSD_SIMPLE_TYPES.get(JAVA2XML.get(javaType));
     }
 

Added: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java?view=auto&rev=554707
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java (added)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java Mon Jul  9 09:58:04 2007
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.databinding.javabeans;
+
+import java.lang.annotation.Annotation;
+
+import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
+import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
+
+/**
+ * DataBinding for Java simple types
+ */
+public class SimpleJavaDataBinding extends BaseDataBinding {
+    public static final String NAME = "java:simpleType";
+
+    public SimpleJavaDataBinding() {
+        super(NAME, Object.class);
+    }
+
+    public Object copy(Object arg) {
+        return arg;
+    }
+
+    @Override
+    public boolean introspect(DataType type, Annotation[] annotations) {
+        Class<?> cls = type.getPhysical();
+        if (cls == Object.class) {
+            return false;
+        }
+        if (SimpleTypeMapperImpl.JAVA2XML.keySet().contains(cls)) {
+            type.setDataBinding(getName());
+            type.setLogical(new XMLType(SimpleTypeMapperImpl.getXMLType(cls)));
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java?view=diff&rev=554707&r1=554706&r2=554707
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java Mon Jul  9 09:58:04 2007
@@ -19,8 +19,14 @@
 package org.apache.tuscany.sca.databinding.xml;
 
 
+import java.lang.annotation.Annotation;
+
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.w3c.dom.Node;
 
 /**
@@ -32,6 +38,9 @@
     public static final String NAME = Node.class.getName();
     public static final String[] ALIASES = new String[] {"dom"};
 
+    public static final String ROOT_NAMESPACE = "http://tuscany.apache.org/xmlns/sca/databinding/dom/1.0";
+    public static final QName ROOT_ELEMENT = new QName(ROOT_NAMESPACE, "root");
+
     public DOMDataBinding() {
         super(NAME, ALIASES, Node.class);
     }
@@ -47,5 +56,14 @@
             return nodeSource.cloneNode(true);
         }
         return super.copy(source);
+    }
+
+    @Override
+    public boolean introspect(DataType type, Annotation[] annotations) {
+        if(Node.class.isAssignableFrom(type.getPhysical())) {
+            type.setLogical(new XMLType(ROOT_ELEMENT, null));
+            return true;
+        }
+        return false;
     }
 }

Added: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java?view=auto&rev=554707
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java (added)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java Mon Jul  9 09:58:04 2007
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.databinding.xml;
+
+import org.apache.tuscany.sca.databinding.impl.SimpleType2JavaTransformer;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+/**
+ * Transformer to convert data from a simple java bject to OMElement
+ */
+public class Node2SimpleJavaType extends SimpleType2JavaTransformer<Node> {
+
+    @Override
+    protected String getText(Node source) {
+        if (source instanceof Document) {
+            source = ((Document)source).getDocumentElement();
+        }
+        return source.getTextContent();
+
+    }
+
+    public Class getSourceType() {
+        return Node.class;
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/Node2SimpleJavaType.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java?view=auto&rev=554707
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java (added)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java Mon Jul  9 09:58:04 2007
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.databinding.xml;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.impl.DOMHelper;
+import org.apache.tuscany.sca.databinding.impl.Java2SimpleTypeTransformer;
+import org.apache.tuscany.sca.databinding.javabeans.Java2XMLMapperException;
+import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+/**
+ * Transformer to convert data from an simple OMElement to Java Object
+ */
+public class SimpleJavaType2Node extends Java2SimpleTypeTransformer<Node> {
+
+    private Document factory;
+
+    public SimpleJavaType2Node() {
+        super();
+        try {
+            factory = DOMHelper.newDocument();
+        } catch (ParserConfigurationException e) {
+            throw new Java2XMLMapperException(e);
+        }
+    }
+
+    protected Node createElement(QName element, String text, TransformationContext context) {
+        if (element == null) {
+            element = DOMDataBinding.ROOT_ELEMENT;
+        }
+        Node root = DOMHelper.createElement(factory, element);
+        root.appendChild(factory.createTextNode(text));
+        return root;
+    }
+
+    @Override
+    public Class getTargetType() {
+        return Node.class;
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/SimpleJavaType2Node.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