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 2006/08/02 19:54:10 UTC

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

Author: frankb
Date: Wed Aug  2 10:54:09 2006
New Revision: 428070

URL: http://svn.apache.org/viewvc?rev=428070&view=rev
Log:
TUSCANY-535 Tuscany-SDO-Impl-Patch-Jul-30.diff

Removed:
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOAnnotationsDecorator.java
Modified:
    incubator/tuscany/java/sdo/impl/pom.xml
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java
    incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java

Modified: incubator/tuscany/java/sdo/impl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/pom.xml?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/pom.xml (original)
+++ incubator/tuscany/java/sdo/impl/pom.xml Wed Aug  2 10:54:09 2006
@@ -82,37 +82,7 @@
             <optional>true</optional>
         </dependency>
 
-        <!-- dependencies for optional AXIOM functions -->
-        <dependency>
-            <groupId>org.apache.ws.commons</groupId>
-            <artifactId>XmlSchema</artifactId>
-            <version>1.0.2</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>ws-commons</groupId>
-            <artifactId>axiom-api</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>ws-commons</groupId>
-            <artifactId>axiom-impl</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.0.4</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- dependencies for test cases -->
+       <!-- dependencies for test cases -->
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java Wed Aug  2 10:54:09 2006
@@ -1,8 +1,5 @@
 package org.apache.tuscany.sdo.helper;
 
-import java.lang.reflect.Constructor;
-import java.util.Collection;
-import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
@@ -13,25 +10,26 @@
 import javax.xml.namespace.QName;
 
 import org.apache.tuscany.sdo.util.SDOUtil;
-import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.commons.schema.XmlSchemaAny;
-import org.apache.ws.commons.schema.XmlSchemaAnyAttribute;
-import org.apache.ws.commons.schema.XmlSchemaAttribute;
-import org.apache.ws.commons.schema.XmlSchemaChoice;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
-import org.apache.ws.commons.schema.XmlSchemaComplexContent;
-import org.apache.ws.commons.schema.XmlSchemaComplexContentExtension;
-import org.apache.ws.commons.schema.XmlSchemaComplexType;
-import org.apache.ws.commons.schema.XmlSchemaContentProcessing;
-import org.apache.ws.commons.schema.XmlSchemaElement;
-import org.apache.ws.commons.schema.XmlSchemaGroupBase;
-import org.apache.ws.commons.schema.XmlSchemaImport;
-import org.apache.ws.commons.schema.XmlSchemaInclude;
-import org.apache.ws.commons.schema.XmlSchemaSequence;
-import org.apache.ws.commons.schema.XmlSchemaSimpleType;
-import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
+import org.eclipse.xsd.XSDAttributeDeclaration;
+import org.eclipse.xsd.XSDAttributeUse;
+import org.eclipse.xsd.XSDComplexTypeDefinition;
+import org.eclipse.xsd.XSDCompositor;
+import org.eclipse.xsd.XSDConstraint;
+import org.eclipse.xsd.XSDDerivationMethod;
+import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDFactory;
+import org.eclipse.xsd.XSDForm;
+import org.eclipse.xsd.XSDImport;
+import org.eclipse.xsd.XSDInclude;
+import org.eclipse.xsd.XSDModelGroup;
+import org.eclipse.xsd.XSDParticle;
+import org.eclipse.xsd.XSDProcessContents;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDSchemaContent;
+import org.eclipse.xsd.XSDSimpleTypeDefinition;
+import org.eclipse.xsd.XSDTypeDefinition;
+import org.eclipse.xsd.XSDWildcard;
 
-import commonj.sdo.DataObject;
 import commonj.sdo.Property;
 import commonj.sdo.Type;
 import commonj.sdo.helper.XSDHelper;
@@ -46,26 +44,21 @@
     //public static final String GROUP = "group";
     public static final String EFEATURE_MAP_ENTRY = "EFeatureMapEntry";
     
-    protected XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection();
     private Map schemaMap = null;
     protected Map targetNamespacePrefixMap = new Hashtable();
     protected Map schemaLocationMap = null;
     protected TypeTable typeTable = null;
-    protected Map sdoAnnoMap = new Hashtable();
+    protected XSDFactory xsdFactory = XSDFactory.eINSTANCE;
     
     
-    protected SchemaBuilder(XmlSchemaCollection schemaCollection,
-                                                Map schemaMap,
-                                                Map nsPrefixMap,
-                                                TypeTable typeTable,
-                                                Map annotationMap,
-                                                Map schemaLocMap )
+    protected SchemaBuilder(Map schemaMap,
+                            Map nsPrefixMap,
+                            TypeTable typeTable,
+                            Map schemaLocMap )
     {
         this.schemaMap = schemaMap;
-        this.xmlSchemaCollection = schemaCollection;
         this.targetNamespacePrefixMap = nsPrefixMap;
         this.typeTable = typeTable;
-        this.sdoAnnoMap = annotationMap;
         this.schemaLocationMap = schemaLocMap;
     }
         
