Author: mukulg
Date: Sun Jan 31 02:19:42 2010
New Revision: 904954

URL: http://svn.apache.org/viewvc?rev=904954&view=rev
Log:
adding more enhancements to XSModel serialization

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=904954&r1=904953&r2=904954&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 Sun 
Jan 31 02:19:42 2010
@@ -29,6 +29,7 @@
 import org.apache.xerces.impl.xs.XSWildcardDecl;
 import org.apache.xerces.xs.StringList;
 import org.apache.xerces.xs.XSAttributeUse;
+import org.apache.xerces.xs.XSComplexTypeDefinition;
 import org.apache.xerces.xs.XSConstants;
 import org.apache.xerces.xs.XSElementDeclaration;
 import org.apache.xerces.xs.XSFacet;
@@ -226,18 +227,11 @@
                                                    XSD_LANGUAGE_PREFIX +
                                                    "complexType");
            complxTypeDomNode.setAttributeNS(null, "name", ctName);
-           schemaDeclDomNode.appendChild(complxTypeDomNode);
-               
-           XSParticle particle = complexTypeDecl.getParticle();
-           if (particle != null) {
-              processParticleFromComplexType(document,
-                                             complxTypeDomNode,
-                                             particle);
-           }
            
-           // add attributes to complex type
-           addAttributesToComplexType(document, complexTypeDecl,
-                                      complxTypeDomNode);
+           addChildrenToComplexType(document,
+                                    schemaDeclDomNode,
+                                    complexTypeDecl,
+                                    complxTypeDomNode);
        }        
     } // end of, processGlobalComplexTypeDecl
     
@@ -415,24 +409,84 @@
                                                  Element elemDeclDomNode,
                                                  XSTypeDefinition typeDef)
                                                  throws DOMException {
-       XSComplexTypeDecl complexTypeDecl = (XSComplexTypeDecl) typeDef;
+       
+       XSComplexTypeDecl complexTypeDecl = (XSComplexTypeDecl) typeDef;       
        Element complexTypeDomNode = document.createElementNS(XSD_LANGUAGE_URI,
                                                             
XSD_LANGUAGE_PREFIX +
                                                             "complexType");
-       elemDeclDomNode.appendChild(complexTypeDomNode);
-       XSParticle particle = complexTypeDecl.getParticle();
-       if (particle != null) {
-          processParticleFromComplexType(document, complexTypeDomNode, 
particle);
-       }
-       
-       // add attributes to the complex type
-       addAttributesToComplexType(document, complexTypeDecl, 
complexTypeDomNode);
-      
-       //XSWildcard attrWildCard = complexTypeDecl.getAttributeWildcard();
+       addChildrenToComplexType(document,
+                                elemDeclDomNode,
+                                complexTypeDecl,
+                                complexTypeDomNode);
        
     } // end of, processAnonComplexTypeOnElement
 
     /*
+     * Add child content to complex type declaration
+     */
+    private void addChildrenToComplexType(Document document,
+                                          Element parentDomNode,
+                                          XSComplexTypeDecl complexTypeDecl,
+                                          Element complexTypeDomNode)
+                                          throws DOMException {
+        
+        // adding "abstract" & "mixed" attributes if applicable  
+        boolean isAbstract = complexTypeDecl.getAbstract();
+        boolean isMixed = (complexTypeDecl.getContentType() == 
+                            XSComplexTypeDefinition.CONTENTTYPE_MIXED);
+        if (isAbstract) {
+            complexTypeDomNode.setAttributeNS(null, "abstract", "true");   
+        }
+        if (isMixed) {
+            complexTypeDomNode.setAttributeNS(null, "mixed", "true");   
+        }
+        
+        // adding "block" attribute if applicable
+        short prohSubstitutions = complexTypeDecl.getProhibitedSubstitutions();
+        String prohSubsStr = "";
+        if (prohSubstitutions == (XSConstants.DERIVATION_EXTENSION | 
+                                  XSConstants.DERIVATION_RESTRICTION)) {
+           prohSubsStr = "#all";   
+        }
+        else if (prohSubstitutions == XSConstants.DERIVATION_EXTENSION) {
+           prohSubsStr = "extension"; 
+        }
+        else if (prohSubstitutions == XSConstants.DERIVATION_RESTRICTION) {
+           prohSubsStr = "restriction"; 
+        }        
+        if (!prohSubsStr.equals("")) {
+           complexTypeDomNode.setAttributeNS(null, "block", prohSubsStr);   
+        }
+        
+        // adding "final" attribute if applicable
+        short finalSet = complexTypeDecl.getFinalSet();
+        String finalStr = "";
+        if (finalSet == (XSConstants.DERIVATION_EXTENSION | 
+                         XSConstants.DERIVATION_RESTRICTION)) {
+           finalStr = "#all";   
+        }
+        else if (finalSet == XSConstants.DERIVATION_EXTENSION) {
+           finalStr = "extension"; 
+        }
+        else if (finalSet == XSConstants.DERIVATION_RESTRICTION) {
+           finalStr = "restriction"; 
+        }        
+        if (!finalStr.equals("")) {
+           complexTypeDomNode.setAttributeNS(null, "final", finalStr);   
+        }
+
+        parentDomNode.appendChild(complexTypeDomNode);
+        XSParticle particle = complexTypeDecl.getParticle();
+        if (particle != null) {
+            processParticleFromComplexType(document, complexTypeDomNode, 
particle);
+        }
+
+        // add attributes to the complex type
+        addAttributesToComplexType(document, complexTypeDecl, 
complexTypeDomNode);
+           
+    } // end of, addChildrenToComplexType
+
+    /*
      * Add attributes to the complex type
      */
     private void addAttributesToComplexType(Document document,



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

Reply via email to