Author: jochen
Date: Wed Aug 17 14:18:04 2005
New Revision: 233262

URL: http://svn.apache.org/viewcvs?rev=233262&view=rev
Log:
The config file generation is now implemented by a SchemaVisitor.

Modified:
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SchemaSG.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSchemaSG.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JaxMeSchemaReader.java
    
webservices/jaxme/trunk/src/pm/org/apache/ws/jaxme/pm/generator/jdbc/JdbcSchemaSG.java

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SchemaSG.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SchemaSG.java?rev=233262&r1=233261&r2=233262&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SchemaSG.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SchemaSG.java
 Wed Aug 17 14:18:04 2005
@@ -16,7 +16,7 @@
  */
 package org.apache.ws.jaxme.generator.sg;
 
-import java.util.List;
+import java.util.Map;
 
 import org.apache.ws.jaxme.js.JavaSourceFactory;
 import org.apache.ws.jaxme.xs.jaxb.JAXBJavaType;
@@ -26,6 +26,7 @@
 import org.apache.ws.jaxme.generator.sg.SGItem;
 import org.apache.ws.jaxme.generator.sg.TypeSG;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
 
@@ -129,14 +130,32 @@
    */
   public XsQName[] getTypesafeEnumBase();
 
-  /** <p>Generates the "Configuration.xml" file as a DOM node. Event
-   * handlers may modify the DOM node.</p>
-   * @param pPackageName The package, for which a configuration is being 
generated.
-   * @param pContextList A list of objects generated in the package.
-   */
-  public Document getConfigFile(String pPackageName, List pContextList) throws 
SAXException;
-
-  /** <p>Creates the "jaxb.properties" file.</p>
-   */
-  public void generateJaxbProperties() throws SAXException;
+    /** <p>Creates the "jaxb.properties" file.</p>
+     */
+       public void generateJaxbProperties() throws SAXException;
+
+    /** Generates the "Configuration.xml" files.
+     */
+    public void generateConfigFiles() throws SAXException;
+    /** Called by [EMAIL PROTECTED] #generateConfigFiles()} to generate the
+     * config files.
+     * @return A map of config files. The map keys are the package
+     * names. The map values are instances of [EMAIL PROTECTED] 
org.w3c.dom.Document}
+     * with the config file contents.
+     */
+    public Map getConfigFiles() throws SAXException;
+    /** Called by [EMAIL PROTECTED] #generateConfigFiles()} for actually
+     * creating the config files.
+     * @param pPackageName A package name, which has been returned
+     * by [EMAIL PROTECTED] #getConfigFiles()} as a map key.
+     * @param pDoc A document, which has been returned by
+     * [EMAIL PROTECTED] #getConfigFiles()} as the package names value.
+     */
+    public void generateConfigFile(String pPackageName, Document pDoc) throws 
SAXException;
+    /** Called for customizing an elements manager.
+     */
+    public void createConfigFile(ObjectSG pElement, Element pManager);
+    /** Called for customizing a types manager.
+     */
+       public void createConfigFile(TypeSG pType, Element pManager);
 }

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSchemaSG.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSchemaSG.java?rev=233262&r1=233261&r2=233262&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSchemaSG.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSchemaSG.java
 Wed Aug 17 14:18:04 2005
@@ -28,7 +28,6 @@
 import javax.xml.XMLConstants;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
-import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
@@ -233,6 +232,7 @@
       objects[i].generate();
     }
 
+    pController.generateConfigFiles();
     pController.generateJaxbProperties();
   }
 
@@ -422,82 +422,6 @@
          }
   }
 