@@ -73,10 +66,11 @@
     
     
     private QName addAttribute2ComplexType(String targetNamespace, 
-                                                XmlSchemaComplexType complexType, 
+                                                XSDComplexTypeDefinition complexType, 
                                                 Property aProperty) 
     {
         QName attributeSchemaType = null;
+        String prefix = null;
         
         try
         {
@@ -92,60 +86,76 @@
             if ( aProperty.getType().isDataType() )
             {
                 typeTable.addSimpleSchemaType(aProperty.getType().getName(), attributeSchemaType);
+                
+                XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
+                simpleType.setName(aProperty.getType().getName());
+                simpleType.setTargetNamespace(aProperty.getType().getURI());
+                typeTable.addXSDTypeDef(attributeSchemaType.getNamespaceURI(), 
+                                        attributeSchemaType.getLocalPart(), 
+                                        simpleType);
             }
             else
             {
                 typeTable.addComplexSchemaType(aProperty.getType().getURI(),
                                                 aProperty.getType().getName(),
                                                 attributeSchemaType);
+                
+                XSDComplexTypeDefinition extComplexType = xsdFactory.createXSDComplexTypeDefinition();
+                extComplexType.setName(aProperty.getType().getName());
+                extComplexType.setTargetNamespace(aProperty.getType().getURI());
+                typeTable.addXSDTypeDef(attributeSchemaType.getNamespaceURI(), 
+                                        attributeSchemaType.getLocalPart(), 
+                                        extComplexType);
             }
-            
             includeExtXSD(aProperty.getType());
         }
+        //ensure than an import is done rightaway so that the right prefixes will be used by the 
+        //attribute whose type is set as 'this type'.  Otherwise when setting the type for the attribute
+        //there will be a duplicate prefix (like Q1 or Q2... ) that will be created
+        prefix = addImports((XSDSchema)schemaMap.get(targetNamespace), attributeSchemaType);
         
-        XmlSchemaAttribute attribute  = new XmlSchemaAttribute();
+        XSDAttributeDeclaration attribute  = xsdFactory.createXSDAttributeDeclaration();
         attribute.setName(aProperty.getName());    
+        XSDAttributeUse orderDateAttributeUse = xsdFactory.createXSDAttributeUse();
+        orderDateAttributeUse.setContent(attribute);
+        complexType.getAttributeContents().add(orderDateAttributeUse);
+        attribute.updateElement();
         
-        if ( !aProperty.getAliasNames().isEmpty() )
+        if ( aProperty.getType().isDataType() )
         {
-            addAliasNamesAnnotation(targetNamespace, aProperty.getAliasNames(), ATTRIBUTE, aProperty.getName());
+            attribute.setTypeDefinition((XSDSimpleTypeDefinition)typeTable.getXSDTypeDef(attributeSchemaType.getNamespaceURI(), 
+                                            attributeSchemaType.getLocalPart()));
+            
         }
-        
-        if ( aProperty.isReadOnly() )
+        else
         {
-            addReadOnlyAnnotation(targetNamespace, aProperty.isReadOnly(), ATTRIBUTE, aProperty.getName());
+            attribute.setTypeDefinition((XSDSimpleTypeDefinition)typeTable.getXSDTypeDef(
+                    typeTable.getSimpleSchemaTypeName("URI").getNamespaceURI(), 
+                    typeTable.getSimpleSchemaTypeName("URI").getLocalPart()));
+            
         }
         
         if ( aProperty.getDefault() != null  )
         {
-            attribute.setDefaultValue(aProperty.getDefault().toString());
+            attribute.setConstraint(XSDConstraint.DEFAULT_LITERAL);
+            attribute.setLexicalValue(aProperty.getDefault().toString());
         }
-        
-        if ( aProperty.getType().isDataType() )
-        {
-            attribute.setSchemaTypeName(attributeSchemaType);
-        }
-        else
+
+        addAnnotations(attribute, aProperty );
+        if ( !aProperty.getType().isDataType() )
         {
-            attribute.setSchemaTypeName(typeTable.getSimpleSchemaTypeName("URI"));
-            //addPropertyTypeAnnotation(targetNamespace, attributeSchemaType, ATTRIBUTE, aProperty.getName());
+            String value = prefix + COLON + attributeSchemaType.getLocalPart();
+            attribute.getElement().setAttribute(PROPERTY_TYPE, value);
         }
         
-        if ( aProperty.getOpposite() != null )
-        {
-            addOppositePropertyAnnotation(targetNamespace,
-                                            aProperty.getOpposite().getName(),
-                                            ATTRIBUTE,
-                                            aProperty.getName());
-        }
-        complexType.getAttributes().add(attribute);
         return attributeSchemaType;
     }
     
     private QName addElement2ComplexType(String targetNamespace, 
-                                            XmlSchemaComplexType complexType, 
+                                            XSDComplexTypeDefinition complexType, 
                                             Property aProperty) 
     {
+        String prefix = null;
         QName elementSchemaType = null;
         try 
         {
@@ -161,67 +171,99 @@
             if ( aProperty.getType().isDataType() )
             {
                 typeTable.addSimpleSchemaType(aProperty.getType().getName(), elementSchemaType);
+                
+                XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
+                simpleType.setName(aProperty.getType().getName());
+                simpleType.setTargetNamespace(aProperty.getType().getURI());
+                typeTable.addXSDTypeDef(elementSchemaType.getNamespaceURI(), 
+                                        elementSchemaType.getLocalPart(), 
+                                        simpleType);
             }
             else
             {
                 typeTable.addComplexSchemaType(aProperty.getType().getURI(),
                                                 aProperty.getType().getName(),
                                                 elementSchemaType);
+                XSDComplexTypeDefinition extComplexType = xsdFactory.createXSDComplexTypeDefinition();
+                extComplexType.setName(aProperty.getType().getName());
+                extComplexType.setTargetNamespace(aProperty.getType().getURI());
+                typeTable.addXSDTypeDef(elementSchemaType.getNamespaceURI(), 
+                                        elementSchemaType.getLocalPart(), 
+                                        extComplexType);
             }
             includeExtXSD(aProperty.getType());
         }
         
-        XmlSchemaElement element = new XmlSchemaElement();
-        element.setName(aProperty.getName());
+        //ensure than an import is done rightaway so that the right prefixes will be used by the 
+        //element whose type is set as 'this type'.  Otherwise when setting the type for the element
+        //there will be a duplicate prefix (like Q1 or Q2... ) that will be created
+        prefix = addImports((XSDSchema)schemaMap.get(targetNamespace), elementSchemaType);
         
-        if ( !aProperty.getAliasNames().isEmpty() )
-        {
-            addAliasNamesAnnotation(targetNamespace, aProperty.getAliasNames(), ELEMENT, aProperty.getName());
-        }
+        //XmlSchemaElement element = new XmlSchemaElement();
+        XSDElementDeclaration element = xsdFactory.createXSDElementDeclaration();
+        element.setName(aProperty.getName());
+         
+        XSDParticle aParticle = xsdFactory.createXSDParticle();
+        aParticle.setContent(element);
         
-        if ( aProperty.isReadOnly() )
-        {
-            addReadOnlyAnnotation(targetNamespace, aProperty.isReadOnly(), ELEMENT, aProperty.getName());
-        }
+        ((XSDModelGroup)((XSDParticle)complexType.getContent()).getContent()).
+        getContents().add(aParticle);
         
+        element.updateElement();
+
         if ( aProperty.isMany() )
         {
-            element.setMaxOccurs(Long.MAX_VALUE);
-            element.setMinOccurs(0);
+            aParticle.setMaxOccurs(-1);
+            aParticle.setMinOccurs(0);
+            
         }
         
         if ( aProperty.isContainment() )
         {
-            element.setSchemaTypeName(elementSchemaType);
+            element.setTypeDefinition(typeTable.getXSDTypeDef(elementSchemaType.getNamespaceURI(),
+                                                                elementSchemaType.getLocalPart()));
         }
         else
         {
             if ( !aProperty.getType().isDataType() )
             {
-                element.setSchemaTypeName(typeTable.getSimpleSchemaTypeName("URI"));
-                //addPropertyTypeAnnotation(targetNamespace, elementSchemaType, ELEMENT, aProperty.getName());
-                
+                QName qName = typeTable.getSimpleSchemaTypeName("URI");
+                element.setTypeDefinition(typeTable.getXSDTypeDef(qName.getNamespaceURI(),
+                                            qName.getLocalPart())); 
             }
         }
         
-        if ( aProperty.getOpposite() != null )
+        addAnnotations(element, aProperty);
+        if ( !aProperty.isContainment() && !aProperty.getType().isDataType() )
         {
-            addOppositePropertyAnnotation(targetNamespace,
-                                            aProperty.getOpposite().getName(),
-                                            ELEMENT,
-                                            aProperty.getName());
+            String value = prefix + COLON + elementSchemaType.getLocalPart();
+            element.getElement().setAttribute(PROPERTY_TYPE, value);
         }
-        
-        ((XmlSchemaGroupBase)complexType.getParticle()).getItems().add(element);
-        
         return elementSchemaType;
         
     }
     
