Update of /cvsroot/jaxme/JaxMe2/src/net/sf/jaxme/generator/jaxb/impl
In directory sc8-pr-cvs1:/tmp/cvs-serv32423/src/net/sf/jaxme/generator/jaxb/impl
Modified Files:
JAXBGlobalSchema.java JAXBInnerSchema.java JAXBSchemaImpl.java
JAXBSchemaReader.java
Log Message:
Added the events framework to support the development of
SchemaReaders.
Index: JAXBGlobalSchema.java
===================================================================
RCS file:
/cvsroot/jaxme/JaxMe2/src/net/sf/jaxme/generator/jaxb/impl/JAXBGlobalSchema.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- JAXBGlobalSchema.java 4 Jan 2003 02:33:17 -0000 1.1
+++ JAXBGlobalSchema.java 11 Mar 2003 20:54:20 -0000 1.2
@@ -1,5 +1,8 @@
package net.sf.jaxme.generator.jaxb.impl;
+import java.util.HashMap;
+import java.util.Map;
+
import net.sf.jaxme.generator.jaxb.GlobalBindings;
@@ -13,6 +16,7 @@
*/
public class JAXBGlobalSchema extends JAXBSchemaImpl {
private GlobalBindings globalBindings;
+ private Map globalCustomData = new HashMap();
public void setGlobalBindings(GlobalBindings pGlobalBindings) {
globalBindings = pGlobalBindings;
@@ -23,5 +27,16 @@
globalBindings = new GlobalBindingsImpl();
}
return globalBindings;
+ }
+
+ public void setGlobalCustomData(String pKey, Object pObject) {
+ globalCustomData.put(pKey, pObject);
+ }
+ public Object getGlobalCustomData(String pKey) {
+ return globalCustomData.get(pKey);
+ }
+
+ public JAXBGlobalSchema getGlobalSchema() {
+ return this;
}
}
Index: JAXBInnerSchema.java
===================================================================
RCS file:
/cvsroot/jaxme/JaxMe2/src/net/sf/jaxme/generator/jaxb/impl/JAXBInnerSchema.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- JAXBInnerSchema.java 4 Jan 2003 02:33:17 -0000 1.1
+++ JAXBInnerSchema.java 11 Mar 2003 20:54:20 -0000 1.2
@@ -23,4 +23,9 @@
JAXBSchema pSchema = (JAXBSchema) outerSchema.get();
return pSchema.getGlobalBindings();
}
+
+ public JAXBGlobalSchema getGlobalSchema() {
+ JAXBSchema pSchema = (JAXBSchema) outerSchema.get();
+ return pSchema.getGlobalSchema();
+ }
}
Index: JAXBSchemaImpl.java
===================================================================
RCS file:
/cvsroot/jaxme/JaxMe2/src/net/sf/jaxme/generator/jaxb/impl/JAXBSchemaImpl.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- JAXBSchemaImpl.java 28 Jan 2003 21:35:58 -0000 1.8
+++ JAXBSchemaImpl.java 11 Mar 2003 20:54:21 -0000 1.9
@@ -37,6 +37,9 @@
private Map attributeGroups, attributes, elements, types;
private List importedSchemas;
private List includedSchemas;
+ private Map customData;
+
+ public abstract JAXBGlobalSchema getGlobalSchema();
public void setSchemaBindings(SchemaBindings pSchemaBindings) {
schemaBindings = pSchemaBindings;
@@ -450,5 +453,12 @@
public JAXBSchema[] getRedefinedSchemas() {
return new JAXBSchema[0];
+ }
+
+ public void setCustomData(String pKey, Object pObject) {
+ customData.put(pKey, pObject);
+ }
+ public Object getCustomData(String pKey) {
+ return customData.get(pKey);
}
}
Index: JAXBSchemaReader.java
===================================================================
RCS file:
/cvsroot/jaxme/JaxMe2/src/net/sf/jaxme/generator/jaxb/impl/JAXBSchemaReader.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- JAXBSchemaReader.java 6 Mar 2003 20:51:06 -0000 1.14
+++ JAXBSchemaReader.java 11 Mar 2003 20:54:22 -0000 1.15
@@ -3,11 +3,12 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
import java.util.StringTokenizer;
import javax.xml.namespace.QName;
@@ -24,21 +25,23 @@
import net.sf.jaxme.generator.SchemaException;
import net.sf.jaxme.generator.SchemaReader;
+import net.sf.jaxme.generator.events.Handler;
+import net.sf.jaxme.generator.events.SchemaBindingsListener;
+import net.sf.jaxme.generator.events.impl.ObjectHandler;
+import net.sf.jaxme.generator.events.impl.SchemaBindingsHandler;
+import net.sf.jaxme.generator.events.impl.TypeHandler;
import net.sf.jaxme.generator.impl.SchemaReaderImpl;
import net.sf.jaxme.generator.jaxb.Class;
-import net.sf.jaxme.generator.jaxb.GlobalBindings;
import net.sf.jaxme.generator.jaxb.JAXBSchema;
import net.sf.jaxme.generator.jaxb.JavaType;
import net.sf.jaxme.generator.jaxb.Javadoc;
import net.sf.jaxme.generator.jaxb.Property;
import net.sf.jaxme.generator.jaxb.SchemaBindings;
import net.sf.jaxme.generator.jaxb.TypesafeEnumClass;
-import net.sf.jaxme.generator.schema.ComplexTypeContent;
import net.sf.jaxme.generator.schema.Schema;
import net.sf.jaxme.generator.schema.SchemaAttribute;
import net.sf.jaxme.generator.schema.SchemaAttributeGroup;
import net.sf.jaxme.generator.schema.SchemaClass;
-import net.sf.jaxme.generator.schema.SchemaComplexElement;
import net.sf.jaxme.generator.schema.SchemaElement;
import net.sf.jaxme.generator.schema.SchemaObject;
import net.sf.jaxme.generator.schema.impl.ComplexTypeContentImpl;
@@ -54,6 +57,7 @@
import net.sf.jaxme.generator.types.SchemaComplexType;
import net.sf.jaxme.generator.types.SchemaSimpleType;
import net.sf.jaxme.generator.types.SchemaType;
+import net.sf.jaxme.generator.types.SchemaTypeInContext;
import net.sf.jaxme.generator.types.SimpleContentType;
import net.sf.jaxme.generator.types.UnionType;
import net.sf.jaxme.generator.types.impl.ComplexContentTypeImpl;
@@ -68,7 +72,6 @@
import net.sf.jaxme.generator.util.Reflect;
import net.sf.jaxme.util.Configurator;
import net.sf.jaxme.util.DOMSerializer;
-import net.sf.jaxme.util.NamespaceResolver;
/**
@@ -77,7 +80,7 @@
* @since JaxMe 2.0
*/
public class JAXBSchemaReader extends SchemaReaderImpl
- implements SchemaReader {
+ implements SchemaReader, SchemaBindingsListener {
private static final Logger log = Logger.getLogger(JAXBSchemaReader.class);
/** <p>The JAXB Schema URI: <code>http://java.sun.com/xml/ns/jaxb</code></p>
@@ -91,10 +94,30 @@
*/
public static final String XML_SCHEMA_DATATYPES_URI =
"http://www.w3.org/2001/XMLSchema-datatypes";
+ private SchemaBindingsHandler schemaBindingsHandler = new SchemaBindingsHandler();
+ private ObjectHandler objectHandler = new ObjectHandler();
+ private TypeHandler typeHandler = new TypeHandler();
+ private Set keys = new HashSet();
+
/** <p>Creates a new instance of JAXBSchemaReader.</p>
*/
- public JAXBSchemaReader() {}
+ public JAXBSchemaReader() {
+ getSchemaBindingsHandler().addListener(this);
+ }
+ public String getKey(String pSuggestedKey) {
+ int i = 0;
+ String key = pSuggestedKey;
+ while (keys.contains(pSuggestedKey)) {
+ key = pSuggestedKey + "." + ++i;
+ }
+ keys.add(key);
+ return key;
+ }
+
+ public Handler getSchemaBindingsHandler() {
+ return schemaBindingsHandler;
+ }
/** <p>Formats a message for logging.</p>
*/
@@ -201,12 +224,13 @@
protected SchemaComplexType parseComplexType(JAXBSchemaImpl pSchema,
Element pDocumentElement,
Element pSchemaElement,
- boolean pGlobal)
- throws SchemaException {
+ Object pContext)
+ throws Exception {
final String mName = "parseComplexType";
+ boolean isGlobal = (pContext instanceof Schema);
QName qName = null;
- if (pGlobal) {
+ if (isGlobal) {
String name = pSchemaElement.getAttributeNS(null, "name");
if (name == null || name.length() == 0) {
logError(pSchema, pSchemaElement, mName,
@@ -223,6 +247,7 @@
}
SchemaComplexType result = null;
+ SchemaTypeInContext resultContext = null;
Element childElementNode = null;
Element attributeNode = null;
@@ -291,6 +316,8 @@
ctc.setSchemaType(st);
ctc.setSchema(pSchema);
result = sict;
+ objectHandler.eventComplexTypeContent(pSchema, pDocumentElement,
+ pSchemaElement, ctc);
}
} else {
for (Node typeNode = restrictionNode.getFirstChild();
@@ -309,7 +336,7 @@
SchemaSimpleType st = parseSimpleType(pSchema,
pDocumentElement,
(Element) typeNode,
- false);
+ ctc);
if (st == null) {
logError(pSchema, typeNode, mName,
"Failed to parse simpleType declaration, ignored");
@@ -317,9 +344,17 @@
}
ctc.setSchemaType(st);
- SimpleContentTypeImpl sct;
- sct = new SimpleContentTypeImpl();
+ typeHandler.eventType(pSchema, pDocumentElement,
+ (Element) typeNode,
+ (SchemaTypeInContext) st);
+ objectHandler.eventComplexTypeContent(pSchema,
+ pDocumentElement,
+ (Element)
restrictionNode,
+ ctc);
+ SimpleContentTypeImpl sct = new SimpleContentTypeImpl();
sct.setContentObject(ctc);
+ objectHandler.eventComplexTypeContent(pSchema,
pDocumentElement,
+ pSchemaElement, ctc);
result = sct;
} else if ("complexType".equals(typeNode.getLocalName())) {
if (result != null) {
@@ -450,11 +485,12 @@
return null;
}
- if (pGlobal) {
+ if (isGlobal) {
result.setQName(qName);
result.setGlobal(Boolean.TRUE);
- result = (SchemaComplexType) SchemaTypeInContextFactory.getInstance(pSchema,
result);
- pSchema.addSchemaType(result);
+ resultContext = SchemaTypeInContextFactory.getInstance(pSchema, result);
+ pSchema.addSchemaType(resultContext);
+ result = (SchemaComplexType) resultContext;
}
Node appInfoNode = DOM.getAppinfo(pSchemaElement);
@@ -464,18 +500,12 @@
iter.hasNext(); ) {
Element classElement = (Element) iter.next();
if (classDeclaration == null) {
- DOMSerializer serializer = new DOMSerializer();
- Configurator configurator = new Configurator();
- configurator.setNamespace(JAXB_SCHEMA_URI);
- SchemaBindingsFactory factory =
- new SchemaBindingsFactory(pSchema.getGlobalBindings());
- configurator.setBeanFactory(factory);
try {
- serializer.serialize(classElement, configurator);
+ classDeclaration = new ClassImpl();
+ Configurator.parse(classElement, classDeclaration,
getSupportedNamespaces());
} catch (SAXException e) {
throw new SchemaException("SAXException: " + e.getMessage(), e);
}
- classDeclaration = (Class) configurator.getResult();
} else {
logError(pSchema, classElement, mName,
"Multiple class declarations, ignoring all but the first");
@@ -550,6 +580,20 @@
}
}
+ if (resultContext == null) {
+ if (pContext instanceof SchemaObject) {
+ resultContext = SchemaTypeInContextFactory.getInstance((SchemaObject)
pContext,
+ result);
+ } else if (pContext instanceof SchemaType) {
+ resultContext = SchemaTypeInContextFactory.getInstance((SchemaType) pContext,
+ result);
+ } else {
+ throw new IllegalArgumentException("Context must be either of schema, object
or type");
+ }
+ }
+
+ typeHandler.eventType(pSchema, pDocumentElement, pSchemaElement, resultContext);
+
return result;
}
@@ -600,8 +644,8 @@
protected SchemaSimpleType parseInnerSimpleType(JAXBSchemaImpl pSchema,
Element pDocumentElement,
Element pOuterElement,
- boolean pGlobal)
- throws SchemaException {
+ Object pContext)
+ throws Exception {
final String mName = "parseInnerSimpleType";
Element innerSimpleTypeElement = null;
for (Node child = pOuterElement.getFirstChild(); child != null;
@@ -626,7 +670,7 @@
}
SchemaSimpleType result = parseSimpleType(pSchema, pDocumentElement,
- innerSimpleTypeElement, pGlobal);
+ innerSimpleTypeElement, pContext);
if (result == null) {
logError(pSchema, pOuterElement, mName,
"Ignoring simpleType declaration, because inner simpleType within
'restriction' or 'union' did not return a result");
@@ -648,17 +692,12 @@
if (appInfoChild.getNodeType() == Node.ELEMENT_NODE &&
JAXB_SCHEMA_URI.equals(appInfoChild.getNamespaceURI())) {
if ("typesafeEnumClass".equals(appInfoChild.getLocalName())) {
- DOMSerializer serializer = new DOMSerializer();
- Configurator configurator = new Configurator();
- configurator.setNamespace(JAXB_SCHEMA_URI);
- SchemaBindingsFactory factory = new
SchemaBindingsFactory(pSchema.getGlobalBindings());
- configurator.setBeanFactory(factory);
try {
- serializer.serialize(appInfoChild, configurator);
+ typesafeEnumClass = new TypesafeEnumClassImpl(null);
+ Configurator.parse(appInfoChild, typesafeEnumClass,
getSupportedNamespaces());
} catch (SAXException e) {
throw new SchemaException("SAXException: " + e.getMessage(), e);
}
- typesafeEnumClass = (TypesafeEnumClass) configurator.getResult();
}
}
}
@@ -704,18 +743,13 @@
"Already seen a typesafeEnumMember, ignoring this one");
continue;
}
- DOMSerializer serializer = new DOMSerializer();
- Configurator configurator = new Configurator();
- configurator.setNamespace(JAXB_SCHEMA_URI);
- SchemaBindingsFactory factory =
- new SchemaBindingsFactory(pSchema.getGlobalBindings());
- configurator.setBeanFactory(factory);
+
try {
- serializer.serialize(appInfoChild, configurator);
+ enumMember = new TypesafeEnumClassImpl.TypesafeEnumMemberImpl();
+ Configurator.parse(appInfoChild, enumMember,
getSupportedNamespaces());
} catch (SAXException e) {
throw new SchemaException("SAXException: " + e.getMessage(), e);
}
- enumMember = (TypesafeEnumClass.TypesafeEnumMember)
configurator.getResult();
}
}
}
@@ -816,13 +850,15 @@
protected SchemaSimpleType parseSimpleType(JAXBSchemaImpl pSchema,
Element pDocumentElement,
Element pSchemaElement,
- boolean pGlobal)
- throws SchemaException {
+ Object pContext)
+ throws Exception {
final String mName = "parseSimpleType";
- SchemaSimpleType result = null;
+ SchemaSimpleType result = null;
+ SchemaTypeInContext resultContext = null;
QName qName = null;
- if (pGlobal) {
+ boolean isGlobal = (pContext instanceof Schema);
+ if (isGlobal) {
String name = pSchemaElement.getAttributeNS(null, "name");
if (name == null || name.length() == 0) {
logError(pSchema, pSchemaElement, mName,
@@ -855,7 +891,7 @@
SchemaType st;
if (baseTypeName == null || baseTypeName.length() == 0) {
st = parseInnerSimpleType(pSchema, pDocumentElement, restrictionNode,
- pGlobal);
+ pContext);
if (st == null) {
logError(pSchema, node, mName,
"Ignoring simpleType declaration, missing or unparsable inner
simpleType declaration");
@@ -889,8 +925,7 @@
SchemaSimpleType sst;
if (itemTypeName == null || itemTypeName.length() == 0) {
- sst = parseInnerSimpleType(pSchema, pDocumentElement, listNode,
- false);
+ sst = parseInnerSimpleType(pSchema, pDocumentElement, listNode, pContext);
} else {
sst = getSchemaSimpleType(pSchema, itemTypeName, listNode);
}
@@ -960,12 +995,11 @@
JAXBSchemaReader.XML_SCHEMA_URI.equals(child.getNamespaceURI())) {
if ("simpleType".equals(child.getLocalName())) {
SchemaSimpleType st = parseSimpleType(pSchema, pDocumentElement,
- (Element) child, false);
+ (Element) child, ust);
if (st == null) {
logError(pSchema, child, mName,
"Failed to parse inner simpleType declaration");
} else {
- st = (SchemaSimpleType) SchemaTypeInContextFactory.getInstance(ust,
st);
ust.addMemberType(st);
}
}
@@ -985,13 +1019,33 @@
"Ignoring simpleType declaration without valid 'restriction', 'list' or
'union' child");
}
- if (pGlobal) {
+ if (isGlobal) {
result.setQName(qName);
result.setGlobal(Boolean.TRUE);
- result = (SchemaSimpleType) SchemaTypeInContextFactory.getInstance(pSchema,
result);
- pSchema.addSchemaType(result);
}
- return result;
+
+ if (resultContext == null) {
+ if (pContext instanceof SchemaObject) {
+ resultContext = SchemaTypeInContextFactory.getInstance((SchemaObject)
pContext,
+ result);
+ } else if (pContext instanceof SchemaType) {
+ resultContext = SchemaTypeInContextFactory.getInstance((SchemaType) pContext,
+ result);
+ } else if (pContext instanceof Schema) {
+ resultContext = SchemaTypeInContextFactory.getInstance((Schema) pContext,
+ result);
+ } else {
+ throw new IllegalArgumentException("Context must be either of schema, object
or type");
+ }
+ }
+
+ if (isGlobal) {
+ pSchema.addSchemaType(resultContext);
+ }
+
+ typeHandler.eventType(pSchema, pDocumentElement, pSchemaElement, resultContext);
+
+ return (SchemaSimpleType) resultContext;
}
/** <p>Parses an attribute definition and returns the parsed attribute.
@@ -1001,7 +1055,7 @@
protected SchemaAttribute parseAttribute(JAXBSchemaImpl pSchema,
Element pDocumentElement,
Element pSchemaElement,
- boolean pGlobal) throws SchemaException {
+ boolean pGlobal) throws Exception {
final String mName = "parseAttribute";
SchemaAttributeImpl result;
@@ -1059,7 +1113,7 @@
}
if (hasInnerSimpleType) {
sst = parseInnerSimpleType(pSchema, pDocumentElement,
- pSchemaElement, false);
+ pSchemaElement, attr);
if (sst == null) {
logError(pSchema, pSchemaElement, mName,
"Ignoring attribute declaration, missing or invalid " +
@@ -1092,6 +1146,7 @@
}
parsePropertyNode(pSchema, pSchemaElement, result);
+ objectHandler.eventAttribute(pSchema, pDocumentElement, pSchemaElement, result);
return result;
}
@@ -1109,18 +1164,13 @@
iter.hasNext(); ) {
Element propertyElement = (Element) iter.next();
if (propertyDeclaration == null) {
- DOMSerializer serializer = new DOMSerializer();
- Configurator configurator = new Configurator();
- configurator.setNamespace(JAXB_SCHEMA_URI);
- SchemaBindingsFactory factory =
- new SchemaBindingsFactory(pSchema.getSchemaBindings());
- configurator.setBeanFactory(factory);
try {
- serializer.serialize(propertyElement, configurator);
+ PropertyImpl property = new PropertyImpl(pSchema.getSchemaBindings());
+ Configurator.parse(propertyElement, property, getSupportedNamespaces());
+ propertyDeclaration = property;
} catch (SAXException e) {
throw new SchemaException("SAXException: " + e.getMessage(), e);
}
- propertyDeclaration = (Property) configurator.getResult();
} else {
logError(pSchema, propertyElement, "parseAttributes",
"Multiple property declarations are not supported, ignoring all but
the first one.");
@@ -1158,7 +1208,7 @@
Element pDocumentElement,
Element pSchemaElement,
boolean pGlobal)
- throws SchemaException {
+ throws Exception {
final String mName = "parseAttributeGroup";
Node ref = pGlobal ? null : pSchemaElement.getAttributeNodeNS(null, "ref");
SchemaAttributeGroupImpl result;
@@ -1225,6 +1275,8 @@
}
DOM.assignBeanProperties(result, pSchemaElement);
+ objectHandler.eventAttributeGroup(pSchema, pDocumentElement, pSchemaElement,
result);
+
return result;
}
@@ -1235,7 +1287,7 @@
protected SchemaElement parseElement(JAXBSchemaImpl pSchema,
Element pDocumentElement,
Element pSchemaElement,
- boolean pGlobal) throws SchemaException {
+ boolean pGlobal) throws Exception {
final String mName = "parseElement";
Node ref = pSchemaElement.getAttributeNodeNS(null, "ref");
@@ -1302,7 +1354,7 @@
SchemaSimpleElementImpl impl = new SchemaSimpleElementImpl();
impl.setSchema(pSchema);
st = parseSimpleType(pSchema, pDocumentElement,
- (Element) node, false);
+ (Element) node, impl);
st = SchemaTypeInContextFactory.getInstance(impl, st);
impl.setSchemaType(st);
impl.setSchemaProperty(new SchemaPropertyImpl());
@@ -1311,11 +1363,14 @@
SchemaComplexElementImpl impl = new SchemaComplexElementImpl();
impl.setSchema(pSchema);
st = parseComplexType(pSchema, pDocumentElement,
- (Element) node, false);
- st = SchemaTypeInContextFactory.getInstance(impl, st);
- impl.setSchemaType(st);
- impl.setSchemaProperty(new SchemaPropertyImpl());
- result = impl;
+ (Element) node, impl);
+ if (st != null) {
+ SchemaTypeInContext stic =
SchemaTypeInContextFactory.getInstance(impl, st);
+ impl.setSchemaType(stic);
+ impl.setSchemaProperty(new SchemaPropertyImpl());
+ result = impl;
+ typeHandler.eventType(pSchema, pDocumentElement, pSchemaElement,
stic);
+ }
}
}
}
@@ -1374,6 +1429,8 @@
parsePropertyNode(pSchema, pSchemaElement, result);
+ objectHandler.eventElement(pSchema, pDocumentElement, pSchemaElement, result);
+
return result;
}
@@ -1412,29 +1469,53 @@
return null;
}
- public static class SchemaBindingsFactory {
- private GlobalBindings globalBindings;
- private SchemaBindings schemaBindings;
- private SchemaBindingsFactory(GlobalBindings pGlobalBindings) {
- globalBindings = pGlobalBindings;
- }
- private SchemaBindingsFactory(SchemaBindings pSchemaBindings) {
- schemaBindings = pSchemaBindings;
- }
- public Object createSchemaBindings() {
- return globalBindings.newSchemaBindings();
- }
- public Object createTypesafeEnumClass() {
- return new TypesafeEnumClassImpl(null);
+
+ public void eventGlobalBindings(JAXBGlobalSchema pSchema,
+ Element pDocumentElement,
+ Element pAppInfoElement) throws Exception {
+ final String mName = "eventGlobalBindings";
+ if (pAppInfoElement == null) {
+ return;
}
- public Object createTypesafeEnumMember() {
- return new TypesafeEnumClassImpl.TypesafeEnumMemberImpl();
+ Iterator iter = DOM.getChildElements(pAppInfoElement, JAXB_SCHEMA_URI,
"globalBindings");
+ if (iter.hasNext()) {
+ Element globalBindingsElement = (Element) iter.next();
+
+ Configurator configurator = new Configurator();
+ configurator.setNamespaces(getSupportedNamespaces());
+ GlobalBindingsImpl globalBindings = new GlobalBindingsImpl();
+ globalBindings.setNamespaceResolver(configurator);
+ configurator.setRootObject(globalBindings);
+ DOMSerializer ds = new DOMSerializer();
+ ds.serialize(globalBindingsElement, configurator);
+ pSchema.setGlobalBindings(globalBindings);
+
+ if (iter.hasNext()) {
+ logError(pSchema, (Element) iter.next(), mName,
+ "Multiple globalBindings elements are not supported, ignoring all
but the first.");
+ }
}
- public Object createClass() {
- return new ClassImpl();
+ }
+
+
+ public void eventSchemaBindings(JAXBSchemaImpl pSchema,
+ Element pDocumentElement,
+ Element pAppInfoElement) throws Exception {
+ final String mName = "eventSchemaBindings";
+ if (pAppInfoElement == null) {
+ return;
}
- public Object createProperty() {
- return new PropertyImpl(schemaBindings);
+ Iterator iter = DOM.getChildElements(pAppInfoElement, JAXB_SCHEMA_URI,
"schemaBindings");
+ if (iter.hasNext()) {
+ Element schemaBindingsElement = (Element) iter.next();
+ SchemaBindings schemaBindings = pSchema.getGlobalBindings().newSchemaBindings();
+ Configurator.parse(schemaBindingsElement, schemaBindings,
getSupportedNamespaces());
+ pSchema.setSchemaBindings(schemaBindings);
+
+ if (iter.hasNext()) {
+ logError(pSchema, (Element) iter.next(), mName,
+ "Multiple schemaBindings elements are not supported, ignoring all
but the first.");
+ }
}
}
@@ -1458,25 +1539,11 @@
}
DOM.assignBeanProperties(pSchema, pDocumentElement);
-
- Element appinfoElement = DOM.getAppinfo(pDocumentElement);
- if (appinfoElement != null) {
- Iterator iter = DOM.getChildElements(appinfoElement, JAXB_SCHEMA_URI,
"schemaBindings");
- if (iter.hasNext()) {
- Element schemaBindingsElement = (Element) iter.next();
- DOMSerializer serializer = new DOMSerializer();
- Configurator configurator = new Configurator();
- configurator.setNamespace(JAXB_SCHEMA_URI);
- SchemaBindingsFactory factory = new
SchemaBindingsFactory(pSchema.getGlobalBindings());
- configurator.setBeanFactory(factory);
- serializer.serialize(schemaBindingsElement, configurator);
- pSchema.setSchemaBindings((SchemaBindings) configurator.getResult());
-
- if (iter.hasNext()) {
- logError(pSchema, (Element) iter.next(), mName,
- "Multiple schemaBindings elements are not supported, ignoring all
but the first.");
- }
- }
+ try {
+ schemaBindingsHandler.eventSchemaBindings(pSchema, pDocumentElement,
+ DOM.getAppinfo(pDocumentElement));
+ } catch (Exception e) {
+ logError(pSchema, DOM.getAppinfo(pDocumentElement), mName, e.getMessage());
}
for (Node node = pDocumentElement.getFirstChild(); node != null;
@@ -1564,9 +1631,14 @@
if ("element".equals(name)) {
parseElement(pSchema, pDocumentElement, (Element) node, true);
} else if ("complexType".equals(name)) {
- parseComplexType(pSchema, pDocumentElement, (Element) node, true);
+ SchemaTypeInContext stic =
+ (SchemaTypeInContext) parseComplexType(pSchema, pDocumentElement,
(Element) node, pSchema);
+ if (stic != null) {
+ typeHandler.eventType(pSchema, pDocumentElement, (Element) node,
+ stic);
+ }
} else if ("simpleType".equals(name)) {
- parseSimpleType(pSchema, pDocumentElement, (Element) node, true);
+ parseSimpleType(pSchema, pDocumentElement, (Element) node, pSchema);
} else if ("attribute".equals(name)) {
parseAttribute(pSchema, pDocumentElement, (Element) node, true);
} else if ("attributeGroup".equals(name)) {
@@ -1576,19 +1648,8 @@
}
}
- public static class GlobalBindingsFactory {
- private WeakReference namespaceResolver;
- private GlobalBindingsFactory(NamespaceResolver pResolver) {
- namespaceResolver = new WeakReference(pResolver);
- }
- public NamespaceResolver getNamespaceResolver() {
- return (NamespaceResolver) namespaceResolver.get();
- }
- public Object createGlobalBindings() {
- GlobalBindingsImpl result = new GlobalBindingsImpl();
- result.setNamespaceResolver(getNamespaceResolver());
- return result;
- }
+ protected String[] getSupportedNamespaces() {
+ return new String[]{JAXB_SCHEMA_URI};
}
/**
@@ -1601,64 +1662,14 @@
JAXBGlobalSchema result = new JAXBGlobalSchema();
result.setNodeMap(map);
- Element appinfoElement = DOM.getAppinfo(doc.getDocumentElement());
- if (appinfoElement != null) {
- Iterator iter = DOM.getChildElements(appinfoElement, JAXB_SCHEMA_URI,
"globalBindings");
- if (iter.hasNext()) {
- Element globalBindingsElement = (Element) iter.next();
- DOMSerializer serializer = new DOMSerializer();
- Configurator configurator = new Configurator();
- configurator.setNamespace(JAXB_SCHEMA_URI);
- GlobalBindingsFactory factory = new GlobalBindingsFactory(configurator);
- configurator.setBeanFactory(factory);
- serializer.serialize(globalBindingsElement, configurator);
- result.setGlobalBindings((GlobalBindings) configurator.getResult());
-
- if (iter.hasNext()) {
- logError(result, (Element) iter.next(), mName,
- "Multiple globalBindings elements are not supported, ignoring all
but the first.");
- }
- }
+ Element docElement = doc.getDocumentElement();
+ Element appInfoElement = DOM.getAppinfo(docElement);
+ try {
+ schemaBindingsHandler.eventGlobalBindings(result, docElement, appInfoElement);
+ } catch (Exception e) {
+ logError(result, appInfoElement, mName, e.getMessage());
}
-
parse(result, pSource.getSystemId(), doc.getDocumentElement());
return result;
- }
-
- public static void showContent(Schema pSchema) {
- final String mName = "showContent";
- log.debug(mName + ": Objects = ");
- SchemaElement[] elements = pSchema.getSchemaElements();
- for (int i = 0; i < elements.length; i++) {
- SchemaElement o = elements[i];
- log.debug(mName + ": " + i + " = " + o +
- ", " + o.getQName() + ", " + o.getSchemaType());
- if (o.isComplex()) {
- SchemaComplexElement sce = (SchemaComplexElement) o;
- SchemaComplexType sct = sce.getSchemaComplexType();
- SchemaAttribute[] attributes = sct.getAttributes();
- for (int j = 0; j < attributes.length; j++) {
- SchemaAttribute attr = attributes[j];
- log.debug(mName + ": Attribute = " + attr +
- ", " + attr.getQName() + ", " + attr.getSchemaType());
- }
- if (sct.hasSimpleContent()) {
- SimpleContentType sict = (SimpleContentType) sct;
- ComplexTypeContent cct = sict.getContentObject();
- if (cct != null) {
- log.debug(mName + ": Content = " + cct +
- ", " + cct.getQName() + ", " + cct.getSchemaType());
- }
- } else {
- ComplexContentType cct = (ComplexContentType) sct;
- SchemaElement[] childElements = cct.getChildElements();
- for (int j = 0; j < childElements.length; j++) {
- SchemaElement elem = childElements[j];
- log.debug(mName + ": Element = " + elem +
- ", " + elem.getQName() + ", " + elem.getSchemaType());
- }
- }
- }
- }
}
}
-------------------------------------------------------
This SF.net email is sponsored by:Crypto Challenge is now open!
Get cracking and register here for some mind boggling fun and
the chance of winning an Apple iPod:
http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0031en
_______________________________________________
Jaxme-jaxb-dev mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jaxme-jaxb-dev