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