+    private void addAnnotations(XSDSchemaContent xsdContent, Property aProperty)
+    {
+        if ( !aProperty.getAliasNames().isEmpty() )
+        {
+            addAliasNamesAnnotation(xsdContent, aProperty.getAliasNames());
+        }
+        
+        if ( aProperty.isReadOnly() )
+        {
+            xsdContent.getElement().setAttribute(READ_ONLY, Boolean.toString(aProperty.isReadOnly()));
+        }
+        
+        if ( aProperty.getOpposite() != null )
+        {
+            xsdContent.getElement().setAttribute(OPPOSITE_PROPERTY, aProperty.getOpposite().getName());
+        }
+    }
     
     
     private QName buildComplexSchemaTypeContents(String targetNamespace, 
-                                                        XmlSchemaComplexType complexType, 
+                                                        XSDComplexTypeDefinition complexType, 
                                                         Type dataType)
     {
         //clipProperties(dataType);
@@ -236,34 +278,10 @@
             if ( aProperty.isContainment() || aProperty.isMany() || !aProperty.getType().isDataType() )
             {
                 propertySchemaTypeName = addElement2ComplexType(targetNamespace, complexType, aProperty);
-                String prefix = addImports((XmlSchema)schemaMap.get(targetNamespace), propertySchemaTypeName);
-                
-                //need to do this only after adding imports to ensure the right namespace prefix is used
-                if ( !aProperty.isContainment() && !aProperty.getType().isDataType() )
-                {
-                    addPropertyTypeAnnotation(targetNamespace, 
-                                                prefix,
-                                                aProperty.getType().getName(), 
-                                                ELEMENT, 
-                                                aProperty.getName());
-                    
-                }
-                
             }
             else
             {
                 propertySchemaTypeName = addAttribute2ComplexType(targetNamespace, complexType, aProperty);
-                String prefix = addImports((XmlSchema)schemaMap.get(targetNamespace), propertySchemaTypeName);
-                
-                //need to do this only after adding imports to ensure the right namespace prefix is used
-                if ( !aProperty.getType().isDataType() )
-                {
-                        addPropertyTypeAnnotation(targetNamespace, 
-                                                    prefix,
-                                                    aProperty.getType().getName(), 
-                                                    ATTRIBUTE, 
-                                                    aProperty.getName());
-                }
             }
             
             /*if ( !EFEATURE_MAP_ENTRY.equals(aProperty.getType().getName()) )
@@ -283,92 +301,98 @@
         if ( !dataType.isDataType() && 
                 (complexSchemaTypeName = typeTable.getComplexSchemaTypeName(dataType.getURI(), dataType.getName())) == null )
         {
+            XSDSchema xmlSchema = getXmlSchema(dataType);
             String targetNamespace = dataType.getURI(); 
-            XmlSchema xmlSchema = getXmlSchema(dataType);
-            
             String targetNamespacePrefix = (String)targetNamespacePrefixMap.get(targetNamespace);
+            
             complexSchemaTypeName = new QName(targetNamespace, 
                                                 dataType.getName(), 
                                                 targetNamespacePrefix);
             
-            
-            XmlSchemaComplexType complexType = new XmlSchemaComplexType(xmlSchema);
+            XSDComplexTypeDefinition complexType = xsdFactory.createXSDComplexTypeDefinition();
             complexType.setName(dataType.getName());
+            complexType.setTargetNamespace(targetNamespace);     
             complexType.setAbstract(dataType.isAbstract());
             
-            //add annotations for alias names
-            if ( !dataType.getAliasNames().isEmpty() )
-            {
-                addAliasNamesAnnotation(targetNamespace,
-                                        dataType.getAliasNames(), 
-                                        COMPLEX_TYPE, 
-                                        dataType.getName());
-            }
-            //add annotations for java instance class
-            if ( dataType.getInstanceClass() != null )
-            {
-                addInstanceClassAnnotation(targetNamespace,
-                                    dataType.getInstanceClass().getName(), 
-                                    COMPLEX_TYPE, 
-                                    dataType.getName());
-            }
+            xmlSchema.getTypeDefinitions().add(complexType);
+            xmlSchema.getContents().add(complexType);
+            
+            complexType.updateElement();
+            
+            addAnnotations(complexType, dataType);
             
             handleBaseExtn(xmlSchema, dataType, complexType);
             handleSDOSequence(dataType, complexType);
             handleSDOOpenType(dataType, complexType);
-            createGlobalElement(xmlSchema, complexType, complexSchemaTypeName);
             
-            xmlSchema.getItems().add(complexType);
-            xmlSchema.getSchemaTypes().add(complexSchemaTypeName, complexType);
+            //add before constructing the contents because a content element could
+            //possibly be of type 'complexType'. 
             typeTable.addComplexSchemaType(dataType.getURI(), dataType.getName(), complexSchemaTypeName);
+            typeTable.addXSDTypeDef(dataType.getURI(), dataType.getName(), complexType);
             
+            //now compose the contents for this complex type
             buildComplexSchemaTypeContents(targetNamespace, complexType, dataType);
+            
+            //finally create a global element for this type
+            createGlobalElement(xmlSchema, complexType, complexSchemaTypeName);
         }
         
         return complexSchemaTypeName;
     }
     
+    private void addAnnotations(XSDTypeDefinition xsdType, Type dataType)
+    {
+        if ( dataType.isAbstract() )
+        {
+            if ( xsdType instanceof XSDComplexTypeDefinition )
+            {
+                ((XSDComplexTypeDefinition)xsdType).setAbstract(dataType.isAbstract());
+            }
+            else
+            {
+                xsdType.getElement().setAttribute(ABSTRACT_TYPE, 
+                                Boolean.toString(dataType.isAbstract()));
+            }
+        }
+        
+        //add alias names if it exists
+        addAliasNamesAnnotation(xsdType, 
+                                    dataType.getAliasNames());
+        
+        //add instanceClass annotation
+        if ( dataType.getInstanceClass() != null )
+        {
+            xsdType.getElement().setAttribute(INSTANCE_CLASS, dataType.getInstanceClass().getName());
+        }
+    }
+    
+    
     private QName buildSimpleSchemaType(Type dataType)
     {
         QName simpleSchemaTypeName = null;
         if ( dataType.isDataType() &&
                 (simpleSchemaTypeName = typeTable.getSimpleSchemaTypeName(dataType.getName()) ) == null )
         {
-            XmlSchema xmlSchema = getXmlSchema(dataType);
-            XmlSchemaSimpleType simpleType = new XmlSchemaSimpleType(xmlSchema);
+            XSDSchema xmlSchema = getXmlSchema(dataType);
+            XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
             //set the name
             simpleType.setName(dataType.getName());
+            simpleType.setTargetNamespace(dataType.getURI());
             //set abstract=true if abstract
-            if ( dataType.isAbstract() )
-            {
-                addAbstractTypeAnnotation(dataType.getURI(), 
-                                            dataType.isAbstract(),
-                                            SIMPLE_TYPE,
-                                            dataType.getName());
-            }
-            
-            //add alias names if it exists
-            addAliasNamesAnnotation(dataType.getURI(), 
-                                        dataType.getAliasNames(),
-                                        SIMPLE_TYPE,
-                                        dataType.getName());
-            
-            //add instanceClass annotation
-            if ( dataType.getInstanceClass() != null )
-            {
-                addInstanceClassAnnotation(dataType.getURI(), 
-                                                dataType.getInstanceClass().getName(),
-                                                SIMPLE_TYPE,
-                                                dataType.getName());
-            }
+            simpleSchemaTypeName = new QName(dataType.getURI(), 
+                                             dataType.getName(), 
+                                             (String)targetNamespacePrefixMap.get(dataType.getURI()));
+            xmlSchema.getContents().add(simpleType);
+            simpleType.updateElement();
+            
+            addAnnotations(simpleType, dataType);
             
             if ( !dataType.getBaseTypes().isEmpty() )
             {
                 Type baseType = (Type)dataType.getBaseTypes().get(0);
-                XmlSchemaSimpleTypeRestriction restriction = new XmlSchemaSimpleTypeRestriction();
-                
                 
                 QName baseSchemaType = null;
+                
                 try
                 {
                     baseSchemaType = buildSchema(baseType);
@@ -379,20 +403,26 @@
                     baseSchemaType = new QName(baseType.getURI(), 
                                                 baseType.getName(),
                                                 generatePrefix());
+                    
+                    typeTable.addSimpleSchemaType(baseType.getName(), baseSchemaType);
+
+                    XSDSimpleTypeDefinition baseTypeDef = xsdFactory.createXSDSimpleTypeDefinition();
+                    baseTypeDef.setName(baseType.getName());
+                    baseTypeDef.setTargetNamespace(baseType.getURI());
+                    typeTable.addXSDTypeDef(baseType.getURI(), baseType.getName(), baseTypeDef);
+                        
                     //include external XSD locations
                     includeExtXSD(baseType);
                 }
                 
-                restriction.setBaseTypeName(baseSchemaType);
-                simpleType.setContent(restriction);
+                simpleType.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
+                        getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
                 addImports(xmlSchema, baseSchemaType);
             }
             
-            simpleSchemaTypeName = new QName(dataType.getURI(), 
-                                                dataType.getName(), 
-                                                (String)targetNamespacePrefixMap.get(dataType.getURI()));
-            xmlSchema.getSchemaTypes().add(simpleSchemaTypeName, simpleType);
+            
             typeTable.addSimpleSchemaType(dataType.getName(), simpleSchemaTypeName);
+            typeTable.addXSDTypeDef(dataType.getURI(), dataType.getName(), simpleType);
         }
         return simpleSchemaTypeName;
     }
@@ -402,7 +432,7 @@
         //now we know there is a type for which the xsd must come from outside
         //create a schema for the namespace of this type and add an include in it for 
         //the xsd that is defined externally
-        XmlSchema xmlSchema = getXmlSchema(dataType);
+        XSDSchema xmlSchema = getXmlSchema(dataType);
         
         //ideally there could  be more than one external schema defintions for a namespace
         //and hence schemalocations will be a list of locations
@@ -422,7 +452,8 @@
             schemaLocations.add(DEFAULT_SCHEMA_LOCATION);
         }
         
-        Iterator includesIterator = xmlSchema.getIncludes().getIterator();
+        Object schemaContent = null;
+        Iterator includesIterator = xmlSchema.getContents().iterator();
         Iterator schemaLocIterator = schemaLocations.iterator();
         String aSchemaLocation = null;
         boolean includeExists = false;
@@ -432,20 +463,23 @@
             aSchemaLocation = (String)schemaLocIterator.next();
             while ( includesIterator.hasNext() )
             {
-                if ( !includeExists && aSchemaLocation.equals(
-                        ((XmlSchemaInclude)includesIterator.next()).getSchemaLocation() 
-                                           ))
+                schemaContent = includesIterator.next();
+                if ( schemaContent instanceof XSDInclude )
                 {
-                    includeExists = true;
+                    if ( !includeExists && aSchemaLocation.equals(
+                            ((XSDInclude)schemaContent).getSchemaLocation() 
+                                 ))
+                    {
+                        includeExists = true;
+                    }
                 }
             }
             
             if ( !includeExists )
             {
-                XmlSchemaInclude includeElement = new XmlSchemaInclude();
+                XSDInclude includeElement = xsdFactory.createXSDInclude();
                 includeElement.setSchemaLocation(aSchemaLocation);
-                xmlSchema.getIncludes().add(includeElement);
-                xmlSchema.getItems().add(includeElement);
+                xmlSchema.getContents().add(0, includeElement);
             }
         }
     }
@@ -490,34 +524,42 @@
     }
     
     
-    private XmlSchema getXmlSchema(Type dataType) 
+    private XSDSchema getXmlSchema(Type dataType) 
     {
-        XmlSchema xmlSchema; 
+        XSDSchema xmlSchema = null; 
         
-        if ((xmlSchema = (XmlSchema) schemaMap.get(dataType.getURI())) == null) 
+        if ((xmlSchema = (XSDSchema) schemaMap.get(dataType.getURI())) == null) 
         {
             String targetNamespacePrefix = generatePrefix();
             
-            xmlSchema = new XmlSchema(dataType.getURI(), xmlSchemaCollection);
+            xmlSchema = xsdFactory.createXSDSchema();
+            xmlSchema.setTargetNamespace(dataType.getURI());
+            xmlSchema.setAttributeFormDefault(XSDForm.QUALIFIED_LITERAL);
+            xmlSchema.setElementFormDefault(XSDForm.QUALIFIED_LITERAL);
+            
             targetNamespacePrefixMap.put(dataType.getURI(), targetNamespacePrefix);
             schemaMap.put(dataType.getURI(), xmlSchema);
             
-            Hashtable prefixmap = new Hashtable();
-            prefixmap.put(TypeTable.XS_URI_PREFIX, TypeTable.XML_SCHEMA_URI);
-            prefixmap.put(targetNamespacePrefix, dataType.getURI());
-            xmlSchema.setPrefixToNamespaceMap(prefixmap);
+            xmlSchema.getQNamePrefixToNamespaceMap().put(TypeTable.XS_URI_PREFIX, TypeTable.XML_SCHEMA_URI);
+            xmlSchema.setSchemaForSchemaQNamePrefix(TypeTable.XS_URI_PREFIX);
+
+            xmlSchema.getQNamePrefixToNamespaceMap().put(targetNamespacePrefix, dataType.getURI());
+            //xmlSchema.setSchemaForSchemaQNamePrefix(targetNamespacePrefix);
             
             addSDONamespaces(xmlSchema);
-            addPackageAnnotation(dataType);
+            addPackageAnnotation(xmlSchema, dataType);
         }
         return xmlSchema;
     }
 
     
-    private void addSDONamespaces(XmlSchema xmlSchema)
+    private void addSDONamespaces(XSDSchema xmlSchema)
     {
-        xmlSchema.getPrefixToNamespaceMap().put(COMMONJ_SDO_NS_PREFIX, COMMONJ_SDO_NS);
-        xmlSchema.getPrefixToNamespaceMap().put(SDO_JAVA_NS_PREFIX, SDO_JAVA_NS);
+        xmlSchema.getQNamePrefixToNamespaceMap().put(COMMONJ_SDO_NS_PREFIX, COMMONJ_SDO_NS);
+        //xmlSchema.setSchemaForSchemaQNamePrefix(COMMONJ_SDO_NS_PREFIX);
+        
+        xmlSchema.getQNamePrefixToNamespaceMap().put(SDO_JAVA_NS_PREFIX, SDO_JAVA_NS);
+        //xmlSchema.setSchemaForSchemaQNamePrefix(SDO_JAVA_NS_PREFIX);
     }
     
     
@@ -539,15 +581,16 @@
         }
     }
     
-    private String addImports(XmlSchema xmlSchema, QName schemaTypeName)
+    private String addImports(XSDSchema xmlSchema, QName schemaTypeName)
     {
         String prefix = null;
-        Enumeration enumeration = xmlSchema.getPrefixToNamespaceMap().keys();
-        while ( enumeration.hasMoreElements() )
+        Iterator iterator = xmlSchema.getQNamePrefixToNamespaceMap().keySet().iterator();
+        while ( iterator.hasNext() )
         {
-            prefix = (String)enumeration.nextElement();
+            prefix = (String)iterator.next();
+            
             if ( schemaTypeName.getNamespaceURI().equals(
-                    xmlSchema.getPrefixToNamespaceMap().get(prefix)) )
+                    xmlSchema.getQNamePrefixToNamespaceMap().get(prefix)) )
             {
                 return prefix;
             }
@@ -555,24 +598,30 @@
         
         //the following lines are executed only if a prefix was not found which implies that the 
         //schemaTypeName was not imported earlier and also it does not belong to the targetnamespace
-        String schemaLocation = null;
-        XmlSchemaImport importElement = new XmlSchemaImport();
+        XSDImport importElement = xsdFactory.createXSDImport();
         importElement.setNamespace(schemaTypeName.getNamespaceURI());
-        xmlSchema.getItems().add(importElement);
-        prefix = generatePrefix();
-        xmlSchema.getPrefixToNamespaceMap().put(prefix, schemaTypeName.getNamespaceURI());
+        xmlSchema.getContents().add(0, importElement);
+        prefix = schemaTypeName.getPrefix();
+        if ( prefix == null || prefix.length() <= 0 )
+        {
+            prefix = generatePrefix();
+        }
+        xmlSchema.getQNamePrefixToNamespaceMap().put(prefix, schemaTypeName.getNamespaceURI());
 
         return prefix;
     }
     
-    private void handleSDOSequence(Type datatype, XmlSchemaComplexType complexType)
+    private void handleSDOSequence(Type datatype, XSDComplexTypeDefinition complexType)
     {
         if ( datatype.isSequenced()     )
         {
             complexType.setMixed(true);
-            XmlSchemaChoice choice = new XmlSchemaChoice();
-            choice.setMaxOccurs(Long.MAX_VALUE);
-            complexType.setParticle(choice);
+            XSDModelGroup choice = xsdFactory.createXSDModelGroup();
+            choice.setCompositor(XSDCompositor.CHOICE_LITERAL);
+            XSDParticle aParticle = xsdFactory.createXSDParticle();
+            aParticle.setContent(choice);
+            aParticle.setMaxOccurs(-1);
+            complexType.setContent(aParticle);
         }
         else
         {
@@ -585,32 +634,40 @@
             }
             else*/
             {
-                XmlSchemaSequence sequence = new XmlSchemaSequence(); 
-                complexType.setParticle(sequence);
+                XSDModelGroup sequence = xsdFactory.createXSDModelGroup();
+                sequence.setCompositor(XSDCompositor.SEQUENCE_LITERAL);
+                XSDParticle aParticle = xsdFactory.createXSDParticle();
+                aParticle.setContent(sequence);
+                complexType.setContent(aParticle);
             }
         }
     }
     