-  public Document getConfigFile(SchemaSG pController, String pPackageName, 
List pContextList)
-      throws SAXException {
-    final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-    dbf.setNamespaceAware(true);
-    dbf.setValidating(false);
-    final DocumentBuilder db;
-    try {
-      db = dbf.newDocumentBuilder();
-    } catch (ParserConfigurationException e) {
-      throw new SAXException("Failed to create a DocumentBuilder: " + 
e.getMessage(), e);
-    }
-    final Document doc = db.newDocument();
-    final String uri = JAXBContextImpl.CONFIGURATION_URI;
-    final Element root = doc.createElementNS(uri, "Configuration");
-    root.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns", uri);
-    doc.appendChild(root);
-
-    AttributeIdGenerator attrIdGen = new 
AttributeIdGenerator(pController.getJavaSourceFactory());
-    new SchemaWalker(attrIdGen).walk(pController);
-
-    for (Iterator iter = pContextList.iterator();  iter.hasNext();  ) {
-      Object o = iter.next();
-      Context ctx, typeCtx;
-      if (o instanceof ObjectSG) {
-                 ObjectSG oSG = (ObjectSG) o;
-                 ctx = oSG.getClassContext();
-                 typeCtx = 
oSG.getTypeSG().getComplexTypeSG().getClassContext();
-      } else {
-                 TypeSG tSG = (TypeSG) o;
-                 ctx = typeCtx = tSG.getComplexTypeSG().getClassContext();
-      }
-
-      String packageName = ctx.getXMLInterfaceName().getPackageName();
-      if (packageName == null) {
-        packageName = "";
-      }
-      if (!packageName.equals(pPackageName)) {
-        continue;
-      }
-
-      JavaQName implQName = ctx.getXMLImplementationName();
-      JavaQName jmSaxDriverControllerClass = 
attrIdGen.getJMSAXDriverControllerClass(implQName.getPackageName());
-
-      Element manager = doc.createElementNS(uri, "Manager");
-      root.appendChild(manager);
-      manager.setAttributeNS(null, "elementInterface", 
ctx.getXMLInterfaceName().toString());
-      manager.setAttributeNS(null, "elementClass", implQName.toString());
-      manager.setAttributeNS(null, "handlerClass", 
typeCtx.getXMLHandlerName().toString());
-      manager.setAttributeNS(null, "driverClass", 
typeCtx.getXMLSerializerName().toString());
-      manager.setAttributeNS(null, "driverControllerClass", 
jmSaxDriverControllerClass.toString());
-      manager.setAttributeNS(null, "validatorClass", 
ctx.getXMLValidatorName().toString());
-      if (o instanceof ObjectSG) {
-                 XsQName name = ((ObjectSG) o).getName();
-                 manager.setAttributeNS(null, "qName", name.toString());
-                 if (name.getPrefix() != null) {
-                         manager.setAttributeNS(null, "prefix", 
name.getPrefix());
-                 }
-      }
-    }
-    return doc;
-  }
-
-  protected String generateConfigFile(SchemaSG pController, String 
pPackageName, List pContextList) throws SAXException {
-    Document doc = pController.getConfigFile(pPackageName, pContextList);
-    StringWriter sw = new StringWriter();
-    XMLWriter xw = new XMLWriterImpl();
-    try {
-      xw.setWriter(sw);
-    } catch (JAXBException e) {
-      throw new SAXException(e);
-    }
-    DOMSerializer ds = new DOMSerializer();
-    ds.serialize(doc, xw);
-    return sw.toString();
-  }
-
   public void generateJaxbProperties(SchemaSG pController) throws SAXException 
{
     List contextList = new ArrayList();
     ObjectSG[] elements = pController.getElements();
@@ -532,10 +456,6 @@
       textFile.addLine(JAXBContext.JAXB_CONTEXT_FACTORY + "=" + 
JAXBContextImpl.class.getName());
       packages.add(packageName);
 
-      String configFile = generateConfigFile(pController, packageName, 
contextList);
-      TextFile confFile = 
pController.getJavaSourceFactory().newTextFile(packageName, 
"Configuration.xml");
-      confFile.setContents(configFile);
-
       getObjectFactory(pController, packageName, contextList);
     }
   }
@@ -685,5 +605,115 @@
                createMethod.addLine("return (", resultName, ") newInstance(", 
resultName, ".class);");
        }
        return result;
