You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlbeans-cvs@xml.apache.org by er...@apache.org on 2004/03/19 00:28:00 UTC
cvs commit: xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans SchemaCodePrinter.java XmlOptions.java
ericvas 2004/03/18 15:28:00
Modified: v2/src/typeimpl/org/apache/xmlbeans/impl/schema
SchemaTypeCodePrinter.java
v2/src/xmlcomp/org/apache/xmlbeans/impl/tool
SchemaCodeGenerator.java SchemaCompiler.java
v2/src/xmlpublic/org/apache/xmlbeans XmlOptions.java
Added: v2/src/xmlpublic/org/apache/xmlbeans SchemaCodePrinter.java
Log:
Add plugability for code generation
Revision Changes Path
1.7 +46 -26 xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
Index: SchemaTypeCodePrinter.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SchemaTypeCodePrinter.java 12 Feb 2004 20:06:21 -0000 1.6
+++ SchemaTypeCodePrinter.java 18 Mar 2004 23:27:59 -0000 1.7
@@ -27,11 +27,13 @@
import org.apache.xmlbeans.SchemaProperty;
import org.apache.xmlbeans.SchemaStringEnumEntry;
import org.apache.xmlbeans.XmlObject;
+import org.apache.xmlbeans.XmlOptions;
+import org.apache.xmlbeans.SchemaCodePrinter;
/**
* Prints the java code for a single schema type
*/
-public final class SchemaTypeCodePrinter
+public final class SchemaTypeCodePrinter implements SchemaCodePrinter
{
Writer _writer;
int _indent;
@@ -46,9 +48,40 @@
public static final String INDEX_CLASSNAME = "TypeSystemHolder";
- public SchemaTypeCodePrinter ( Writer writer )
+ public static void printTypeImpl ( Writer writer, SchemaType sType,
+ XmlOptions opt )
+ throws IOException
+ {
+ getPrinter(opt).printTypeImpl( writer, sType );
+ }
+
+ public static void printType ( Writer writer, SchemaType sType,
+ XmlOptions opt )
+ throws IOException
+ {
+ getPrinter(opt).printType( writer, sType );
+ }
+
+ public static void printLoader ( Writer writer, SchemaTypeSystem system,
+ XmlOptions opt )
+ throws IOException
+ {
+ getPrinter(opt).printLoader( writer, system );
+ }
+
+ private static SchemaCodePrinter getPrinter(XmlOptions opt)
+ {
+ Object printer = XmlOptions.safeGet
+ (opt, XmlOptions.SCHEMA_CODE_PRINTER);
+ if (printer == null || !(printer instanceof SchemaCodePrinter))
+ {
+ printer = new SchemaTypeCodePrinter();
+ }
+ return (SchemaCodePrinter) printer;
+ }
+
+ public SchemaTypeCodePrinter ()
{
- _writer = writer;
_indent = 0;
}
@@ -124,38 +157,23 @@
// System.out.println(s);
}
- public static void printTypeImpl ( Writer writer, SchemaType sType )
- throws IOException
- {
- new SchemaTypeCodePrinter( writer ).printTypeImpl( sType, sType.getTypeSystem() );
- }
-
- public static void printType ( Writer writer, SchemaType sType )
- throws IOException
- {
- new SchemaTypeCodePrinter( writer ). printType( sType, sType.getTypeSystem() );
- }
-
- public static void printLoader ( Writer writer, SchemaTypeSystem system )
- throws IOException
- {
- new SchemaTypeCodePrinter( writer ).printIndexType( system );
- }
-
- void printType(SchemaType sType, SchemaTypeSystem system) throws IOException
+ public void printType(Writer writer, SchemaType sType) throws IOException
{
+ _writer = writer;
printTopComment(sType);
printPackage(sType, true);
emit("");
- printInnerType(sType, system);
+ printInnerType(sType, sType.getTypeSystem());
_writer.flush();
}
- void printTypeImpl(SchemaType sType, SchemaTypeSystem system) throws IOException
+ public void printTypeImpl(Writer writer, SchemaType sType)
+ throws IOException
{
+ _writer = writer;
printTopComment(sType);
printPackage(sType, false);
- printInnerTypeImpl(sType, system, false);
+ printInnerTypeImpl(sType, sType.getTypeSystem(), false);
}
/**
@@ -241,8 +259,10 @@
((SchemaTypeSystemImpl)system).handleForType(sType) + "\");");
}
- void printIndexType(SchemaTypeSystem system) throws IOException
+ public void printLoader(Writer writer, SchemaTypeSystem system)
+ throws IOException
{
+ _writer = writer;
String shortName = shortIndexClassForSystem(system);
emit("package " + system.getName() + ";");
emit("");
1.6 +16 -6 xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java
Index: SchemaCodeGenerator.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SchemaCodeGenerator.java 3 Mar 2004 22:56:39 -0000 1.5
+++ SchemaCodeGenerator.java 18 Mar 2004 23:28:00 -0000 1.6
@@ -19,6 +19,8 @@
import org.apache.xmlbeans.SchemaTypeSystem;
import org.apache.xmlbeans.impl.common.XmlErrorWatcher;
import org.apache.xmlbeans.impl.schema.SchemaTypeCodePrinter;
+import org.apache.xmlbeans.SchemaCodePrinter;
+import org.apache.xmlbeans.XmlOptions;
import repackage.Repackager;
import java.io.File;
@@ -40,7 +42,7 @@
// todo: output jar
public static boolean compileTypeSystem(SchemaTypeSystem saver, File sourcedir, File[] javasrc,
Map sourcesToCopyMap, File[] classpath, File classesdir, File outputJar, boolean nojavac,
- XmlErrorWatcher errors, String repackage, boolean verbose, List sourcefiles,
+ XmlErrorWatcher errors, String repackage, SchemaCodePrinter codePrinter, boolean verbose, List sourcefiles,
File schemasDir)
{
@@ -87,6 +89,14 @@
Repackager repackager = repackage == null ? null : new Repackager( repackage );
+ // Create XmlOptions - currently just for SchemaCodePrinter,
+ // but could be used more in future
+ XmlOptions opts = new XmlOptions();
+ if (codePrinter != null)
+ {
+ opts.setSchemaCodePrinter(codePrinter);
+ }
+
try
{
String filename = SchemaTypeCodePrinter.indexClassForSystem(saver).replace('.', File.separatorChar) + ".java";
@@ -98,7 +108,7 @@
? (Writer) new FileWriter( sourcefile )
: (Writer) new RepackagingWriter( sourcefile, repackager );
- SchemaTypeCodePrinter.printLoader(writer, saver);
+ SchemaTypeCodePrinter.printLoader(writer, saver, opts);
writer.close();
@@ -110,7 +120,7 @@
failure = true;
}
- failure &= genTypes(saver, sourcefiles, sourcedir, repackager, verbose);
+ failure &= genTypes(saver, sourcefiles, sourcedir, repackager, verbose, opts);
if (failure)
return false;
@@ -118,7 +128,7 @@
return true;
}
- private static boolean genTypes(SchemaTypeSystem saver, List sourcefiles, File sourcedir, Repackager repackager, boolean verbose)
+ private static boolean genTypes(SchemaTypeSystem saver, List sourcefiles, File sourcedir, Repackager repackager, boolean verbose, XmlOptions opts)
{
boolean failure = false;
@@ -162,7 +172,7 @@
: (Writer) new RepackagingWriter( sourcefile, repackager );
- SchemaTypeCodePrinter.printType(writer, type);
+ SchemaTypeCodePrinter.printType(writer, type, opts);
writer.close();
@@ -192,7 +202,7 @@
? (Writer) new FileWriter( implFile )
: (Writer) new RepackagingWriter( implFile, repackager );
- SchemaTypeCodePrinter.printTypeImpl(writer, type);
+ SchemaTypeCodePrinter.printTypeImpl(writer, type, opts);
writer.close();
1.8 +33 -1 xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java
Index: SchemaCompiler.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SchemaCompiler.java 6 Mar 2004 00:23:53 -0000 1.7
+++ SchemaCompiler.java 18 Mar 2004 23:28:00 -0000 1.8
@@ -28,6 +28,7 @@
import org.apache.xmlbeans.impl.values.XmlListImpl;
import org.apache.xmlbeans.SchemaTypeSystem;
import org.apache.xmlbeans.SchemaTypeLoader;
+import org.apache.xmlbeans.SchemaCodePrinter;
import org.apache.xmlbeans.XmlBeans;
import org.apache.xmlbeans.XmlOptions;
import org.apache.xmlbeans.XmlObject;
@@ -74,6 +75,7 @@
System.out.println(" -repackage - repackage specification");
System.out.println(" -extension - registers a schema compiler extension");
System.out.println(" -extensionParms - specify parameters for the compiler extension");
+ System.out.println(" -schemaCodePrinter - specify SchemaCodePrinter class");
*/
System.out.println();
System.out.println("If you require a different java compiler, use the XMLBean Ant task instead.");
@@ -92,6 +94,7 @@
opts.add("ms");
opts.add("mx");
opts.add("repackage");
+ opts.add("schemaCodePrinter");
opts.add("extension");
opts.add("extensionParms");
opts.add("allowmdef");
@@ -115,6 +118,23 @@
String repackage = cl.getOpt("repackage");
+ String codePrinterClass = cl.getOpt("schemaCodePrinter");
+ SchemaCodePrinter codePrinter = null;
+ if (codePrinterClass != null)
+ {
+ try
+ {
+ codePrinter = (SchemaCodePrinter)
+ Class.forName(codePrinterClass).newInstance();
+ }
+ catch (Exception e)
+ {
+ System.err.println
+ ("Failed to load SchemaCodePrinter class " +
+ codePrinterClass + "; proceeding with default printer");
+ }
+ }
+
String name = cl.getOpt("name");
boolean download = (cl.getOpt("dl") != null);
@@ -269,6 +289,7 @@
params.setExtensions(extensions);
params.setMdefNamespaces(mdefNamespaces);
params.setCatalogFile(catString);
+ params.setSchemaCodePrinter(codePrinter);
boolean result = compile(params);
@@ -310,6 +331,7 @@
private List extensions = Collections.EMPTY_LIST;
private Set mdefNamespaces = Collections.EMPTY_SET;
private String catalogFile;
+ private SchemaCodePrinter schemaCodePrinter;
public File getBaseDir()
{
@@ -579,6 +601,15 @@
this.catalogFile = catalogPropFile;
}
+ public SchemaCodePrinter getSchemaCodePrinter()
+ {
+ return schemaCodePrinter;
+ }
+
+ public void setSchemaCodePrinter(SchemaCodePrinter schemaCodePrinter)
+ {
+ this.schemaCodePrinter = schemaCodePrinter;
+ }
}
private static SchemaTypeSystem loadTypeSystem(
@@ -783,6 +814,7 @@
boolean noAnn = params.isNoAnn();
Collection outerErrorListener = params.getErrorListener();
String repackage = params.getRepackage();
+ SchemaCodePrinter codePrinter = params.getSchemaCodePrinter();
List extensions = params.getExtensions();
Set mdefNamespaces = params.getMdefNamespaces();
@@ -827,7 +859,7 @@
// generate source and .xsb
List sourcefiles = new ArrayList();
result &= SchemaCodeGenerator.compileTypeSystem(system, srcDir, javaFiles, sourcesToCopyMap,
- classpath, classesDir, outputJar, nojavac, errorListener, repackage, verbose,
+ classpath, classesDir, outputJar, nojavac, errorListener, repackage, codePrinter, verbose,
sourcefiles, schemasDir);
result &= !errorListener.hasError();
1.5 +13 -2 xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java
Index: XmlOptions.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XmlOptions.java 16 Mar 2004 00:55:01 -0000 1.4
+++ XmlOptions.java 18 Mar 2004 23:28:00 -0000 1.5
@@ -557,7 +557,17 @@
public XmlOptions setEntityResolver(EntityResolver resolver) {
return set( ENTITY_RESOLVER, resolver );
}
-
+
+ /**
+ * If this option is set when compiling a schema, then the given
+ * SchemaTypeCodePrinter.Printer will be used to generate the
+ * Java code.
+ *
+ * @see XmlBeans#compileXsd
+ */
+ public XmlOptions setSchemaCodePrinter(SchemaCodePrinter printer) {
+ return set( SCHEMA_CODE_PRINTER, printer );
+ }
//
// Complete set of XmlOption's
@@ -643,7 +653,8 @@
public static final String VALIDATE_ON_SET = "VALIDATE_ON_SET";
/** @exclude */
public static final String ENTITY_RESOLVER = "ENTITY_RESOLVER";
-
+ /** @exclude */
+ public static final String SCHEMA_CODE_PRINTER = "SCHEMA_CODE_PRINTER";
private static final XmlOptions EMPTY_OPTIONS;
static {
1.1 xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/SchemaCodePrinter.java
Index: SchemaCodePrinter.java
===================================================================
/* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.xmlbeans;
import java.io.Writer;
import java.io.IOException;
/**
* This class is used to provide alternate implementations of the
* schema Java code generation.
*/
public interface SchemaCodePrinter
{
public void printTypeImpl(Writer writer, SchemaType sType)
throws IOException;
public void printType(Writer writer, SchemaType sType)
throws IOException;
public void printLoader(Writer writer, SchemaTypeSystem system)
throws IOException;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xmlbeans-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xmlbeans-cvs-help@xml.apache.org