-    private void handleSDOOpenType(Type datatype, XmlSchemaComplexType complexType)
+    private void handleSDOOpenType(Type datatype, XSDComplexTypeDefinition complexType)
     {
         if ( datatype.isOpen() /*&& 
                 getPropertyStartsWithName(datatype.getDeclaredProperties(), GROUP).size() <= 0 */)
         {
-            XmlSchemaAny anyType = new XmlSchemaAny();
-            XmlSchemaContentProcessing cp = new XmlSchemaContentProcessing("lax");
-            anyType.setProcessContent(new XmlSchemaContentProcessing("lax"));
-            anyType.setMaxOccurs(Long.MAX_VALUE);
-            ((XmlSchemaGroupBase)complexType.getParticle()).getItems().add(anyType);
-            
-            XmlSchemaAnyAttribute anyAttr = new XmlSchemaAnyAttribute();
-            anyAttr.setProcessContent(new XmlSchemaContentProcessing("lax"));
-            complexType.setAnyAttribute(anyAttr);
+            XSDWildcard elementWildcard = xsdFactory.createXSDWildcard();
+            elementWildcard.getLexicalNamespaceConstraint().add("##other");
+            elementWildcard.setProcessContents(XSDProcessContents.LAX_LITERAL);
+            // Create a particle to hold the wildcard.
+            XSDParticle wildcardParticle = xsdFactory.createXSDParticle();
+            wildcardParticle.setContent(elementWildcard);
+            wildcardParticle.setMaxOccurs(-1);
+            ((XSDModelGroup)((XSDParticle)complexType.getContent()).getContent()).
+                getContents().add(wildcardParticle);
+               
+            XSDWildcard attributeWildcard = xsdFactory.createXSDWildcard();
+            attributeWildcard.getLexicalNamespaceConstraint().add("##other");
+            attributeWildcard.setProcessContents(XSDProcessContents.LAX_LITERAL);
+            complexType.setAttributeWildcard(attributeWildcard);
         }
     }
     
