Author: mukulg
Date: Wed Feb  3 11:14:21 2010
New Revision: 905999

URL: http://svn.apache.org/viewvc?rev=905999&view=rev
Log:
Adding support for serializing complexType -> complexContent, along with 
miscellaneous improvements and refactoring.

Modified:
    xerces/java/branches/xml-schema-1.1-dev/samples/xs/XSSerializer.java

Modified: xerces/java/branches/xml-schema-1.1-dev/samples/xs/XSSerializer.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/samples/xs/XSSerializer.java?rev=905999&r1=905998&r2=905999&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/samples/xs/XSSerializer.java 
(original)
+++ xerces/java/branches/xml-schema-1.1-dev/samples/xs/XSSerializer.java Wed 
Feb  3 11:14:21 2010
@@ -535,27 +535,40 @@
         }
 
         parentDomNode.appendChild(complexTypeDomNode);
-        XSParticle particle = complexTypeDecl.getParticle();
-        if (particle != null) {
-            processParticleFromComplexType(document, complexTypeDomNode, 
-                                           particle);
-            // add attributes to the complex type
-            addAttributesToComplexType(document, complexTypeDecl, 
-                                       complexTypeDomNode);
-        }
-        else {
-           if (complexTypeDecl.getContentType() == 
-                      XSComplexTypeDefinition.CONTENTTYPE_SIMPLE) {
-             // add xs:simpleContent as child of xs:complexType
-             addSimpleContentToComplexType(document, complexTypeDomNode,
-                                           complexTypeDecl);   
-           }
-           else if (complexTypeDecl.getContentType() == 
-                       XSComplexTypeDefinition.CONTENTTYPE_EMPTY) {
-              // add attributes to the complex type
-              addAttributesToComplexType(document, complexTypeDecl, 
-                                         complexTypeDomNode); 
-           }
+
+        short derivationMethod = complexTypeDecl.getDerivationMethod();
+        
+        if (complexTypeDecl.getContentType() == 
+                          XSComplexTypeDefinition.CONTENTTYPE_SIMPLE) {
+            // add xs:simpleContent as child of xs:complexType
+            addSimpleContentToComplexType(document, complexTypeDomNode,
+                    complexTypeDecl);   
+        }
+        else if ((derivationMethod == XSConstants.DERIVATION_RESTRICTION) || 
+                 (derivationMethod == XSConstants.DERIVATION_EXTENSION)) {
+            if (!XMLConstants.W3C_XML_SCHEMA_NS_URI.
+                    equals(complexTypeDecl.getBaseType().getNamespace())) {
+                // add xs:complexContent as child of xs:complexType
+                addComplexContentToComplexType(document, 
+                                               complexTypeDomNode,
+                                               complexTypeDecl, 
+                                               derivationMethod);
+            }
+            else {
+                XSParticle particle = complexTypeDecl.getParticle();
+                if (particle != null) {
+                    processParticleFromComplexType(document, 
+                                                   complexTypeDomNode, 
+                                                   particle);
+                    // add attributes to the complex type
+                    addAttributesToComplexType(document, 
+                                               complexTypeDecl,
+                                               complexTypeDomNode);
+                }
+                addAttributesToComplexType(document, 
+                                           complexTypeDecl, 
+                                           complexTypeDomNode);
+            }
         }
                    
     } // end of, addChildrenToComplexType
@@ -574,14 +587,27 @@
             Element simpleContentRestrDomNode = document.createElementNS
                                                           (XSD_LANGUAGE_URI,
                                                            XSD_LANGUAGE_PREFIX 
+
-                                                           "restriction"); 
-            addAttributesToComplexType(document, complexTypeDecl, 
-                                       simpleContentRestrDomNode);
+                                                           "restriction");
+            XSTypeDefinition baseType = complexTypeDecl.getBaseType();
+            if (XMLConstants.W3C_XML_SCHEMA_NS_URI.
+                              equals(baseType.getNamespace())) {
+                simpleContentRestrDomNode.setAttributeNS(null, "base", 
+                                                 XSD_LANGUAGE_PREFIX + 
+                                                 baseType.getName());   
+            }
+            else {
+                simpleContentRestrDomNode.setAttributeNS(null, "base",  
+                                                baseType.getName());   
+            }     
+            
             addRestrictionToSimpleContent(document,
                                           complexTypeDecl,
                                           simpleContentDomNode, 
                                           simpleContentRestrDomNode, 
                                           complexTypeDecl.getBaseType());
