You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mu...@apache.org on 2010/01/30 17:35:16 UTC

svn commit: r904810 - /xerces/java/branches/xml-schema-1.1-dev/samples/xs/XSSerializer.java

Author: mukulg
Date: Sat Jan 30 16:35:16 2010
New Revision: 904810

URL: http://svn.apache.org/viewvc?rev=904810&view=rev
Log:
adding more features, 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=904810&r1=904809&r2=904810&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 Sat Jan 30 16:35:16 2010
@@ -26,6 +26,7 @@
 import org.apache.xerces.impl.xs.XSComplexTypeDecl;
 import org.apache.xerces.impl.xs.XSElementDecl;
 import org.apache.xerces.impl.xs.XSLoaderImpl;
+import org.apache.xerces.impl.xs.XSWildcardDecl;
 import org.apache.xerces.xs.StringList;
 import org.apache.xerces.xs.XSAttributeUse;
 import org.apache.xerces.xs.XSConstants;
@@ -42,6 +43,7 @@
 import org.apache.xerces.xs.XSSimpleTypeDefinition;
 import org.apache.xerces.xs.XSTerm;
 import org.apache.xerces.xs.XSTypeDefinition;
+import org.apache.xerces.xs.XSWildcard;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -155,6 +157,17 @@
       // iterating global element declarations in the Schema
       for (int elemIdx = 0; elemIdx < globalElemDecls.size(); elemIdx++) {
          XSElementDecl elemDecl = (XSElementDecl) globalElemDecls.item(elemIdx);
+         addElementDeclToSchemaComponent(document, schemaDeclDomNode, elemDecl);
+       }
+    } // end of, processGolabElementDecl
+
+    /*
+     * Adding an element declaration to Schema component
+     */
+    private void addElementDeclToSchemaComponent(Document document,
+                                             Element parentDomNode,
+                                             XSElementDecl elemDecl)
+                                             throws DOMException {
          String elemName = elemDecl.getName();         
          Element elemDeclDomNode = document.createElementNS(XSD_LANGUAGE_URI,
                                                         XSD_LANGUAGE_PREFIX
@@ -191,9 +204,9 @@
            }   
          }
 
-         schemaDeclDomNode.appendChild(elemDeclDomNode);
-       }
-    } // end of, processGolabElementDecl
+         parentDomNode.appendChild(elemDeclDomNode);
+         
+    } // end of, addElementDeclToSchemaComponent
 
     /*
      * Process global complex type declarations
@@ -425,7 +438,7 @@
     private void addAttributesToComplexType(Document document,
                                             XSComplexTypeDecl complexTypeDecl,
                                             Element complexTypeDomNode)
-            throws DOMException {
+                                            throws DOMException {
         // iterate all attributes on the Complex type.
         // all attributes on a complex type (from all of xs:attribute & xs:attributeGroup
         // declarations) are expanded, into an XSObjectList list.  
@@ -448,129 +461,110 @@
         if (particleTerm instanceof XSModelGroup) {
             XSModelGroup modelGroup = (XSModelGroup) particleTerm;
             if (modelGroup.getCompositor() == XSModelGroup.COMPOSITOR_SEQUENCE) {
-                processSequenceDeclOnComplexType(document, complxTypeDomNode,
-                                                 modelGroup);
+                addCompositorOnComplexType(document, complxTypeDomNode,
+                                           modelGroup, "sequence");
             }
             else if (modelGroup.getCompositor() == XSModelGroup.COMPOSITOR_CHOICE) {
-                processChoiceDeclOnComplexType(document, complxTypeDomNode,
-                                               modelGroup);
+                addCompositorOnComplexType(document, complxTypeDomNode,
+                                           modelGroup, "choice");
             }
             else if (modelGroup.getCompositor() == XSModelGroup.COMPOSITOR_ALL) {
-                processAllDeclOnComplexType(document, complxTypeDomNode,
-                                            modelGroup);
+                addAllCompositorOnComplexType(document, complxTypeDomNode,
+                                              modelGroup);
             }
         }        
         
     } // end of, processParticleFromComplexType
 
     /*
-     * Processing a "sequence" declaration on a complex type
+     * Adding a "sequence" or "choice" compositor on a complex type
      */