-    private void handleBaseExtn(XmlSchema xmlSchema, 
+    private void handleBaseExtn(XSDSchema xmlSchema, 
                                     Type datatype, 
-                                    XmlSchemaComplexType complexType) 
+                                    XSDComplexTypeDefinition complexType) 
     {
         if ( datatype.getBaseTypes().size() > 0 )
         {
@@ -628,14 +685,32 @@
                 baseSchemaType = new QName(baseType.getURI(), 
                                             baseType.getName(),
                                             generatePrefix());
+                
+                XSDSimpleTypeDefinition baseTypeDef = xsdFactory.createXSDSimpleTypeDefinition();
+                baseTypeDef.setName(baseType.getName());
+                baseTypeDef.setTargetNamespace(baseType.getURI());
+                typeTable.addXSDTypeDef(baseType.getURI(), baseType.getName(), baseTypeDef);
+                
                 includeExtXSD(baseType);
             }
+            
+            complexType.setDerivationMethod(XSDDerivationMethod.EXTENSION_LITERAL);
+            
+            if ( baseType.isDataType() )
+            {
+                XSDSimpleTypeDefinition anonymousSimpleTypeDefinition 
+                    = xsdFactory.createXSDSimpleTypeDefinition();
+                anonymousSimpleTypeDefinition.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
+                        getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
+                complexType.setContent(anonymousSimpleTypeDefinition);
+            }
+            else
+            {
+                complexType.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
+                    getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
+                
+            }    
                 
-            XmlSchemaComplexContent complexContent = new XmlSchemaComplexContent();
-            XmlSchemaComplexContentExtension compContExtn = new XmlSchemaComplexContentExtension();
-            compContExtn.setBaseTypeName(baseSchemaType);
-            complexContent.setContent(compContExtn);
-            complexType.setContentModel(complexContent);
             addImports(xmlSchema, baseSchemaType);
         }
     }