+  }
+
+  private class ConfigFileGenerator extends SchemaVisitorImpl {
+       private final AttributeIdGenerator attrIdGen;
+       private final Map packages = new HashMap();
+       private final SchemaSG controller;
+       ConfigFileGenerator(SchemaSG pController) throws SAXException {
+               attrIdGen = new 
AttributeIdGenerator(pController.getJavaSourceFactory());
+               new SchemaWalker(attrIdGen).walk(pController);
+               controller = pController;
+       }
+       public void visit(ObjectSG pElement) throws SAXException {
+               if (pElement.isGlobal()  &&  pElement.getTypeSG().isComplex()) {
+                       Context ctx = pElement.getClassContext();
+                       Document doc = getDocument(ctx);
+                       Context typeCtx = 
pElement.getTypeSG().getComplexTypeSG().getClassContext();
+                       Element manager = generate(doc, ctx, typeCtx);
+                       XsQName name = pElement.getName();
+                       manager.setAttributeNS(null, "qName", name.toString());
+                       if (name.getPrefix() != null) {
+                               manager.setAttributeNS(null, "prefix", 
name.getPrefix());
+                       }
+                       controller.createConfigFile(pElement, manager);
+               }
+       }
+
+       public void visit(TypeSG pType) throws SAXException {
+               if (pType.isGlobalType()  &&  pType.isComplex()) {
+                       Context ctx = 
pType.getComplexTypeSG().getClassContext();
+                       Document doc = getDocument(ctx);
+                       Element manager = generate(doc, ctx, ctx);
+                       controller.createConfigFile(pType, manager);
+               }
+       }
+
+       private Element generate(Document pDoc, Context pContext, Context 
pTypeContext) throws SAXException {
+               JavaQName implQName = pContext.getXMLImplementationName();
+               JavaQName jmSaxDriverControllerClass = 
attrIdGen.getJMSAXDriverControllerClass(implQName.getPackageName());
+               Element manager = 
pDoc.createElementNS(JAXBContextImpl.CONFIGURATION_URI, "Manager");
+               pDoc.getDocumentElement().appendChild(manager);
+               manager.setAttributeNS(null, "elementInterface", 
pContext.getXMLInterfaceName().toString());
+               manager.setAttributeNS(null, "elementClass", 
implQName.toString());
+               manager.setAttributeNS(null, "handlerClass", 
pTypeContext.getXMLHandlerName().toString());
+               manager.setAttributeNS(null, "driverClass", 
pTypeContext.getXMLSerializerName().toString());
+               manager.setAttributeNS(null, "driverControllerClass", 
jmSaxDriverControllerClass.toString());
+               manager.setAttributeNS(null, "validatorClass", 
pContext.getXMLValidatorName().toString());
+               return manager;
+       }
+
+       private Document getDocument(Context ctx) throws SAXException {
+               String packageName = ctx.getXMLInterfaceName().getPackageName();
+               if (packageName == null) {
+                       packageName = "";
+               }
+               Document doc = (Document) packages.get(packageName);
+               if (doc == null) {
+                       try {
+                               DocumentBuilderFactory dbf = 
DocumentBuilderFactory.newInstance();
+                               dbf.setNamespaceAware(true);
+                               dbf.setValidating(false);
+                               doc = dbf.newDocumentBuilder().newDocument();
+                       } catch (ParserConfigurationException e) {
+                               throw new SAXException(e);
+                       }
+                       packages.put(packageName, doc);
+                   final Element root = 
doc.createElementNS(JAXBContextImpl.CONFIGURATION_URI, "Configuration");
+                   root.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, 
"xmlns", JAXBContextImpl.CONFIGURATION_URI);
+                   doc.appendChild(root);
+               }
+               return doc;
+       }
+       Map getPackages() { return packages; }
+  }
+
+  public void generateConfigFiles(SchemaSG pController) throws SAXException {
+         Map map = pController.getConfigFiles();
+         for (Iterator iter = map.entrySet().iterator();  iter.hasNext();  ) {
+                 Map.Entry entry = (Map.Entry) iter.next();
+                 String packageName = (String) entry.getKey();
+                 Document doc = (Document) entry.getValue();
+                 pController.generateConfigFile(packageName, doc);
+         }
+  }
+  
+  public Map getConfigFiles(SchemaSG pController) throws SAXException {
+         ConfigFileGenerator gen = new ConfigFileGenerator(pController);
+         new SchemaWalker(gen).walk(pController);
+         return gen.getPackages();
+  }
+  
+  public void generateConfigFile(SchemaSG pController, String pPackageName, 
Document pDoc) throws SAXException {
+         StringWriter sw = new StringWriter();
+         XMLWriter xw = new XMLWriterImpl();
+         try {
+             xw.setWriter(sw);
+         } catch (JAXBException e) {
+                 throw new SAXException(e);
+         }
+         DOMSerializer ds = new DOMSerializer();
+         ds.serialize(pDoc, xw);
+      TextFile confFile = 
pController.getJavaSourceFactory().newTextFile(pPackageName, 
"Configuration.xml");
+      confFile.setContents(sw.toString());
+  }
+
+  public void createConfigFile(SchemaSG pController, ObjectSG pElement, 
Element pManager) {
+       // Does nothing, for overwriting by subclasses only
+  }
+
+  public void createConfigFile(SchemaSG pController, TypeSG pType, Element 
pManager) {
+       // Does nothing, for overwriting by subclasses only
   }
 }

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JaxMeSchemaReader.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JaxMeSchemaReader.java?rev=233262&r1=233261&r2=233262&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JaxMeSchemaReader.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JaxMeSchemaReader.java
 Wed Aug 17 14:18:04 2005
