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]