@@ -646,30 +721,22 @@
         return typeName.replaceFirst(firstChar, firstChar.toLowerCase());
     }
     
-    private void createGlobalElement(XmlSchema xmlSchema, XmlSchemaComplexType complexType, QName elementName )
+    private void createGlobalElement(XSDSchema xmlSchema, 
+                                         XSDComplexTypeDefinition complexType, 
+                                         QName schemaElementName )
     {
-        XmlSchemaElement globalElement = new XmlSchemaElement();
-        globalElement.setSchemaTypeName(complexType.getQName());
+        XSDElementDeclaration globalElement = xsdFactory.createXSDElementDeclaration();
+        globalElement.setTargetNamespace(xmlSchema.getTargetNamespace());
         globalElement.setName(formGlobalElementName(complexType.getName()));
-        globalElement.setQName(elementName);
-        
-        xmlSchema.getItems().add(globalElement);
-        xmlSchema.getElements().add(elementName, globalElement);
+        globalElement.setTypeDefinition
+            (typeTable.getXSDTypeDef(schemaElementName.getNamespaceURI(), 
+                                                    schemaElementName.getLocalPart()));
+        xmlSchema.getContents().add(globalElement);
+        xmlSchema.getElementDeclarations().add(globalElement);
     }
     
-    private Map getAnnoMapForElement(String elementKey)
-    {
-        if ( sdoAnnoMap.get(elementKey) == null )
-        {
-            sdoAnnoMap.put(elementKey, new Hashtable());
-        }
-        return (Map)sdoAnnoMap.get(elementKey);
-    }
-    
-    private void addAliasNamesAnnotation(String targetNamespace, 
-                                            List aliasNames,    
-                                            String schemeElement, 
-                                            String schemeElementNameAttr)
+    private void addAliasNamesAnnotation(XSDSchemaContent typeDef, 
+                                            List aliasNames)
     {
         if ( !aliasNames.isEmpty() )
         {
@@ -677,139 +744,20 @@
             Iterator iterator = aliasNames.iterator();
             while ( iterator.hasNext() )
             {
-            sb.append(iterator.next());
+                sb.append(iterator.next());
             }
-            getAnnoMapForElement(makeAnnotationMapKey(targetNamespace, 
-                                        schemeElement, 
-                                        schemeElementNameAttr)).
-                                            put(ALIAS_NAMES, sb.toString());
+            typeDef.getElement().setAttribute(ALIAS_NAMES, sb.toString());
         }
     }
     