@@ -41,11 +41,17 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
  */
 public class JaxMeSchemaReader extends JAXBSchemaReader {
-    public static final String JAXME_SCHEMA_URI = 
"http://ws.apache.org/jaxme/namespaces/jaxme2";;
+       /** The namespace URI of JaxMe vendor extensions for JAXB.
+        */
+       public static final String JAXME_SCHEMA_URI = 
"http://ws.apache.org/jaxme/namespaces/jaxme2";;
+       /** The namespace URI of the JAXB RI's vendor extensions for JAXB.
+        */
     public static final String XJC_SCHEMA_URI = 
"http://java.sun.com/xml/ns/jaxb/xjc";;
     private XjcSerializable xjcSerializable;
     private List xsObjectCreators = new ArrayList();
 
+    /** Creates a new instance.
+     */
     public JaxMeSchemaReader() {
         setSupportingExtensions(true);
     }
@@ -69,6 +75,9 @@
         return (XsObjectCreator[]) myXsObjectCreators.toArray(new 
XsObjectCreator[myXsObjectCreators.size()]);
     }
 
+    /** An extension of JAXBAppInfoImpl with support for
+     * <code>xjc:serializable</code>.
+     */
     public class JaxMeAppinfoImpl extends JAXBAppinfoImpl {
         JaxMeAppinfoImpl(XsObject pParent) {
             super(pParent);
@@ -79,6 +88,10 @@
         }
     }
 
