You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by fr...@apache.org on 2007/05/04 18:20:38 UTC

svn commit: r535315 - in /incubator/tuscany/java/sdo/impl/src: main/java/org/apache/tuscany/sdo/helper/ main/java/org/apache/tuscany/sdo/impl/ main/java/org/apache/tuscany/sdo/util/ test/java/org/apache/tuscany/sdo/test/

Author: frankb
Date: Fri May  4 09:20:37 2007
New Revision: 535315

URL: http://svn.apache.org/viewvc?view=rev&rev=535315
Log:
Fix for TUSCANY-1223

Modified:
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/AttributeImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java
    incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/SerializeTypesTestCase.java

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java?view=diff&rev=535315&r1=535314&r2=535315
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java Fri May  4 09:20:37 2007
@@ -155,7 +155,8 @@
   protected EClassifier getBuiltInEClassifier(String namespace, String name)
   {
     EClassifier eClassifier = (EClassifier)SDOUtil.getXSDSDOType(name);
-    if (eClassifier == null) {
+    if (eClassifier == null || "base64Binary".equals(name))
+    {
       eClassifier = super.getBuiltInEClassifier(namespace, name);
     }
     return eClassifier;

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/AttributeImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/AttributeImpl.java?view=diff&rev=535315&r1=535314&r2=535315
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/AttributeImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/AttributeImpl.java Fri May  4 09:20:37 2007
@@ -22,14 +22,18 @@
 import java.util.List;
 
 import org.apache.tuscany.sdo.SDOPackage;
+import org.apache.tuscany.sdo.model.ModelFactory;
+import org.apache.tuscany.sdo.model.impl.ModelFactoryImpl;
 import org.apache.tuscany.sdo.util.BasicSequence;
 import org.apache.tuscany.sdo.util.DataObjectUtil;
 import org.apache.tuscany.sdo.util.SDOUtil;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.EAttributeImpl;
 import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
 
 import commonj.sdo.Property;
 import commonj.sdo.Sequence;
@@ -123,12 +127,10 @@
    */
   public Type getType()
   {
-    return (Type)getEType();
-    /*
     EClassifier eType = getEType();
-    //FB More temporary hacks
-    return eType instanceof Type ? (Type)getEType() : null;
-    */
+    if (eType == XMLTypePackage.Literals.BASE64_BINARY)
+      return ((ModelFactoryImpl)ModelFactory.INSTANCE).getBytes();
+    return (Type)eType;
   }
 
   /**

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java?view=diff&rev=535315&r1=535314&r2=535315
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java Fri May  4 09:20:37 2007
@@ -70,6 +70,7 @@
 import org.eclipse.emf.ecore.xmi.impl.XMLOptionsImpl;
 import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;
 import org.eclipse.emf.ecore.xml.type.XMLTypeFactory;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
 import org.eclipse.xsd.util.XSDResourceFactoryImpl;
 
 import commonj.sdo.ChangeSummary;
@@ -383,7 +384,8 @@
   public static boolean isInternalProperty(EStructuralFeature eStructuralFeature)
   {
     //return FeatureMapUtil.isFeatureMap(eStructuralFeature);
-    return !(eStructuralFeature.getEType() instanceof Type);
+    EClassifier eClassifier = eStructuralFeature.getEType();
+    return !(eClassifier instanceof Type || eClassifier == XMLTypePackage.Literals.BASE64_BINARY);
   }
 
   public static List getInstanceProperties(DataObject dataObject)

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java?view=diff&rev=535315&r1=535314&r2=535315
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java Fri May  4 09:20:37 2007
@@ -181,16 +181,8 @@
   public static Type getXSDSDOType(String xsdType)
   {    
     Type type = null;
-    //if ("anyType".equals(xsdType)) {
-    //  type = (Type)SDOPackage.eINSTANCE.getDataObject();
-    //} else {
-      String name = (String)xsdToSdoMappings.get(xsdType);
-      if (name != null) {
-        type = (Type)((ModelFactoryImpl)ModelFactory.INSTANCE).getEClassifier(name);
-      } else {
-        type = (Type)SDOExtendedMetaData.INSTANCE.getType(XMLTypePackage.eINSTANCE, xsdType);
-      }
-    //}
+    String name = (String)xsdToSdoMappings.get(xsdType);
+    if (name != null) type = (Type)((ModelFactoryImpl)ModelFactory.INSTANCE).getEClassifier(name);
     return type;
   }
   
@@ -866,7 +858,7 @@
     xsdToSdoMappings.put("anySimpleType", "Object");
     xsdToSdoMappings.put("anyType", "DataObject");
     xsdToSdoMappings.put("anyURI", "URI");
-    xsdToSdoMappings.put("base64Binary", "Base64Bytes");
+    xsdToSdoMappings.put("base64Binary", "Bytes");
     xsdToSdoMappings.put("boolean", "Boolean");
     xsdToSdoMappings.put("byte", "Byte");
     xsdToSdoMappings.put("date", "YearMonthDay");

Modified: incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/SerializeTypesTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/SerializeTypesTestCase.java?view=diff&rev=535315&r1=535314&r2=535315
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/SerializeTypesTestCase.java (original)
+++ incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/SerializeTypesTestCase.java Fri May  4 09:20:37 2007
@@ -34,6 +34,7 @@
 import commonj.sdo.helper.DataFactory;
 import commonj.sdo.helper.HelperContext;
 import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.XMLDocument;
 
 public class SerializeTypesTestCase extends TestCase {
 
@@ -125,5 +126,65 @@
         assertEquals(loadedRootObject.get("lastName"), customer1.get("lastName"));
         DataObject loadedAddress = loadedRootObject.getDataObject("address");
         assertEquals(loadedAddress.get("addrSt"), address.get("addrSt"));
+    }
+    
+    private String xsdString =
+        "<xsd:schema targetNamespace=\"http://www.example.com/simple\" " +
+            "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + 
+            "xmlns:simple=\"http://www.example.com/simple\"> " + 
+            "<xsd:element name=\"bytesTypeTest\" type=\"simple:BytesTypeTest\"/> " +
+            "<xsd:complexType name=\"BytesTypeTest\"> " +
+                "<xsd:sequence> " +
+                    "<xsd:element name=\"base64Binary\" type=\"xsd:base64Binary\"/> " +
+                    "<xsd:element name=\"hexBinary\" type=\"xsd:hexBinary\"/> " +
+                "</xsd:sequence> " +
+            "</xsd:complexType> " +
+        "</xsd:schema>";
+
+    
+    private String testString = "Hello World";
+    private String testStringInBase64 = "SGVsbG8gV29ybGQ=";
+    private String testStringInHex = "48656C6C6F20576F726C64";
+    
+    public void testSerializeXSDBase64BinaryRoundTrip() throws Exception {
+        hc.getXSDHelper().define(xsdString);
+        
+        DataObject typeTest = hc.getDataFactory().create("http://www.example.com/simple", "BytesTypeTest");
+        typeTest.setBytes("base64Binary", testString.getBytes());
+        
+        String output = hc.getXMLHelper().save(typeTest, typeTest.getType().getURI(), "bytesTypeTest");
+        
+        String startTag = "<base64Binary>";
+        String endTag = "</base64Binary>";
+        int start = output.indexOf(startTag) + startTag.length();
+        int end = output.indexOf(endTag);
+        
+        String value = output.substring(start, end);
+        assertEquals(testStringInBase64, value);
+        
+        XMLDocument xmlDoc = hc.getXMLHelper().load(output);
+        typeTest = xmlDoc.getRootObject();
+        assertEquals(testString, new String(typeTest.getBytes("base64Binary")));
+    }
+    
+    public void testSerializeXSDHexBinaryRoundTrip() throws Exception {
+        hc.getXSDHelper().define(xsdString);
+        
+        DataObject typeTest = hc.getDataFactory().create("http://www.example.com/simple", "BytesTypeTest");
+        typeTest.setBytes("hexBinary", testString.getBytes());
+        
+        String output = hc.getXMLHelper().save(typeTest, typeTest.getType().getURI(), "bytesTypeTest");
+        
+        String startTag = "<hexBinary>";
+        String endTag = "</hexBinary>";
+        int start = output.indexOf(startTag) + startTag.length();
+        int end = output.indexOf(endTag);
+        
+        String value = output.substring(start, end);
+        assertEquals(testStringInHex, value);
+        
+        XMLDocument xmlDoc = hc.getXMLHelper().load(output);
+        typeTest = xmlDoc.getRootObject();
+        assertEquals(testString, new String(typeTest.getBytes("hexBinary")));
     }
 }



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