You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jaxme-dev@ws.apache.org by jo...@apache.org on 2005/07/05 01:59:19 UTC

cvs commit: ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl JAXBComplexTypeSG.java

jochen      2005/07/04 16:59:19

  Modified:    src/test/jaxb Tag: v0_4 types.xsd
               src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg Tag:
                        v0_4 GroupBeanSG.java BeanSGImpl.java
               src/jaxme/org/apache/ws/jaxme/junit Tag: v0_4
                        NestedGroupTest.java
               src/jaxme/org/apache/ws/jaxme/generator/sg/impl Tag: v0_4
                        JAXBComplexTypeSG.java
  Log:
  Use of xs:extension is now mapped to proper Java inheritance (at least for the bean classes.)
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.10.2.2  +41 -0     ws-jaxme/src/test/jaxb/types.xsd
  
  Index: types.xsd
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/test/jaxb/types.xsd,v
  retrieving revision 1.10.2.1
  retrieving revision 1.10.2.2
  diff -u -r1.10.2.1 -r1.10.2.2
  --- types.xsd	28 Apr 2005 23:57:40 -0000	1.10.2.1
  +++ types.xsd	4 Jul 2005 23:59:19 -0000	1.10.2.2
  @@ -234,4 +234,45 @@
          </xs:sequence>
        </xs:complexType>
      </xs:element>
  +
  +   <xs:complexType name="FsNode">
  +     <xs:sequence>
  +       <xs:element ref="ex:acl" minOccurs="0"/>
  +     </xs:sequence>
  +     <xs:attribute name="id" type="xs:long" use="required"/>
  +     <xs:attribute name="name" type="xs:string" use="required"/>
  +     <xs:attribute name="parent" type="xs:long" use="required"/>
  +   </xs:complexType>
  +
  +   <xs:element name="FsFile" type="ex:FsNode"/>
  +
  +   <xs:element name="FsDirectory">
  +     <xs:complexType>
  +       <xs:complexContent>
  +         <xs:extension base="ex:FsNode">
  +           <xs:attribute name="hidden" type="xs:boolean" use="optional" default="false"/>
  +         </xs:extension>
  +       </xs:complexContent>
  +     </xs:complexType>
  +   </xs:element>
  +
  +   <xs:element name="acl">
  +     <xs:complexType>
  +       <xs:sequence>
  +         <xs:element name="rule" minOccurs="0" maxOccurs="unbounded">
  +           <xs:complexType>
  +             <xs:attribute name="principal" type="xs:string" use="required"/>
  +             <xs:attribute name="mode">
  +               <xs:simpleType>
  +                 <xs:restriction base="xs:string">
  +                   <xs:enumeration value="allow"/>
  +                   <xs:enumeration value="deny"/>
  +                 </xs:restriction>
  +               </xs:simpleType>
  +             </xs:attribute>
  +           </xs:complexType>
  +         </xs:element>
  +       </xs:sequence>
  +     </xs:complexType>
  +   </xs:element>
   </xs:schema>
  
  
  
  No                   revision
  No                   revision
  1.1.2.1   +28 -31    ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/Attic/GroupBeanSG.java
  
  Index: GroupBeanSG.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/Attic/GroupBeanSG.java,v
  retrieving revision 1.1
  retrieving revision 1.1.2.1
  diff -u -r1.1 -r1.1.2.1
  --- GroupBeanSG.java	14 Mar 2005 02:16:09 -0000	1.1
  +++ GroupBeanSG.java	4 Jul 2005 23:59:19 -0000	1.1.2.1
  @@ -36,47 +36,44 @@
   		particles = group.getParticles();
   	}
   
  -	private GroupBeanSG newBeanSG(GroupSG pGroup) throws SAXException {
  -		if (pGroup.isSequence()) {
  -			return new SequenceBeanSG(ctSG, pGroup, null);
  -		} else if (pGroup.isChoice()) {
  -			return new ChoiceBeanSG(ctSG, pGroup, null);
  -		} else if (pGroup.isAll()) {
  -			return new AllBeanSG(ctSG, pGroup, null);
  -		} else {
  -			throw new IllegalStateException("Invalid group type");
  +	private boolean isInheritedParticle(ParticleSG pParticle, ParticleSG[] pInheritedParticles) throws SAXException {
  +		if (pInheritedParticles != null) {
  +			String p = pParticle.getPropertySG().getPropertyName();
  +			for (int i = 0;  i < pInheritedParticles.length;  i++) {
  +				if (pParticle.getPropertySG().getPropertyName().equals(p)) {
  +					return true;
  +				}
  +			}
   		}
  +		return false;
   	}
   
  -	private void generateSubclasses(JavaSource pJs) throws SAXException {
  -		for (int i = 0;  i < particles.length;  i++) {
  -			ParticleSG particle = particles[i];
  -			if (particle.isElement()) {
  +	public void generate() throws SAXException {
  +		super.generate();
  +		JavaSource js = getJavaSource();
  +		ParticleSG[] elementParticles = ccSG.getElementParticles();
  +		ParticleSG[] inheritedParticles = null;
  +		if (ctSG.getTypeSG().isExtension()) {
  +			TypeSG extTSG = ctSG.getTypeSG().getExtendedType();
  +			if (extTSG.isComplex()  &&  !extTSG.getComplexTypeSG().hasSimpleContent()) {
  +				inheritedParticles = extTSG.getComplexTypeSG().getComplexContentSG().getElementParticles();
  +			}
  +		}
  +		for (int i = 0;  i < elementParticles.length;  i++) {
  +			ParticleSG particle = elementParticles[i];
  +			if (!isInheritedParticle(particle, inheritedParticles)) {
   				ObjectSG elementSG = particle.getObjectSG();
   				TypeSG typeSG = elementSG.getTypeSG();
   				if (!typeSG.isGlobalType()  &&  !typeSG.isGlobalClass()  &&  typeSG.isComplex()) {
   					ComplexTypeSG complexTypeSG = typeSG.getComplexTypeSG();
  -					if (pJs.isInterface()) {
  -						complexTypeSG.getXMLInterface(pJs);
  +					if (js.isInterface()) {
  +						complexTypeSG.getXMLInterface(js);
   					} else {
  -						complexTypeSG.getXMLImplementation(pJs);
  +						complexTypeSG.getXMLImplementation(js);
   					}
  -		        }
  -			} else if (particle.isGroup()) {
  -				GroupBeanSG beanSG = newBeanSG(particle.getGroupSG());
  -				beanSG.generateSubclasses(pJs);
  -			} else if (particle.isWildcard()) {
  -				throw new IllegalStateException("TODO: Add support for wildcards");
  -			} else {
  -				throw new IllegalStateException("Unknown particle type: Neither of element, group, or wildcard");
  +			    }
  +				particle.getPropertySG().generate(js);
   			}
   		}
   	}
  -
  -	public void generate() throws SAXException {
  -		super.generate();
  -		JavaSource js = getJavaSource();
  -		generateSubclasses(js);
  -		ctSG.getComplexContentSG().generateProperties(js);
  -	}
   }
  
  
  
  1.1.2.1   +24 -1     ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/Attic/BeanSGImpl.java
  
  Index: BeanSGImpl.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/Attic/BeanSGImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.1.2.1
  diff -u -r1.1 -r1.1.2.1
  --- BeanSGImpl.java	14 Mar 2005 02:16:09 -0000	1.1
  +++ BeanSGImpl.java	4 Jul 2005 23:59:19 -0000	1.1.2.1
  @@ -2,6 +2,7 @@
   
   import org.apache.ws.jaxme.generator.sg.AttributeSG;
   import org.apache.ws.jaxme.generator.sg.ComplexTypeSG;
  +import org.apache.ws.jaxme.generator.sg.TypeSG;
   import org.apache.ws.jaxme.js.JavaSource;
   import org.xml.sax.SAXException;
   
  @@ -22,11 +23,33 @@
   	 */
   	public JavaSource getJavaSource() { return js; }
   
  +	private boolean isInheritedAttribute(AttributeSG pAttr, AttributeSG[] pInheritedAttributes) throws SAXException {
  +		if (pInheritedAttributes != null) {
  +			String p = pAttr.getPropertySG().getPropertyName();
  +			for (int i = 0;  i < pInheritedAttributes.length;  i++) {
  +				if (pInheritedAttributes[i].getPropertySG().getPropertyName().equals(p)) {
  +					return true;
  +				}
  +			}
  +		}
  +		return false;
  +	}
  +
   	public void generate() throws SAXException {
   		JavaSource js = getJavaSource();
   		AttributeSG[] myAttributes = ctSG.getAttributes();
  +		AttributeSG[] inheritedAttributes = null;
  +		if (ctSG.getTypeSG().isExtension()) {
  +			TypeSG tSG = ctSG.getTypeSG().getExtendedType();
  +			if (tSG.isComplex()) {
  +				inheritedAttributes = tSG.getComplexTypeSG().getAttributes();
  +			}
  +		}
   		for (int i = 0;  i < myAttributes.length;  i++) {
  -			myAttributes[i].getPropertySG().generate(js);
  +			AttributeSG attr = myAttributes[i];
  +			if (!isInheritedAttribute(attr, inheritedAttributes)) {
  +				myAttributes[i].getPropertySG().generate(js);
  +			}
   		}
   	}
   }
  
  
  
  No                   revision
  No                   revision
  1.4.2.2   +12 -1     ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/NestedGroupTest.java
  
  Index: NestedGroupTest.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/NestedGroupTest.java,v
  retrieving revision 1.4.2.1
  retrieving revision 1.4.2.2
  diff -u -r1.4.2.1 -r1.4.2.2
  --- NestedGroupTest.java	18 Apr 2005 20:31:49 -0000	1.4.2.1
  +++ NestedGroupTest.java	4 Jul 2005 23:59:19 -0000	1.4.2.2
  @@ -18,7 +18,6 @@
   import java.io.StringReader;
   
   import javax.xml.bind.JAXBContext;
  -import javax.xml.bind.UnmarshalException;
   import javax.xml.bind.Unmarshaller;
   import javax.xml.bind.ValidationEvent;
   import javax.xml.bind.ValidationEventHandler;
  @@ -26,6 +25,10 @@
   import org.apache.ws.jaxme.ValidationEvents;
   import org.apache.ws.jaxme.impl.ValidationEventImpl;
   import org.apache.ws.jaxme.test.misc.group.impl.PersonsImpl;
  +import org.apache.ws.jaxme.test.misc.types.FsDirectory;
  +import org.apache.ws.jaxme.test.misc.types.FsDirectoryType;
  +import org.apache.ws.jaxme.test.misc.types.FsFile;
  +import org.apache.ws.jaxme.test.misc.types.FsNode;
   import org.apache.ws.jaxme.test.nestedgroups.MailTemplate;
   import org.apache.ws.jaxme.test.nestedgroups.impl.MailTemplateImpl;
   import org.xml.sax.InputSource;
  @@ -123,4 +126,12 @@
   		}
   		assertTrue(h.ok);
   	}
  +
  +	/** Tests proper inheritance of xs:extension.
  +	 */
  +	public void testInheritance() throws Exception {
  +		assertTrue(FsNode.class.isAssignableFrom(FsFile.class));
  +		assertTrue(FsNode.class.isAssignableFrom(FsDirectory.class));
  +		assertTrue(FsNode.class.isAssignableFrom(FsDirectoryType.class));
  +	}
   }
  
  
  
  No                   revision
  No                   revision
  1.17.2.1  +15 -2     ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
  
  Index: JAXBComplexTypeSG.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java,v
  retrieving revision 1.17
  retrieving revision 1.17.2.1
  diff -u -r1.17 -r1.17.2.1
  --- JAXBComplexTypeSG.java	14 Mar 2005 02:16:09 -0000	1.17
  +++ JAXBComplexTypeSG.java	4 Jul 2005 23:59:19 -0000	1.17.2.1
  @@ -89,7 +89,7 @@
   		classContext = new GlobalContext(pTypeSG.getName(), pType, null, suffix, pTypeSG.getSchema());
   		log.finest(mName, "<-", classContext);
   	}
  -	
  +
   	/** <p>Constructor for a local type, which is embedded into the enclosing
   	 * <code>pContext</code>.</p>
   	 */
  @@ -194,8 +194,21 @@
   	private void createXMLBean(ComplexTypeSG pController, JavaSource pJs)
   			throws SAXException {
   		BeanSG beanSG = newBeanSG(pController, pJs);
  -		if (!pJs.isInterface()) {
  +		if (pJs.isInterface()) {
  +			if (pController.getTypeSG().isExtension()) {
  +				TypeSG extType = pController.getTypeSG().getExtendedType();
  +				if (extType.isComplex()) {
  +					pJs.addExtends(extType.getComplexTypeSG().getClassContext().getXMLInterfaceName());
  +				}
  +			}
  +		} else {
   			SerializableSG.makeSerializable(pController.getTypeSG().getSchema(), pJs);
  +			if (pController.getTypeSG().isExtension()) {
  +				TypeSG extType = pController.getTypeSG().getExtendedType();
  +				if (extType.isComplex()) {
  +					pJs.addExtends(extType.getComplexTypeSG().getClassContext().getXMLImplementationName());
  +				}
  +			}
   		}
   		beanSG.generate();
   	}
  
  
  

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