+    /** An extension of
+     * [EMAIL PROTECTED] 
org.apache.ws.jaxme.xs.jaxb.impl.JAXBGlobalBindingsImpl}
+     * with support for <code>xjc:serializable</code>.
+     */
     public class JaxMeGlobalBindingsImpl extends JAXBGlobalBindingsImpl {
         protected JaxMeGlobalBindingsImpl(XsObject pParent) {
             super(pParent);
@@ -88,7 +101,6 @@
             return append(super.getXsObjectCreators());
         }
 
-
         protected XsObject getBeanByParent(XsObject pParent, Locator pLocator, 
XsQName pQName)
                        throws SAXException {
             if (XJC_SCHEMA_URI.equals(pQName.getNamespaceURI())) {
@@ -105,6 +117,9 @@
         }
     }
 
+    /** An extension of [EMAIL PROTECTED] JAXBXsObjectFactoryImpl} with support
+     * for [EMAIL PROTECTED] JaxMeGlobalBindingsImpl} and [EMAIL PROTECTED] 
JaxMeAppinfoImpl}.
+     */
     public class JaxMeXsObjectFactory extends JAXBXsObjectFactoryImpl {
         public XsEAppinfo newXsEAppinfo(XsObject pParent) {
             return new JaxMeAppinfoImpl(pParent);

Modified: 
webservices/jaxme/trunk/src/pm/org/apache/ws/jaxme/pm/generator/jdbc/JdbcSchemaSG.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/pm/org/apache/ws/jaxme/pm/generator/jdbc/JdbcSchemaSG.java?rev=233262&r1=233261&r2=233262&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/pm/org/apache/ws/jaxme/pm/generator/jdbc/JdbcSchemaSG.java
 (original)
+++ 
webservices/jaxme/trunk/src/pm/org/apache/ws/jaxme/pm/generator/jdbc/JdbcSchemaSG.java
 Wed Aug 17 14:18:04 2005
@@ -16,9 +16,6 @@
  
 package org.apache.ws.jaxme.pm.generator.jdbc;
 
-import java.util.Iterator;
-import java.util.List;
-
 import org.apache.ws.jaxme.generator.sg.Context;
 import org.apache.ws.jaxme.generator.sg.ObjectSG;
 import org.apache.ws.jaxme.generator.sg.SchemaSG;
@@ -26,10 +23,7 @@
 import org.apache.ws.jaxme.generator.sg.TypeSG;
 import org.apache.ws.jaxme.generator.sg.impl.SchemaSGChainImpl;
 import org.apache.ws.jaxme.impl.JAXBContextImpl;
-import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
 
 /**
  * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
@@ -52,49 +46,32 @@
     return element;
   }
 
-  public Document getConfigFile(SchemaSG pController, String pPackageName, 
List pContextList)
-      throws SAXException {
-    final String uri = JAXBContextImpl.CONFIGURATION_URI;
-    final Document doc = super.getConfigFile(pController, pPackageName, 
pContextList);
-    final Element root = doc.getDocumentElement();
-    final Iterator iter = pContextList.iterator();
-    for (Node node = root.getFirstChild();  node != null;  node = 
node.getNextSibling()) {
-      if (node.getNodeType() == Node.ELEMENT_NODE
-          &&  JAXBContextImpl.CONFIGURATION_URI.equals(node.getNamespaceURI())
-          &&  "Manager".equals(node.getLocalName())) {
-        final ObjectSG objectSG = (ObjectSG) iter.next();
-        final TypeSG typeSG = objectSG.getTypeSG();
-        if (typeSG.isComplex()) {
-          final CustomTableData customTableData = (CustomTableData) 
typeSG.getProperty(jdbcSG.getKey());
-          if (customTableData != null) {
-            Element manager = (Element) node;
-            final Context ctx = typeSG.getComplexTypeSG().getClassContext();
-            manager.setAttributeNS(uri, "pmClass", ctx.getPMName().toString());
-
-            final TableDetails tableDetails = 
customTableData.getTableDetails();
-            final String driver = tableDetails.getDriver();
-            if (driver != null) {
-              createProperty(manager, "jdbc.driver", driver);
-            }
-            final String url = tableDetails.getUrl();
-            if (url != null) {
-              createProperty(manager, "jdbc.url", url);
-            }
-            final String user = tableDetails.getUser();
-            if (user != null) {
-              createProperty(manager, "jdbc.user", user);
-            }
-            final String password = tableDetails.getPassword();
-            if (password != null) {
-              createProperty(manager, "jdbc.password", password);
-            }
+  public void createConfigFile(SchemaSG pController, ObjectSG pElement, 
Element pManager) {
+      final TypeSG typeSG = pElement.getTypeSG();
+      if (typeSG.isComplex()) {
+        final CustomTableData customTableData = (CustomTableData) 
typeSG.getProperty(jdbcSG.getKey());
+        if (customTableData != null) {
+          final Context ctx = typeSG.getComplexTypeSG().getClassContext();
+          pManager.setAttributeNS(JAXBContextImpl.CONFIGURATION_URI, 
"pmClass", ctx.getPMName().toString());
+
+          final TableDetails tableDetails = customTableData.getTableDetails();
+          final String driver = tableDetails.getDriver();
+          if (driver != null) {
+            createProperty(pManager, "jdbc.driver", driver);
+          }
+          final String url = tableDetails.getUrl();
+          if (url != null) {
+            createProperty(pManager, "jdbc.url", url);
+          }
+          final String user = tableDetails.getUser();
+          if (user != null) {
+            createProperty(pManager, "jdbc.user", user);
+          }
+          final String password = tableDetails.getPassword();
+          if (password != null) {
+            createProperty(pManager, "jdbc.password", password);
           }
         }
       }
-    }
-    if (iter.hasNext()) {
-      throw new IllegalStateException("More managers expected than found");
-    }
-    return doc;
   }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to