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/02/02 17:30:44 UTC

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

Author: mukulg
Date: Tue Feb  2 16:30:33 2010
New Revision: 905694

URL: http://svn.apache.org/viewvc?rev=905694&view=rev
Log:
Adding support for minOccurs & maxOccurs attributes on xs:element, while serializing an XSModel

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=905694&r1=905693&r2=905694&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 Tue Feb  2 16:30:33 2010
@@ -177,7 +177,8 @@
       // 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);
+         addElementDeclToSchemaComponent(document, schemaDeclDomNode,
+                                         elemDecl, null, null, true);
        }
     } // end of, processGolabElementDecl
 
@@ -186,13 +187,16 @@
      */
     private void addElementDeclToSchemaComponent(Document document,
                                              Element parentDomNode,
-                                             XSElementDecl elemDecl)
+                                             XSElementDecl elemDecl,
+                                             String minOccurs,
+                                             String maxOccurs,
+                                             boolean isGlobal)
                                              throws DOMException {
          String elemName = elemDecl.getName();         
          Element elemDeclDomNode = document.createElementNS(XSD_LANGUAGE_URI,
                                                         XSD_LANGUAGE_PREFIX
                                                         + "element");
-         elemDeclDomNode.setAttributeNS(null, "name", elemName);        
+         elemDeclDomNode.setAttributeNS(null, "name", elemName); 
 
          XSTypeDefinition typeDef = elemDecl.getTypeDefinition();
          if (!typeDef.getAnonymous()) {
@@ -223,6 +227,16 @@
                                               typeDef);
            }   
          }
+         
+         // add possible, minOccurs & maxOccurs attributes
+         if (!isGlobal) {
+            if (minOccurs != null) {
+               elemDeclDomNode.setAttributeNS(null, "minOccurs", minOccurs);  
+            }
+            if (maxOccurs != null) {
+               elemDeclDomNode.setAttributeNS(null, "maxOccurs", maxOccurs);  
+            }
+         }
 
          parentDomNode.appendChild(elemDeclDomNode);
          
@@ -565,13 +579,19 @@
         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();
+            XSParticle seqParticle = (XSParticle) seqItem;            
+            String minOccurs = getMinOccursVal(seqParticle);
+            String maxOccurs = getMaxOccursVal(seqParticle);
+            
+            XSTerm partclTerm = seqParticle.getTerm();            
             if (partclTerm instanceof XSElementDeclaration) {
                XSElementDecl elemDecl = (XSElementDecl) partclTerm;
                addElementDeclToSchemaComponent(document,
-                                    sequenceDeclDomNode,
-                                    elemDecl);
+                                               sequenceDeclDomNode,
+                                               elemDecl,
+                                               minOccurs,
+                                               maxOccurs,
+                                               false);
             }
             
             // handle more compositor children like, group | choice |
@@ -599,11 +619,17 @@
         for (int prtclIdx = 0; prtclIdx < modelParticles.getLength(); 
                                                          prtclIdx++) {
             XSParticle partclItem = (XSParticle) modelParticles.item(prtclIdx);
+            String minOccurs = getMinOccursVal(partclItem);
+            String maxOccurs = getMaxOccursVal(partclItem);
+            
             XSTerm partclTerm = partclItem.getTerm();
             if (partclTerm instanceof XSElementDeclaration) {                
                addElementDeclToSchemaComponent(document,
                                                allDeclDomNode,
-                                               (XSElementDecl) partclTerm);   
+                                               (XSElementDecl) partclTerm,
+                                               minOccurs,
+                                               maxOccurs,
+                                               false);   
             }
             else if (partclTerm instanceof XSWildcard) {
                XSWildcardDecl wildCardDecl = (XSWildcardDecl) partclTerm;
@@ -754,5 +780,38 @@
       // unreach
       return null;
     }
+    
+    /*
+     * Given an XSD particle, get it's minOccurs value as a String.
+     */
+    private String getMinOccursVal(XSParticle particle) {
+       String minOccursStr = null;
+       
+       int minOccurs = particle.getMinOccurs();        
+       if (minOccurs != 1) {
+          minOccursStr = String.valueOf(minOccurs);   
+       } 
+
+       return minOccursStr; 
+    }
+    
+    /*
+     * Given an XSD particle, get it's maxOccurs value as a String.
+     */
+    private String getMaxOccursVal(XSParticle particle) {
+       String maxOccursStr = null;  
+       
+       int maxOccurs = particle.getMaxOccurs();
+       if (particle.getMaxOccursUnbounded()) {
+          maxOccursStr = "unbounded";  
+       }
+       else {
+          if (maxOccurs != 1) {
+             maxOccursStr = String.valueOf(maxOccurs);  
+          }
+       }
+
+       return maxOccursStr; 
+    }
 
 }



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