You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2006/08/07 06:49:11 UTC

svn commit: r429238 [4/4] - in /webservices/axis2/trunk/java/modules/adb-codegen: src/org/apache/axis2/schema/ src/org/apache/axis2/schema/template/ src/org/apache/axis2/schema/writer/ test-resources/xsd/ test/org/apache/axis2/schema/compile/

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java?rev=429238&r1=429237&r2=429238&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java Sun Aug  6 21:49:10 2006
@@ -469,6 +469,11 @@
                     .getExtensionClassName(), rootElt);
 
         }
+        if (metainf.isRestriction()) {
+            XSLTUtils.addAttribute(model, "restriction", metainf
+                    .getRestrictionClassName(), rootElt);
+
+        }
         //add the mapper class name
         XSLTUtils.addAttribute(model, "mapperClass", getFullyQualifiedMapperClassName(), rootElt);
 
@@ -525,18 +530,33 @@
                                     Document model, Element rootElt, ArrayList propertyNames,
                                     Map typeMap, boolean isInherited) throws SchemaCompilationException {
         // go in the loop and add the part elements
-        QName[] qNames;
+    	QName[] qName;
+    	String javaClassNameForElement;
+        ArrayList missingQNames = new ArrayList();
+        ArrayList qNames = new ArrayList();
+        
+        BeanWriterMetaInfoHolder parentMetaInf = metainf.getParent();
+        
         if (metainf.isOrdered()) {
-            qNames = metainf.getOrderedQNameArray();
+            qName = metainf.getOrderedQNameArray();
         } else {
-            qNames = metainf.getQNameArray();
+            qName= metainf.getQNameArray();
+        }
+        
+        for (int i = 0; i < qName.length; i++) {
+        	qNames.add(qName[i]);
+        }
+        //adding missing QNames to the end, including elements & attributes.
+        if (metainf.isRestriction()) {
+        	addMissingQNames(metainf, qNames, missingQNames);
         }
-
         QName name;
-        for (int i = 0; i < qNames.length; i++) {
+
+        for (int i = 0; i < qNames.size(); i++) {
+        	name = (QName) qNames.get(i);
             Element property = XSLTUtils.addChildElement(model, "property",
                     rootElt);
-            name = qNames[i];
+            name = (QName)qNames.get(i);
             String xmlName = name.getLocalPart();
             XSLTUtils.addAttribute(model, "name", xmlName, property);
             XSLTUtils.addAttribute(model, "nsuri", name.getNamespaceURI(),
@@ -544,13 +564,23 @@
             String javaName = makeUniqueJavaClassName(propertyNames, xmlName);
             XSLTUtils.addAttribute(model, "javaname", javaName, property);
 
-            String javaClassNameForElement = metainf.getClassNameForQName(name);
-
+            if (metainf.isRestriction() && missingQNames.contains(name)) {
+            	javaClassNameForElement = parentMetaInf.getClassNameForQName(name);
+            }
+            else {
+            	javaClassNameForElement = metainf.getClassNameForQName(name);
+            }
+            
             if (javaClassNameForElement == null) {
                 throw new SchemaCompilationException(SchemaCompilerMessages
                         .getMessage("schema.typeMissing"));
             }
-
+            
+            if (metainf.isRestriction() && typeChanged(name, missingQNames, metainf)) {
+            	XSLTUtils.addAttribute(model, "typeChanged", "yes", property);
+            	//XSLTUtils.addAttribute(model, "restricted", "yes", property);
+            }
+            
             XSLTUtils.addAttribute(model, "type", javaClassNameForElement,
                     property);
 
@@ -590,6 +620,11 @@
             XSLTUtils.addAttribute(model, "shorttypename", shortTypeName,
                     property);
 
+            if (metainf.isRestriction() && missingQNames.contains(name)) {
+            	//XSLTUtils.addAttribute(model, "restricted", "yes", property);
+            	XSLTUtils.addAttribute(model, "removed", "yes", property);
+            }
+            
             if (isInherited) {
                 XSLTUtils.addAttribute(model, "inherited", "yes", property);
             }
@@ -606,6 +641,18 @@
             long minOccurs = metainf.getMinOccurs(name);
             XSLTUtils
                     .addAttribute(model, "minOccurs", minOccurs + "", property);
+            
+            //in the case the original element is an array but the derived one is not.
+            if (metainf.isRestriction() && !missingQNames.contains(name) &&
+               (parentMetaInf.getArrayStatusForQName(name) && !metainf.getArrayStatusForQName(name))) {
+            	XSLTUtils.addAttribute(model, "rewrite", "yes", property);
+            	XSLTUtils.addAttribute(model, "occuranceChanged", "yes", property);
+            }
+            else if (metainf.isRestriction() && !missingQNames.contains(name) &&
+            		(minOccursChanged(name, missingQNames, metainf) || maxOccursChanged(name, missingQNames, metainf))) {
+            	XSLTUtils.addAttribute(model, "restricted", "yes", property);
+            	XSLTUtils.addAttribute(model, "occuranceChanged", "yes", property);
+            }
 
             if (metainf.getArrayStatusForQName(name)) {
 
@@ -627,6 +674,162 @@
         }
     }
 
+    private void addMissingQNames(BeanWriterMetaInfoHolder metainf, ArrayList qName, ArrayList missingQNames) {
+    	
+    	QName[] qNames;
+        QName[] pQNames;
+        //ArrayList missingQNames = new ArrayList();
+            		
+        BeanWriterMetaInfoHolder parentMetaInf = metainf.getParent();
+        
+        if (metainf.isOrdered()) {
+            qNames = metainf.getOrderedQNameArray();
+        } else {
+            qNames = metainf.getQNameArray();
+        }
+        
+        if (parentMetaInf.isOrdered()) {
+            pQNames = parentMetaInf.getOrderedQNameArray();
+        } else {
+            pQNames = parentMetaInf.getQNameArray();
+        }
+        
+        
+        for (int i=0; i < pQNames.length; i++) {
+       		if (qNameNotFound(pQNames[i], metainf)) {
+       			missingQNames.add(pQNames[i]);
+       		}
+       	}
+       	//adding missing QNames to the end of list.
+        if (!missingQNames.isEmpty()) {
+       		for (int i=0; i < missingQNames.size(); i++) {
+       			qName.add(missingQNames.get(i));
+       		}
+       	}
+        //return qName;
+    }
+    
+    private boolean qNameNotFound(QName qname, BeanWriterMetaInfoHolder metainf) {
+    	
+    	boolean found = false;
+    	QName[] qNames;
+    	
+    	if (metainf.isOrdered()) {
+        	qNames = metainf.getOrderedQNameArray();
+        } else {
+        	qNames = metainf.getQNameArray();
+        }
+        
+        for (int j = 0; j < qNames.length; j++) {
+        	if (qname.getLocalPart().equals(qNames[j].getLocalPart())) {
+        			found = true;
+        	}
+        }
+        return !found;
+    }
+    
+    private boolean typeChanged(QName qname, ArrayList missingQNames, BeanWriterMetaInfoHolder metainf) {
+    	
+    	boolean typeChanged = false;
+    	QName[] pQNames;
+    	
+    	BeanWriterMetaInfoHolder parentMetainf = metainf.getParent(); 
+        
+    	if (!missingQNames.contains(qname)) {
+    		
+    		if (parentMetainf.isOrdered()) {
+    			pQNames = parentMetainf.getOrderedQNameArray();
+    		} else {
+    			pQNames = parentMetainf.getQNameArray();
+    		}
+    		
+    		for (int j = 0; j < pQNames.length; j++) {
+    			if (qname.getLocalPart().equals(pQNames[j].getLocalPart())) {
+    				
+    				String javaClassForParentElement = parentMetainf.getClassNameForQName(pQNames[j]);
+    				String javaClassForElement = metainf.getClassNameForQName(qname);
+    				
+    				if (!javaClassForParentElement.equals(javaClassForElement)) {
+    					if (javaClassForParentElement.endsWith("[]")) {
+    						if ((javaClassForParentElement.substring(0,javaClassForParentElement.indexOf('['))).equals(javaClassForElement)) {
+    						continue;
+    						}
+    					}
+    					else if (javaClassForElement.endsWith("[]")) {
+    						if ((javaClassForElement.substring(0,javaClassForElement.indexOf('['))).equals(javaClassForParentElement)) {
+    							continue;
+    						}
+    					}
+    					else {
+    						typeChanged = true;
+    					}
+    				}
+    			}
+    		}
+    	}
+        return typeChanged;
+    }
+    
+    private boolean minOccursChanged(QName qname, ArrayList missingQNames, BeanWriterMetaInfoHolder metainf) throws SchemaCompilationException {
+    	
+    	boolean minChanged = false;
+    	QName[] pQNames;
+    	
+    	BeanWriterMetaInfoHolder parentMetainf = metainf.getParent(); 
+        	
+    	if (!missingQNames.contains(qname)) {
+    		
+    		if (parentMetainf.isOrdered()) {
+    			pQNames = parentMetainf.getOrderedQNameArray();
+    		} else {
+    			pQNames = parentMetainf.getQNameArray();
+    		}
+    		
+    		for (int j = 0; j < pQNames.length; j++) {
+    			if (qname.getLocalPart().equals(pQNames[j].getLocalPart())) {
+    				
+    				if (metainf.getMinOccurs(qname) > parentMetainf.getMinOccurs(pQNames[j])) {
+    					minChanged = true;
+    				}
+    				else if(metainf.getMinOccurs(qname) < parentMetainf.getMinOccurs(pQNames[j])) {
+    					throw new SchemaCompilationException(SchemaCompilerMessages.getMessage("minOccurs Wrong!")); 
+    				}
+    				
+    			}
+    		}
+    	}
+        return minChanged;
+    }
+    
+    private boolean maxOccursChanged(QName qname, ArrayList missingQNames, BeanWriterMetaInfoHolder metainf) throws SchemaCompilationException {
+    	
+    	boolean maxChanged = false;
+    	QName[] pQNames;
+    	
+    	BeanWriterMetaInfoHolder parentMetainf = metainf.getParent();
+    	
+    	if (!missingQNames.contains(qname)) {	
+    		if (parentMetainf.isOrdered()) {
+    			pQNames = parentMetainf.getOrderedQNameArray();
+    		} else {
+    			pQNames = parentMetainf.getQNameArray();
+    		}
+    		
+    		for (int j = 0; j < pQNames.length; j++) {
+    			if (qname.getLocalPart().equals(pQNames[j].getLocalPart())) {
+    				
+    				if (metainf.getMaxOccurs(qname) < parentMetainf.getMaxOccurs(pQNames[j])) {
+    					maxChanged = true;
+    				}
+    				else if(metainf.getMaxOccurs(qname) > parentMetainf.getMaxOccurs(pQNames[j])) {
+    					throw new SchemaCompilationException(SchemaCompilerMessages.getMessage("maxOccurs Wrong!")); 
+    				}
+    			}
+    		}
+    	}
+        return maxChanged;
+    }
+    
     /**
      * Test whether the given class name matches the default
      * 
@@ -899,4 +1102,7 @@
 
 
     }
+    
 }
+
+

Added: webservices/axis2/trunk/java/modules/adb-codegen/test-resources/xsd/simple_content_extension.xsd
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test-resources/xsd/simple_content_extension.xsd?rev=429238&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test-resources/xsd/simple_content_extension.xsd (added)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test-resources/xsd/simple_content_extension.xsd Sun Aug  6 21:49:10 2006
@@ -0,0 +1,26 @@
+<schema elementFormDefault="qualified"
+        xmlns:xs="http://www.w3.org/2001/XMLSchema"
+        xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:tns="org.apache.axis2.test5"
+        targetNamespace="org.apache.axis2.test5">
+
+<xs:complexType name="type">
+	<xs:sequence>
+          <xs:element name="first" type="xs:string" />
+          <xs:element name="middle" type="xs:string" />
+          <xs:element name="last" type="xs:string" />
+        </xs:sequence>
+</xs:complexType>
+
+<xs:element name="fullName">
+  <xs:complexType>
+    <xs:simpleContent>
+      <xs:extension base="tns:type">
+        <xs:attribute name="language" type="xs:language"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+ </xs:element>
+
+
+</schema>
\ No newline at end of file

Added: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/compile/SimpleContentExtensionTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/compile/SimpleContentExtensionTest.java?rev=429238&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/compile/SimpleContentExtensionTest.java (added)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/compile/SimpleContentExtensionTest.java Sun Aug  6 21:49:10 2006
@@ -0,0 +1,23 @@
+package org.apache.axis2.schema.compile;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+public class SimpleContentExtensionTest extends AbstractSchemaCompilerTester{
+    protected void setUp() throws Exception {
+        this.fileName = "test-resources/xsd/simple_content_extension.xsd";
+        super.setUp();
+    }
+}



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