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/02/14 01:10:54 UTC

svn commit: r507322 - in /incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src: main/java/org/apache/tuscany/databinding/sdo/ test/java/org/apache/tuscany/databinding/sdo/

Author: rfeng
Date: Tue Feb 13 16:10:53 2007
New Revision: 507322

URL: http://svn.apache.org/viewvc?view=rev&rev=507322
Log:
[sca-integration-branch] Merged some changes from trunk

Modified:
    incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObjectLoader.java
    incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/ImportSDOLoader.java
    incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
    incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
    incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/ImportSDOLoaderTestCase.java

Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObjectLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObjectLoader.java?view=diff&rev=507322&r1=507321&r2=507322
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObjectLoader.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObjectLoader.java Tue Feb 13 16:10:53 2007
@@ -35,6 +35,7 @@
 
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
+import commonj.sdo.helper.HelperContext;
 import commonj.sdo.helper.TypeHelper;
 import commonj.sdo.helper.XSDHelper;
 import org.osoa.sca.annotations.Init;
@@ -60,10 +61,13 @@
         this.propertyQName = propertyQName;
     }
 
-    public ModelObject load(CompositeComponent parent, ModelObject object, XMLStreamReader reader, DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
+    public ModelObject load(CompositeComponent parent,
+                            ModelObject object,
+                            XMLStreamReader reader,
+                            DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
         assert propertyQName.equals(reader.getName());
-        // TODO: We need a way to get TypeHelper from deploymentContext
-        TypeHelper typeHelper = TypeHelper.INSTANCE;
+        HelperContext helperContext = SDODataTypeHelper.getHelperContext(deploymentContext);
+        TypeHelper typeHelper = helperContext.getTypeHelper();
         XMLStreamHelper streamHelper = SDOUtil.createXMLStreamHelper(typeHelper);
         DataObject dataObject = streamHelper.loadObject(reader);
         // TODO: Is it required that the object always extends from ModelObject?

Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/ImportSDOLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/ImportSDOLoader.java?view=diff&rev=507322&r1=507321&r2=507322
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/ImportSDOLoader.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/ImportSDOLoader.java Tue Feb 13 16:10:53 2007
@@ -20,6 +20,8 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.net.URI;
 import java.net.URL;
 
@@ -27,7 +29,6 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import org.apache.tuscany.sdo.util.SDOUtil;
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
@@ -40,6 +41,7 @@
 
 import commonj.sdo.helper.HelperContext;
 import commonj.sdo.helper.XSDHelper;
+import commonj.sdo.impl.HelperProvider;
 
 /**
  * Loader that handles <import.sdo> elements.
@@ -50,9 +52,8 @@
     public static final QName IMPORT_SDO =
         new QName("http://tuscany.apache.org/xmlns/sca/databinding/sdo/1.0", "import.sdo");
 
-    @Constructor( {"registry"})
-    public ImportSDOLoader(@Autowire
-    LoaderRegistry registry) {
+    @Constructor({"registry"})
+    public ImportSDOLoader(@Autowire LoaderRegistry registry) {
         super(registry);
     }
 
@@ -68,26 +69,16 @@
 
         // FIXME: [rfeng] How to associate the TypeHelper with deployment
         // context?
-        HelperContext helperContext = null;
-        if (deploymentContext != null && deploymentContext.getParent() != null) {
-            helperContext = (HelperContext)deploymentContext.getParent().getExtension(HelperContext.class.getName());
-            if (helperContext == null) {
-                helperContext = SDOUtil.createHelperContext();
-                deploymentContext.getParent().putExtension(HelperContext.class.getName(), helperContext);
-            }
-        }
-
-        if (helperContext == null) {
-            helperContext = SDOUtil.createHelperContext();
-        }
+        HelperContext helperContext = SDODataTypeHelper.getHelperContext(deploymentContext);
 
-        importFactory(reader, deploymentContext);
+        importFactory(reader, deploymentContext, helperContext);
         importWSDL(reader, deploymentContext, helperContext);
         LoaderUtil.skipToEndElement(reader);
         return new SDOType(helperContext);
     }
 
-    private void importFactory(XMLStreamReader reader, DeploymentContext deploymentContext) throws LoaderException {
+    private void importFactory(XMLStreamReader reader, DeploymentContext deploymentContext, HelperContext helperContext)
+        throws LoaderException {
         String factoryName = reader.getAttributeValue(null, "factory");
         if (factoryName != null) {
             ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
@@ -96,22 +87,34 @@
                 ClassLoader cl = deploymentContext.getClassLoader();
                 Thread.currentThread().setContextClassLoader(cl);
                 Class<?> factoryClass = cl.loadClass(factoryName);
-                // FIXME: We require the SDO to provide an API to register
-                // static types in a given TypeHelper
-                SDOUtil.registerStaticTypes(factoryClass);
-            } catch (ClassNotFoundException e) {
+                register(factoryClass, helperContext);
+            } catch (Exception e) {
                 throw new LoaderException(e.getMessage(), e);
             } finally {
                 Thread.currentThread().setContextClassLoader(oldCL);
             }
         }
     }
+    
+    private static void register(Class factoryClass, HelperContext helperContext) throws Exception {
+        Field field = factoryClass.getField("INSTANCE");
+        Object factory = field.get(null);
+        Method method = factory.getClass().getMethod("register", new Class[] {HelperContext.class});
+
+        method.invoke(factory, new Object[] {helperContext});
+
+        // FIXME: How do we associate the application HelperContext with the one
+        // imported by the composite
+        HelperContext defaultContext = HelperProvider.getDefaultContext();
+        method.invoke(factory, new Object[] {defaultContext});
+    }
 
     private void importWSDL(XMLStreamReader reader, DeploymentContext deploymentContext, HelperContext helperContext)
         throws LoaderException {
         String location = reader.getAttributeValue(null, "location");
-        if (location == null)
+        if (location == null) {
             location = reader.getAttributeValue(null, "wsdlLocation");
+        }    
         if (location != null) {
             try {
                 URL wsdlURL = null;
@@ -143,9 +146,9 @@
     public static class SDOType extends ModelObject {
         private HelperContext helperContext;
 
-        public SDOType(HelperContext typeHelper) {
+        public SDOType(HelperContext helperContext) {
             super();
-            this.helperContext = typeHelper;
+            this.helperContext = helperContext;
         }
 
         public HelperContext getHelperContext() {

Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java?view=diff&rev=507322&r1=507321&r2=507322
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java Tue Feb 13 16:10:53 2007
@@ -21,6 +21,7 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.spi.databinding.SimpleTypeMapper;
 import org.apache.tuscany.spi.databinding.WrapperHandler;
 import org.apache.tuscany.spi.databinding.extension.DataBindingExtension;
 import org.apache.tuscany.spi.model.DataType;
@@ -31,18 +32,35 @@
 import commonj.sdo.helper.XSDHelper;
 
 /**
+ * SDO Databinding
  * 
+ * @version $Reve$ $Date$
  */
 public class SDODataBinding extends DataBindingExtension {
     private WrapperHandler<Object> wrapperHandler;
-    
+
+    public SDODataBinding() {
+        super(DataObject.class);
+        wrapperHandler = new SDOWrapperHandler();
+    }
+
     @Override
     public DataType introspect(Class<?> javaType) {
-        if (javaType == DataObject.class) {
-            return new DataType<QName>(getName(), javaType, null);
+        if (javaType == null) {
+            return null;
         }
+        // FIXME: Need a better to test dynamic SDO
+        if (DataObject.class.isAssignableFrom(javaType)) {
+            // Dynamic SDO
+            return new DataType<QName>(getName(), javaType, null);
+        }         
+        // FIXME: We need to access HelperContext
         Type type = TypeHelper.INSTANCE.getType(javaType);
-        if (type == null || type.isDataType()) {
+        if (type == null) {
+            return null;
+        }
+        if (type.isDataType()) {
+            // FIXME: Ignore simple types? 
             return null;
         }
         String namespace = type.getURI();
@@ -52,14 +70,13 @@
         return dataType;
     }
 
-    public SDODataBinding() {
-        super(DataObject.class);
-        wrapperHandler = new SDOWrapperHandler();
-    }
-
     @Override
     public WrapperHandler getWrapperHandler() {
         return wrapperHandler;
+    }
+
+    public SimpleTypeMapper getSimpleTypeMapper() {
+        return new SDOSimpleTypeMapper();
     }
 
 }

Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java?view=diff&rev=507322&r1=507321&r2=507322
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java Tue Feb 13 16:10:53 2007
@@ -23,13 +23,14 @@
 import org.apache.tuscany.sdo.util.SDOUtil;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.databinding.TransformationContext;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
 
 import commonj.sdo.helper.HelperContext;
 
 /**
- * Helper class to get TypeHelper from the transformation context
+ * Helper class to get TypeHelper from the context
  */
-public class SDODataTypeHelper {
+public final class SDODataTypeHelper {
     private SDODataTypeHelper() {
     }
 
@@ -50,5 +51,22 @@
         } else {
             return helperContext;
         }
+    }
+    
+    public static HelperContext getHelperContext(DeploymentContext deploymentContext) {
+        HelperContext helperContext = null;
+        if (deploymentContext != null && deploymentContext.getParent() != null) {
+            helperContext = (HelperContext)deploymentContext.getParent().getExtension(HelperContext.class.getName());
+            if (helperContext == null) {
+                helperContext = SDOUtil.createHelperContext();
+                deploymentContext.getParent().putExtension(HelperContext.class.getName(), helperContext);
+            }
+        }
+
+        if (helperContext == null) {
+            helperContext = SDOUtil.createHelperContext();
+        }
+        
+        return helperContext;
     }
 }

Modified: incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/ImportSDOLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/ImportSDOLoaderTestCase.java?view=diff&rev=507322&r1=507321&r2=507322
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/ImportSDOLoaderTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/ImportSDOLoaderTestCase.java Tue Feb 13 16:10:53 2007
@@ -28,10 +28,11 @@
 
 import org.apache.tuscany.core.deployer.RootDeploymentContext;
 import org.apache.tuscany.databinding.sdo.ImportSDOLoader.SDOType;
-import org.apache.tuscany.sdo.model.ModelFactory;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.loader.LoaderException;
 
+import com.example.ipo.sdo.SdoFactory;
+
 /**
  * @version $Rev$ $Date$
  */
@@ -77,7 +78,7 @@
     }
 
     public static class MockFactory {
-        public static final Object INSTANCE = ModelFactory.INSTANCE;
+        public static final Object INSTANCE = SdoFactory.INSTANCE;
 
         static {
             ImportSDOLoaderTestCase.inited = true;



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