-    private void addAbstractTypeAnnotation(String targetNamespace,            
-                                                boolean isAbstract,
-                                                String schemeElement, 
-                                                String schemeElementNameAttr)
-    {
-        getAnnoMapForElement(makeAnnotationMapKey(targetNamespace, 
-                                                    schemeElement, 
-                                                    schemeElementNameAttr)).
-                                                        put(ABSTRACT_TYPE, new Boolean(isAbstract).toString()); 
-    }
-    
-    
-    private void addPackageAnnotation(Type dataType)
+    private void addPackageAnnotation(XSDSchema xmlSchema, Type dataType)
     {
         if ( dataType.getInstanceClass() != null )
         {
-            getAnnoMapForElement(makeAnnotationMapKey(dataType.getURI(),
-                                                   SCHEMA,
-                                                   "")).put(JAVA_PACKAGE, 
-                                                             dataType.getInstanceClass().getPackage().getName());
-        }
-    }
-    
-    
-    private void addReadOnlyAnnotation(String targetNamespace,            
-                                        boolean isReadOnly,
-                                        String schemeElement, 
-                                        String schemeElementNameAttr)
-    {
-        getAnnoMapForElement(makeAnnotationMapKey(targetNamespace, 
-                                            schemeElement, 
-                                            schemeElementNameAttr)).
-                                                put(READ_ONLY, new Boolean(isReadOnly).toString()); 
-    }
-    
-    
-    
-    private void addPropertyTypeAnnotation(String targetNamespace,  
-                                            String prefix,
-                                            String propertyTypeName,
-                                            String schemeElement, 
-                                            String schemeElementNameAttr)
-    {
-        String value = prefix + COLON + propertyTypeName;
-        getAnnoMapForElement(makeAnnotationMapKey(targetNamespace, 
-                                                    schemeElement, 
-                                                    schemeElementNameAttr)).
-                                                    put(PROPERTY_TYPE, value); 
-    }
-    
-    
-    
-    private void addOppositePropertyAnnotation(String targetNamespace,            
-                                            String oppositePropName,
-                                            String schemeElement, 
-                                            String schemeElementNameAttr)
-    {
-        getAnnoMapForElement(makeAnnotationMapKey(targetNamespace, 
-                                                    schemeElement, 
-                                                    schemeElementNameAttr)).
-                                                    put(OPPOSITE_PROPERTY, oppositePropName); 
-    }
-    
-    
-    
-    private void addInstanceClassAnnotation(String targetNamespace,            
-                                                String className,
-                                                String schemeElement, 
-                                                String schemeElementNameAttr)
-    {
-        getAnnoMapForElement(makeAnnotationMapKey(targetNamespace, 
-                                    schemeElement, 
-                                    schemeElementNameAttr)).
-                                        put(INSTANCE_CLASS, className); 
-    }    
-    
-    private DataObject createDataObject(Class sdoType) throws Exception
-    {
-        Constructor constructor = sdoType.getDeclaredConstructor(new Class[0]);
-        constructor.setAccessible(true);
-        Object instance = constructor.newInstance(new Object[0]);
-        return (DataObject)instance;
-    }
-    
-    public void clipProperties(Type dataType)
-    {
-        Property aProperty = null; 
-        //clip properties with name 'mixed' when parent data type is sequenced
-        /*if ( dataType.isSequenced() && 
-                (aProperty = getPropertyByName(dataType.getDeclaredProperties(), MIXED)) != null )
-        {
-            dataType.getDeclaredProperties().remove(aProperty);
-        }*/
-    }
-    
-    private Property getPropertyByName(List propertiesList, String propertyName)
-    {
-        Iterator iterator = propertiesList.iterator();
-        Property aProperty = null;
-        while ( iterator.hasNext())
-        {
-            aProperty = (Property)iterator.next();
-            if ( aProperty.getName().equals(propertyName) )
-            {
-                return aProperty;
-            }
-        }
-        return null;
-    }
-    
-    private Collection getPropertyStartsWithName(List propertiesList, String propertyName)
-    {
-        Iterator iterator = propertiesList.iterator();
-        Property aProperty = null;
-        Vector matchingProperties = new Vector();
-        while ( iterator.hasNext())
-        {
-            aProperty = (Property)iterator.next();
-            if ( aProperty.getName().startsWith(propertyName) )
-            {
-                matchingProperties.addElement(aProperty);
-            }
+            xmlSchema.updateElement();
+            xmlSchema.getElement().setAttribute(JAVA_PACKAGE, 
+                                                dataType.getInstanceClass().getPackage().getName());
         }
-        return matchingProperties;
     }
     
     private String generatePrefix() 

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java Wed Aug  2 10:54:09 2006
@@ -8,7 +8,10 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.axiom.om.OMElement;
+//import org.apache.axiom.om.OMElement;
+import org.eclipse.xsd.XSDFactory;
+import org.eclipse.xsd.XSDTypeDefinition;
+import org.w3c.dom.Element;
 
 
 
@@ -21,6 +24,7 @@
     
     private Hashtable simpleXSDTypes;
     private Hashtable complexXSDTypes;