-    private void processSequenceDeclOnComplexType(Document document,
-                                                  Element complxTypeDomNode,
-                                                  XSModelGroup modelGroup)
-                                                  throws DOMException {
+    private void addCompositorOnComplexType(Document document,
+                                            Element complxTypeDomNode,
+                                            XSModelGroup modelGroup,
+                                            String compositor)
+                                            throws DOMException {
         
         Element sequenceDeclDomNode = document.createElementNS(
                                                XSD_LANGUAGE_URI,
                                                XSD_LANGUAGE_PREFIX
-                                               + "sequence");
-        XSObjectList sequenceChildren = modelGroup.getParticles();
-        for (int seqIdx = 0; seqIdx < sequenceChildren.getLength(); seqIdx++) {
-            XSObject seqItem = sequenceChildren.item(seqIdx);
-            if (seqItem instanceof XSParticle) {
-                XSParticle seqParticle = (XSParticle) seqItem;
-                if (seqParticle.getTerm() instanceof XSElementDeclaration) {
-                    XSElementDecl elemDecl = (XSElementDecl) seqParticle.getTerm();
-                    String elemName = elemDecl.getName();
-                    Element elemDeclDomNode = document.createElementNS(
-                                                      XSD_LANGUAGE_URI,
-                                                      XSD_LANGUAGE_PREFIX 
-                                                      + "element");
-                    elemDeclDomNode.setAttributeNS(null, "name", elemName);
-                    XSTypeDefinition typeDef = elemDecl.getTypeDefinition();
-                    if (!typeDef.getAnonymous()) {
-                        // handling a non-anonymous schema type
-                        String typeName = typeDef.getName();                     
-                        if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals
-                                          (typeDef.getNamespace())) {               
-                            elemDeclDomNode.setAttributeNS(null, "type",
-                                                           XSD_LANGUAGE_PREFIX +
-                                                           typeName);
-                        }
-                        else {
-                            elemDeclDomNode.setAttributeNS(null, "type", typeName);  
-                        }
-                        int minOccurs = seqParticle.getMinOccurs();
-                        int maxOccurs = seqParticle.getMaxOccurs();
-                        if (minOccurs != 1) {
-                            elemDeclDomNode.setAttributeNS(null, "minOccurs",
-                                                           String.valueOf(minOccurs));   
-                        }
-                        if (seqParticle.getMaxOccursUnbounded()) {
-                            elemDeclDomNode.setAttributeNS(null, "maxOccurs",
-                                                           "unbounded");   
-                        } 
-                        else {
-                            if (maxOccurs != 1) {
-                                elemDeclDomNode.setAttributeNS(null, "maxOccurs",
-                                                          String.valueOf(maxOccurs));   
-                            }
-                        }
-                    }
-                    else {
-                        // handling an anonymous schema type
-                        if (typeDef.getTypeCategory() == 
-                                   XSTypeDefinition.SIMPLE_TYPE) {
-                  
-                        }
-                        else if (typeDef.getTypeCategory() == 
-                                  XSTypeDefinition.COMPLEX_TYPE) {
-                            processAnonComplexTypeOnElement(document,
-                                                            elemDeclDomNode,
-                                                            typeDef);
-                        }   
-                    }
-                    sequenceDeclDomNode.appendChild(elemDeclDomNode);
-                }
+                                               + compositor);
+        XSObjectList compositorChildren = modelGroup.getParticles();
+        for (int seqIdx = 0; seqIdx < compositorChildren.getLength(); seqIdx++) {
+            XSObject seqItem = compositorChildren.item(seqIdx);
+            XSParticle seqParticle = (XSParticle) seqItem;
+            XSTerm partclTerm = seqParticle.getTerm();
+            if (partclTerm instanceof XSElementDeclaration) {
+               XSElementDecl elemDecl = (XSElementDecl) partclTerm;
+               addElementDeclToSchemaComponent(document,
+                                    sequenceDeclDomNode,
+                                    elemDecl);
             }
+            
+            // handle more compositor children like, group | choice |
+            // sequence | any ... 
         }
         
         complxTypeDomNode.appendChild(sequenceDeclDomNode);
         
-    } // end of, processSequenceOnComplexType
-    
-    /*
-     * Processing a "choice" declaration on a complex type
-     */
-    private void processChoiceDeclOnComplexType(Document document,
-                                            Element complxTypeDomNode,
-                                            XSModelGroup modelGroup)
-                                            throws DOMException {
-        Element choiceDeclDomNode = document.createElementNS(
-                                                 XSD_LANGUAGE_URI,
-                                                 XSD_LANGUAGE_PREFIX
-                                                 + "choice");
-        // TO DO ...        
-        complxTypeDomNode.appendChild(choiceDeclDomNode);
-        
-    } // end of, processChoiceOnComplexType
+    } // end of, addCompositorOnComplexType
     
     /*
      * Processing an "all" declaration on a complex type
      */