+            addAttributesToComplexType(document, complexTypeDecl, 
+                                       simpleContentRestrDomNode);
+            
             simpleContentDomNode.appendChild(simpleContentRestrDomNode);
         }
         else if (complexTypeDecl.getDerivationMethod() == 
@@ -609,6 +635,59 @@
         complexTypeDomNode.appendChild(simpleContentDomNode);
         
     } // end of, addSimpleContentToComplexType 
+    
+    /*
+     * Add xs:complexContent as child of xs:complexType
+     */
+    private void addComplexContentToComplexType(Document document,
+                                       Element complexTypeDomNode,
+                                       XSComplexTypeDecl complexTypeDecl,
+                                       short derivationMethod) {
+        Element complexContentDomNode = 
document.createElementNS(XSD_LANGUAGE_URI,
+                                                             
XSD_LANGUAGE_PREFIX +
+                                                             "complexContent");
+        Element complexContentDerivationNode = null;        
+        if (derivationMethod == XSConstants.DERIVATION_RESTRICTION) {
+            complexContentDerivationNode = document.createElementNS
+                                                          (XSD_LANGUAGE_URI,
+                                                          XSD_LANGUAGE_PREFIX +
+                                                          "restriction");      
                              
+        }
+        else if (derivationMethod == XSConstants.DERIVATION_EXTENSION) {
+            complexContentDerivationNode = document.createElementNS
+                                                         (XSD_LANGUAGE_URI,
+                                                         XSD_LANGUAGE_PREFIX +
+                                                         "extension");
+        }
+        
+        if (complexContentDerivationNode != null) {
+            XSTypeDefinition baseType = complexTypeDecl.getBaseType();
+            if (XMLConstants.W3C_XML_SCHEMA_NS_URI.
+                              equals(baseType.getNamespace())) {
+                complexContentDerivationNode.setAttributeNS(null, "base", 
+                                                       XSD_LANGUAGE_PREFIX + 
+                                                       baseType.getName());   
+            }
+            else {
+                complexContentDerivationNode.setAttributeNS(null, "base",  
+                                                    baseType.getName());   
+            }
+            complexContentDomNode.appendChild(complexContentDerivationNode);
+         }
+        
+        XSParticle particle = complexTypeDecl.getParticle();
+        if (particle != null) {
+            processParticleFromComplexType(document, 
+                                           complexContentDerivationNode,
+                                           particle);
+        }
+        
+        addAttributesToComplexType(document, complexTypeDecl, 
+                                   complexContentDerivationNode);
+        
+        complexTypeDomNode.appendChild(complexContentDomNode);
+        
+    } // end of, addComplexContentToComplexType
 
     /*
      * Add attributes to the complex type
@@ -632,22 +711,22 @@
      * Processing a "particle" from a complex type
      */
     private void processParticleFromComplexType(Document document,
-                                                Element complxTypeDomNode,
+                                                Element parentDomNode,
                                                 XSParticle particle)
                                                 throws DOMException {
         XSTerm particleTerm = particle.getTerm();
         if (particleTerm instanceof XSModelGroup) {
             XSModelGroup modelGroup = (XSModelGroup) particleTerm;
             if (modelGroup.getCompositor() == 
XSModelGroup.COMPOSITOR_SEQUENCE) {
-                addCompositorOnSchemaComponent(document, complxTypeDomNode,
+                addCompositorOnSchemaComponent(document, parentDomNode,
                                                modelGroup, "sequence");
             }
             else if (modelGroup.getCompositor() == 
XSModelGroup.COMPOSITOR_CHOICE) {
-                addCompositorOnSchemaComponent(document, complxTypeDomNode,
+                addCompositorOnSchemaComponent(document, parentDomNode,
                                                modelGroup, "choice");
             }
             else if (modelGroup.getCompositor() == 
XSModelGroup.COMPOSITOR_ALL) {
-                addAllCompositorOnComplexType(document, complxTypeDomNode,
+                addAllCompositorOnComplexType(document, parentDomNode,
                                               modelGroup);
             }
         }        



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to