+    private Hashtable xsdTypeDefs; 
     
     public static String asQualifiedName(String uri, String typeName)
     {
@@ -32,6 +36,7 @@
     {
         simpleXSDTypes = new Hashtable();
         complexXSDTypes = new Hashtable();
+        xsdTypeDefs = new Hashtable();
         populateSimpleXSDTypes();
         populateStdSDOTypes();
     }
@@ -136,7 +141,7 @@
                 new QName(XML_SCHEMA_URI, "decimal", XS_URI_PREFIX));
 
         // Any types
-        simpleXSDTypes.put(OMElement.class.getName(),
+        simpleXSDTypes.put(Element.class.getName(),
                 new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
         simpleXSDTypes.put(ArrayList.class.getName(),
                 new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
@@ -196,5 +201,35 @@
             return getComplexSchemaTypeName(namespaceURI, typeName);
         }
     }
+    
+    public void addXSDTypeDef(String namespaceURI, String typeName, XSDTypeDefinition aTypeDef)
+    {
+        if ( namespaceURI != null && typeName != null && aTypeDef != null )
+        {
+            xsdTypeDefs.put(asQualifiedName(namespaceURI, typeName), aTypeDef);
+        }
+    }
+    
+    public XSDTypeDefinition getXSDTypeDef(String namespaceURI, String typeName) 
+    {
+        XSDTypeDefinition typeDef = null;
+        if ( namespaceURI != null && typeName != null  )
+        {
+            if ( XML_SCHEMA_URI.equals(namespaceURI) )
+            {
+                if ( ( typeDef = (XSDTypeDefinition)xsdTypeDefs.get(asQualifiedName(namespaceURI, typeName)) ) == null )
+                {
+                    typeDef = XSDFactory.eINSTANCE.createXSDSimpleTypeDefinition();
+                    typeDef.setName(typeName);
+                    typeDef.setTargetNamespace(namespaceURI);
+                    addXSDTypeDef(namespaceURI, typeName, typeDef);
+                }
+            }
+            else
+            {
+                typeDef = (XSDTypeDefinition)xsdTypeDefs.get(asQualifiedName(namespaceURI, typeName));
+            }
+        }
+      return typeDef;
+    }
 }
-

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java Wed Aug  2 10:54:09 2006
@@ -20,6 +20,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.Reader;
+import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -28,10 +29,14 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.axiom.om.OMElement;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
 import org.apache.tuscany.sdo.impl.DynamicDataObjectImpl;
 import org.apache.tuscany.sdo.util.DataObjectUtil;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
@@ -47,7 +52,6 @@
 import org.eclipse.xsd.util.XSDResourceImpl;
 import org.xml.sax.InputSource;
 
-
 import commonj.sdo.Property;
 import commonj.sdo.Type;
 import commonj.sdo.helper.TypeHelper;
@@ -219,14 +223,10 @@
          Hashtable schemaMap = new Hashtable();
          Hashtable nsPrefixMap = new Hashtable();
          TypeTable typeTable = new TypeTable();
-         Hashtable sdoAnnotationsMap = new Hashtable();
          
-
-         SchemaBuilder schemaBuilder = new SchemaBuilder(new XmlSchemaCollection(),
-                                                          schemaMap,
+         SchemaBuilder schemaBuilder = new SchemaBuilder( schemaMap,
                                                           nsPrefixMap,
                                                           typeTable,
-                                                          sdoAnnotationsMap,
                                                           namespaceToSchemaLocation);
           
          Iterator iterator = types.iterator();
@@ -239,25 +239,37 @@
                  dataType = (Type)iterator.next();
                  schemaBuilder.buildSchema(dataType);
              }
-         
-             //add sdo annotations to the generated schema elements
-             SDOAnnotationsDecorator annoDecorator = new SDOAnnotationsDecorator();
-             OMElement allSchemas  = annoDecorator.decorateWithAnnotations(schemaMap, sdoAnnotationsMap);
-             //print the schemas into a StringBuffer
-             StringBuffer sb = new StringBuffer();
-             iterator = allSchemas.getChildElements();
+             
+             XSDSchema xmlSchema = null;
+             iterator = schemaMap.values().iterator();
+             StringWriter writer = new StringWriter();
+             
+             TransformerFactory transformerFactory = TransformerFactory.newInstance();
+             Transformer transformer = transformerFactory.newTransformer();
+             transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+             transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+             transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+             
              while ( iterator.hasNext() )
              {
-                 sb.append(iterator.next().toString());
+                 xmlSchema = (XSDSchema)iterator.next();
+
+                 if(xmlSchema.getElement() == null)
+                 {
+                     xmlSchema.updateElement();
+                 }
+
+                 transformer.transform(new DOMSource(xmlSchema.getElement().getOwnerDocument()), 
+                         new StreamResult(writer));
              }
-             return sb.toString();
-             
+             writer.close();
+             return writer.getBuffer().toString();
          }
          catch ( Exception e )
          {
              //System.out.println("Unable to generate schema due to ..." + e);
              //e.printStackTrace();
-             throw new IllegalArgumentException(e);
+             throw new IllegalArgumentException(e.getMessage());
          }
       }
       else

Modified: incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java (original)
+++ incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java Wed Aug  2 10:54:09 2006
@@ -61,7 +61,7 @@
         assertEquals(0, types2.size());
     }
     
-    public void testXSDGeneration_staicSDOType() throws IOException 
+    public void testXSDGeneration_staticSDOType() throws IOException 
     {
         //test for static sdo type.  The test succeeds if the IllegalArgumentException is thrown
         //by XSDHelper.generate method in which case the string xsd must be null;
@@ -107,6 +107,7 @@
         
         Type dynamicQuoteType = 
             TypeHelper.INSTANCE.getType("http://www.example.com/dynamic", "DynamicQuote");
+        
         Vector types = new Vector();
         types.add(dynamicQuoteType);
         String xsd = null;
@@ -170,7 +171,7 @@
         try
         {
             Hashtable schemaLocationMap = new Hashtable();
-            schemaLocationMap.put("http://www.example.com/simples", "http://www.example.com/simple/xsd");
+            schemaLocationMap.put("http://www.example.com/simple", "http://www.example.com/simple/xsd");
             xsd = xsdHelper.generate(types, schemaLocationMap);
             //System.out.println(xsd);
         }



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