-    private void processAllDeclOnComplexType(Document document,
-                                            Element complxTypeDomNode,
-                                            XSModelGroup modelGroup)
-                                            throws DOMException {
+    private void addAllCompositorOnComplexType(Document document,
+                                               Element complxTypeDomNode,
+                                               XSModelGroup modelGroup)
+                                               throws DOMException {
+        
         Element allDeclDomNode = document.createElementNS(
                                                  XSD_LANGUAGE_URI,
                                                  XSD_LANGUAGE_PREFIX
                                                  + "all");        
-        // TO DO ...        
+              
+        XSObjectList modelParticles = modelGroup.getParticles();
+        for (int prtclIdx = 0; prtclIdx < modelParticles.getLength(); 
+                                                         prtclIdx++) {
+            XSParticle partclItem = (XSParticle) modelParticles.item(prtclIdx);
+            XSTerm partclTerm = partclItem.getTerm();
+            if (partclTerm instanceof XSElementDeclaration) {                
+               addElementDeclToSchemaComponent(document,
+                                               allDeclDomNode,
+                                               (XSElementDecl) partclTerm);   
+            }
+            else if (partclTerm instanceof XSWildcard) {
+               // new in XML Schema 1.1
+               XSWildcardDecl wildCardDecl = (XSWildcardDecl) partclTerm;
+               /*
+               addWildcardToSchemaComponent(document,
+                                            allDeclDomNode,
+                                            wildCardDecl,
+                                            "any");
+               */                                            
+            }
+        }
+        
         complxTypeDomNode.appendChild(allDeclDomNode);
         
-    } // end of, processChoiceOnComplexType 
+    } // end of, addAllCompositorOnComplexType 
+    
+    /*
+     * Adding wild card to a Schema component
+     */
+    private void addWildcardToSchemaComponent(Document document,
+                                              Element parentNode,
+                                              XSWildcardDecl wildCardDecl,
+                                              String wildCardType) {
+        Element wildCardDomNode = document.createElementNS(XSD_LANGUAGE_URI,
+                                                         XSD_LANGUAGE_PREFIX
+                                                         + wildCardType);
+        String processContentsVal = wildCardDecl.getProcessContentsAsString();
+        wildCardDomNode.setAttributeNS(null,
+                                       "processContents",
+                                       processContentsVal);
+        parentNode.appendChild(wildCardDomNode);        
+        
+    } // end of, addWildcardToSchemaComponent
     
     /*
      * Add xs:list as child of xs:simpleType



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