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

Reply via email to