Index: C:/Java/castor-5/anttask/src/main/java/org/castor/anttask/CastorDDLGenTask.java =================================================================== --- C:/Java/castor-5/anttask/src/main/java/org/castor/anttask/CastorDDLGenTask.java (revision 7007) +++ C:/Java/castor-5/anttask/src/main/java/org/castor/anttask/CastorDDLGenTask.java (working copy) @@ -18,7 +18,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.io.PrintStream; +import java.io.OutputStream; import java.util.Vector; import org.apache.tools.ant.BuildException; @@ -73,7 +73,7 @@ private String _databaseEngineProperties; /** OutputStream used for writing the generated DDL statements. */ - private PrintStream _outputStream; + private OutputStream _outputStream; //-------------------------------------------------------------------------- @@ -151,7 +151,7 @@ } try { - _outputStream = new PrintStream(new FileOutputStream(_ddlFileName)); + _outputStream = new FileOutputStream(_ddlFileName); } catch (IOException e) { throw new BuildException("Problem finding the Castor JDO mapping file " + _mappingFile.getAbsolutePath(), e); @@ -175,8 +175,7 @@ new MappingUnmarshaller().loadMappingOnly(mapping); ddlgen.setMapping(mapping); - ddlgen.setPrinter(_outputStream); - ddlgen.generateDDL(); + ddlgen.generateDDL(_outputStream); } catch (IOException e) { throw new BuildException ("Problem finding the Castor JDO mapping file " + _mappingFile.getAbsolutePath(), e); @@ -203,39 +202,35 @@ throw new BuildException(NO_MAPPING_MSG); } - try { - config(); + config(); - // Run DDL generator on file - if (_mappingFile != null) { - processFile(_mappingFile.getAbsolutePath()); - } + // Run DDL generator on file + if (_mappingFile != null) { + processFile(_mappingFile.getAbsolutePath()); + } - // Run source generator on all files in directory - if (_mappingDir != null && _mappingDir.exists() && _mappingDir.isDirectory()) { - DirectoryScanner ds = this.getDirectoryScanner(_mappingDir); + // Run source generator on all files in directory + if (_mappingDir != null && _mappingDir.exists() && _mappingDir.isDirectory()) { + DirectoryScanner ds = this.getDirectoryScanner(_mappingDir); - String[] files = ds.getIncludedFiles(); - for (int i = 0; i < files.length; i++) { - String filePath = _mappingDir.getAbsolutePath() + File.separator + files[i]; - processFile(filePath); - } + String[] files = ds.getIncludedFiles(); + for (int i = 0; i < files.length; i++) { + String filePath = _mappingDir.getAbsolutePath() + File.separator + files[i]; + processFile(filePath); } + } - // Run source generator on all files in FileSet - for (int i = 0; i < _mappingFilesets.size(); i++) { - FileSet fs = (FileSet) _mappingFilesets.elementAt(i); - DirectoryScanner ds = fs.getDirectoryScanner(getProject()); - File subdir = fs.getDir(getProject()); + // Run source generator on all files in FileSet + for (int i = 0; i < _mappingFilesets.size(); i++) { + FileSet fs = (FileSet) _mappingFilesets.elementAt(i); + DirectoryScanner ds = fs.getDirectoryScanner(getProject()); + File subdir = fs.getDir(getProject()); - String[] files = ds.getIncludedFiles(); - for (int j = 0; j < files.length; j++) { - String filePath = subdir.getAbsolutePath() + File.separator + files[j]; - processFile(filePath); - } + String[] files = ds.getIncludedFiles(); + for (int j = 0; j < files.length; j++) { + String filePath = subdir.getAbsolutePath() + File.separator + files[j]; + processFile(filePath); } - } finally { - _outputStream.close(); } } } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/AbstractGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/AbstractGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/AbstractGenerator.java (working copy) @@ -15,7 +15,7 @@ */ package org.castor.ddlgen; -import java.io.PrintStream; +import java.io.OutputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; @@ -23,7 +23,6 @@ import org.castor.ddlgen.schemaobject.Field; import org.castor.ddlgen.schemaobject.ForeignKey; -import org.castor.ddlgen.schemaobject.Index; import org.castor.ddlgen.schemaobject.KeyGenerator; import org.castor.ddlgen.schemaobject.PrimaryKey; import org.castor.ddlgen.schemaobject.Schema; @@ -172,9 +171,6 @@ /** handle all resolving tables. */ private final Map _resolveTable = new HashMap(); - /** handle the writer for output. */ - private PrintStream _printer; - //-------------------------------------------------------------------------- /** @@ -290,24 +286,6 @@ return _schema; } - /** - * Set print stream. - * - * @param printer Print stream. - */ - public final void setPrinter(final PrintStream printer) { - _printer = printer; - } - - /** - * Get print stream. - * - * @return Print stream. - */ - public final PrintStream getPrinter() { - return _printer; - } - //-------------------------------------------------------------------------- /** @@ -313,7 +291,9 @@ /** * {@inheritDoc} */ - public final void generateDDL() throws GeneratorException { + public final void generateDDL(final OutputStream output) throws GeneratorException { + DDLWriter writer = new DDLWriter(output, _configuration); + // Create schema. createSchema(); @@ -322,12 +302,14 @@ DDLGenConfiguration.GROUP_DDL_KEY, DDLGenConfiguration.GROUP_DDL_BY_TABLE); if (DDLGenConfiguration.GROUP_DDL_BY_TABLE.equalsIgnoreCase(groupBy)) { - generateDDLGroupByTable(); + generateDDLGroupByTable(writer); } else if (DDLGenConfiguration.GROUP_DDL_BY_DDLTYPE.equalsIgnoreCase(groupBy)) { - generateDDLGroupByDDLType(); + generateDDLGroupByDDLType(writer); } else { throw new GeneratorException("group ddl by do not support: " + groupBy); } + + writer.close(); } /** @@ -334,9 +316,10 @@ * Generating ddl grouped by ddl type of DDL (e.g DROP, CREATE TABLE, create * Primary key, create foreign key). * + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - private void generateDDLGroupByDDLType() throws GeneratorException { + private void generateDDLGroupByDDLType(final DDLWriter writer) throws GeneratorException { boolean genSchema = _configuration.getBoolValue( DDLGenConfiguration.GENERATE_DDL_FOR_SCHEMA_KEY, true); boolean genDrop = _configuration.getBoolValue( @@ -352,27 +335,27 @@ boolean genKeyGen = _configuration.getBoolValue( DDLGenConfiguration.GENERATE_DDL_FOR_KEYGENERATOR_KEY, true); - write(generateHeader()); - + generateHeader(writer); + //generate ddl for schema - if (genSchema) { write(_schema.toCreateDDL()); } + if (genSchema) { _schema.toCreateDDL(writer); } //generate drop statemetn - if (genDrop) { write(generateDrop()); } + if (genDrop) { generateDrop(writer); } //generate create statement - if (genCreate) { write(generateCreate()); } + if (genCreate) { generateCreate(writer); } //generate primary key creation statement - if (genPrimaryKey) { write(generatePrimaryKey()); } + if (genPrimaryKey) { generatePrimaryKey(writer); } //generate foreign key creation statement - if (genForeignKey) { write(generateForeignKey()); } + if (genForeignKey) { generateForeignKey(writer); } //generate index creation statement - if (genIndex) { write(generateIndex()); } + if (genIndex) { generateIndex(writer); } - if (genKeyGen) { write(generateKeyGenerator()); } + if (genKeyGen) { generateKeyGenerator(writer); } } /** @@ -378,16 +361,13 @@ /** * Generate DDL for drop statement of table. * - * @return DDL to drop table. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - public final String generateDrop() throws GeneratorException { - StringBuffer buff = new StringBuffer(); + public final void generateDrop(final DDLWriter writer) throws GeneratorException { for (int i = 0; i < _schema.getTableCount(); i++) { - Table table = _schema.getTable(i); - buff.append(table.toDropDDL()); + _schema.getTable(i).toDropDDL(writer); } - return buff.toString(); } /** @@ -404,16 +384,13 @@ * ); * * - * @return DDL for create table. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - public final String generateCreate() throws GeneratorException { - StringBuffer buff = new StringBuffer(); + public final void generateCreate(final DDLWriter writer) throws GeneratorException { for (int i = 0; i < _schema.getTableCount(); i++) { - Table table = _schema.getTable(i); - buff.append(table.toCreateDDL()); + _schema.getTable(i).toCreateDDL(writer); } - return buff.toString(); } /** @@ -419,16 +396,13 @@ /** * Generate DDL for primany keys. * - * @return DDL for primary keys. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - public final String generatePrimaryKey() throws GeneratorException { - StringBuffer buff = new StringBuffer(); + public final void generatePrimaryKey(final DDLWriter writer) throws GeneratorException { for (int i = 0; i < _schema.getTableCount(); i++) { - Table table = _schema.getTable(i); - buff.append(table.getPrimaryKey().toCreateDDL()); + _schema.getTable(i).getPrimaryKey().toCreateDDL(writer); } - return buff.toString(); } /** @@ -441,16 +415,13 @@ * ON UPDATE CASCADE; * * - * @return DDL for foreign keys. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - public final String generateForeignKey() throws GeneratorException { - StringBuffer buff = new StringBuffer(); + public final void generateForeignKey(final DDLWriter writer) throws GeneratorException { for (int i = 0; i < _schema.getTableCount(); i++) { - Table table = _schema.getTable(i); - buff.append(createForeignKeyDDL(table)); + createForeignKeyDDL(_schema.getTable(i), writer); } - return buff.toString(); } /** @@ -456,16 +427,13 @@ /** * Generate DDL for indices. * - * @return DDL for indices. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - public final String generateIndex() throws GeneratorException { - StringBuffer buff = new StringBuffer(); + public final void generateIndex(final DDLWriter writer) throws GeneratorException { for (int i = 0; i < _schema.getTableCount(); i++) { - Table table = _schema.getTable(i); - buff.append(createIndex(table)); + createIndex(_schema.getTable(i), writer); } - return buff.toString(); } /** @@ -471,11 +439,10 @@ /** * Generate DDL for key generators (sequence/trigger). * - * @return DDL for key generators. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - public final String generateKeyGenerator() throws GeneratorException { - StringBuffer buff = new StringBuffer(); + public final void generateKeyGenerator(final DDLWriter writer) throws GeneratorException { for (int i = 0; i < _schema.getTableCount(); i++) { Table table = _schema.getTable(i); if (table.getKeyGenerator() != null) { @@ -480,10 +447,9 @@ Table table = _schema.getTable(i); if (table.getKeyGenerator() != null) { table.getKeyGenerator().setTable(table); - buff.append(table.getKeyGenerator().toCreateDDL()); + table.getKeyGenerator().toCreateDDL(writer); } } - return buff.toString(); } /** @@ -489,9 +455,10 @@ /** * Generating ddl group by table. * + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - private void generateDDLGroupByTable() throws GeneratorException { + private void generateDDLGroupByTable(final DDLWriter writer) throws GeneratorException { boolean genSchema = _configuration.getBoolValue( DDLGenConfiguration.GENERATE_DDL_FOR_SCHEMA_KEY, true); boolean genDrop = _configuration.getBoolValue( @@ -507,9 +474,9 @@ boolean genKeyGen = _configuration.getBoolValue( DDLGenConfiguration.GENERATE_DDL_FOR_KEYGENERATOR_KEY, true); - write(generateHeader()); + generateHeader(writer); - if (genSchema) { write(_schema.toCreateDDL()); } + if (genSchema) { _schema.toCreateDDL(writer); } for (int i = 0; i < _schema.getTableCount(); i++) { Table table = _schema.getTable(i); @@ -514,19 +481,15 @@ for (int i = 0; i < _schema.getTableCount(); i++) { Table table = _schema.getTable(i); - StringBuffer buff = new StringBuffer(); - - if (genDrop) { buff.append(table.toDropDDL()); } - if (genCreate) { buff.append(table.toCreateDDL()); } - if (genPrimaryKey) { buff.append(table.getPrimaryKey().toCreateDDL()); } - if (genForeignKey) { buff.append(createForeignKeyDDL(table)); } - if (genIndex) { buff.append(createIndex(table)); } + if (genDrop) { table.toDropDDL(writer); } + if (genCreate) { table.toCreateDDL(writer); } + if (genPrimaryKey) { table.getPrimaryKey().toCreateDDL(writer); } + if (genForeignKey) { createForeignKeyDDL(table, writer); } + if (genIndex) { createIndex(table, writer); } if (genKeyGen && (table.getKeyGenerator() != null)) { table.getKeyGenerator().setTable(table); - buff.append(table.getKeyGenerator().toCreateDDL()); + table.getKeyGenerator().toCreateDDL(writer); } - - write(buff.toString()); } } @@ -534,17 +497,14 @@ * Generate DDL for foreign key. * * @param table Table to generate DDL of foreign key for. - * @return DDL for foreign key. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - protected final String createForeignKeyDDL(final Table table) + protected final void createForeignKeyDDL(final Table table, final DDLWriter writer) throws GeneratorException { - StringBuffer buff = new StringBuffer(); for (int i = 0; i < table.getForeignKeyCount(); i++) { - ForeignKey fk = table.getForeignKey(i); - buff.append(fk.toCreateDDL()); + table.getForeignKey(i).toCreateDDL(writer); } - return buff.toString(); } /** @@ -551,16 +511,14 @@ * Generate DDL for indices of given table. * * @param table Table to generate DDL of indices for. - * @return DDL for indices of given table. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If failed to generate DDL. */ - public final String createIndex(final Table table) throws GeneratorException { - StringBuffer buff = new StringBuffer(); + public final void createIndex(final Table table, final DDLWriter writer) + throws GeneratorException { for (int i = 0; i < table.getIndexCount(); i++) { - Index index = table.getIndex(i); - buff.append(index.toCreateDDL()); + table.getIndex(i).toCreateDDL(writer); } - return buff.toString(); } //-------------------------------------------------------------------------- @@ -568,9 +526,9 @@ /** * Generate header comment. * - * @return Header comment. + * @param writer DDLWriter to write schema objects to. */ - public abstract String generateHeader(); + public abstract void generateHeader(final DDLWriter writer); //-------------------------------------------------------------------------- @@ -1024,25 +982,4 @@ } //-------------------------------------------------------------------------- - - /** - * Write given string to print stream. - * - * @param s String to write to print stream. - */ - protected final void write(final String s) { - String f = _configuration.getStringValue( - DDLGenConfiguration.CHAR_FORMAT_KEY, - DDLGenConfiguration.CHAR_FORMAT_SENSITIVE); - - if (DDLGenConfiguration.CHAR_FORMAT_LOWER.equalsIgnoreCase(f)) { - _printer.println(s.toLowerCase()); - } else if (DDLGenConfiguration.CHAR_FORMAT_UPPER.equalsIgnoreCase(f)) { - _printer.println(s.toUpperCase()); - } else { - _printer.println(s); - } - } - - //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/DDLWriter.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/DDLWriter.java (revision 0) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/DDLWriter.java (revision 0) @@ -0,0 +1,463 @@ +/* + * Copyright 2007 Le Duc Bao, Ralf Joachim + * + * 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.castor.ddlgen; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InterruptedIOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.text.MessageFormat; + +/** + * Replace PrintStream and StringBuffer by a Writer implementation + * We have various properties to configure output that are in-depended of the schema object: + *
  • org.castor.ddlgen.CharFormat=SENSITIVE, UPPER and LOWER + *
  • org.castor.ddlgen.Newline=\n + *
  • org.castor.ddlgen.Indention=\t + * + * These properties are accessed at various places all around ddlgen at the moment.The idea + * is that these properties are set only once at the new Writer and do not need to be + * accessed elsewhere. This has the following advantages: + *
  • improved performance as the properties don't need to be accessed for every object to output + *
  • functionallity to format genertaed ddl is concentrated in one class: the new Writer + *
  • all the toDDL(), toDropDDL(), toCreateDDL() methods get much shorter + * + * I thought of the following interface for the new Writer (not complete): + *
  • write(String) outputs String as is + *
  • writeln(String) calls write(String) followed by newline() + *
  • newline() output newline and indention of next line + *
  • indent() increases indention + *
  • unindent() decreases indention + * + * More write() and writeln() methods for other data types may be added on demand. A further + * improvement could be to offer write(String, Object[]) methods that internally use + * MessageFormat. This would enable us to use a pattern based approach for DDL generation. + * These patterns may sometimes be much easier to read and maintain. + * + * In addition to the introduction of the new Writer it will be required to pass an instance + * of the Writer to every method where DDL gets generated. Therefore the parameterless + * toCreate() method have to be changed to toCreateDDL(DDLWriter). This also applies to other + * such methods. + * + * @author Le Duc Bao + * @version $Revision: 5951 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $ + * @since 1.1.2 + */ +public final class DDLWriter extends Writer { + //-------------------------------------------------------------------------- + + /** Print writer to write all output to. */ + private Writer _writer; + + /** Remember errors. */ + private IOException _error = null; + + /** Newline flag is turn on at a new line before any other character gets written. */ + private boolean _isNewline = true; + + /** Current indent level. */ + private int _indentLevel = 0; + + /** String to output to indent a line. */ + private String _indentText = DDLGenConfiguration.DEFAULT_INDENT; + + /** String to output for a new line. */ + private String _newline = DDLGenConfiguration.DEFAULT_NEWLINE; + + /** Character format defined by CHAR_FORMAT_KEY in configuration file. */ + private String _chrFormat = DDLGenConfiguration.CHAR_FORMAT_SENSITIVE; + + //-------------------------------------------------------------------------- + + /** + * Construct new DDLWriter with given output stream and configuration file. + * + * @param output Output stream to write output characters to. + * @param conf Configuration. + */ + public DDLWriter(final OutputStream output, final Configuration conf) { + this(new BufferedWriter(new OutputStreamWriter(output)), conf); + } + + /** + * Construct new DDLWriter with given writer and configuration file. + * + * @param writer Writer to write output characters to. + * @param conf Configuration. + */ + public DDLWriter(final Writer writer, final Configuration conf) { + super(writer); + + _writer = writer; + + _newline = conf.getStringValue( + DDLGenConfiguration.NEWLINE_KEY, + DDLGenConfiguration.DEFAULT_NEWLINE); + _indentText = conf.getStringValue( + DDLGenConfiguration.INDENT_KEY, + DDLGenConfiguration.DEFAULT_INDENT); + _chrFormat = conf.getStringValue( + DDLGenConfiguration.CHAR_FORMAT_KEY, + DDLGenConfiguration.CHAR_FORMAT_SENSITIVE); + } + + /** + * Flush the writer. + */ + public void flush() { + try { + synchronized (lock) { + if (_writer == null) { throw new IOException("Writer closed."); } + _writer.flush(); + } + } catch (IOException ex) { + _error = ex; + } + } + + /** + * Close the writer. + */ + public void close () { + try { + synchronized (lock) { + if (_writer != null) { + _writer.close(); + _writer = null; + } + } + } catch (IOException ex) { + _error = ex; + } + } + + /** + * Check if any error occured at previous operations of the writer. If an IOException was + * caught at any previous operation of the writer it will be thrown now. + * + * @throws IOException IOException caught at any previous operation of the writer. + */ + public void checkError() throws IOException { + if (_error != null) { throw _error; } + } + + //-------------------------------------------------------------------------- + + /** + * Increase indention by 1. + */ + public void indent() { + _indentLevel++; + } + + /** + * Decrease indention by 1. + */ + public void unindent() { + _indentLevel = (_indentLevel <= 0) ? 0 : _indentLevel - 1; + } + + //-------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + public void write(final char[] buf, final int off, final int len) { + write(new String(buf, off, len)); + } + + /** + * {@inheritDoc} + */ + public void write(final char[] buf) { + write(new String(buf)); + } + + /** + * {@inheritDoc} + */ + public void write(final int c) { + write(new String(new char[] {(char) c})); + } + + /** + * {@inheritDoc} + */ + public void write(final String s, final int off, final int len) { + write(s.substring(off, off + len)); + } + + /** + * {@inheritDoc} + */ + public void write(final String s) { + if (s != null) { + try { + synchronized (lock) { + if (_writer == null) { throw new IOException("Writer closed."); } + + if (DDLGenConfiguration.CHAR_FORMAT_LOWER.equalsIgnoreCase(_chrFormat)) { + _writer.write(s.toLowerCase()); + } else if (DDLGenConfiguration.CHAR_FORMAT_UPPER.equalsIgnoreCase(_chrFormat)) { + _writer.write(s.toUpperCase()); + } else { + _writer.write(s); + } + } + } catch (InterruptedIOException ex) { + Thread.currentThread().interrupt(); + } catch (IOException ex) { + _error = ex; + } + } + } + + /** + * Write indention. + */ + private void writeIndention() { + try { + synchronized (lock) { + if (_writer == null) { throw new IOException("Writer closed."); } + + if (_isNewline) { + for (int i = 0; i < _indentLevel; i++) { + _writer.write(_indentText); + } + + _isNewline = false; + } + } + } catch (InterruptedIOException ex) { + Thread.currentThread().interrupt(); + } catch (IOException ex) { + _error = ex; + } + } + + /** + * Write newline. + */ + private void writeNewline() { + try { + synchronized (lock) { + if (_writer == null) { throw new IOException("Writer closed."); } + + _isNewline = true; + + _writer.write(_newline); + } + } catch (InterruptedIOException ex) { + Thread.currentThread().interrupt(); + } catch (IOException ex) { + _error = ex; + } + } + + //-------------------------------------------------------------------------- + + /** + * Print an array of characters. + * + * @param chars Array of chars to be printed. + */ + public void print(final char[] chars) { + synchronized (lock) { + writeIndention(); + write(chars); + } + } + + /** + * Print a double-precision floating-point number. + * + * @param number Double to be printed. + */ + public void print(final double number) { + synchronized (lock) { + writeIndention(); + write(String.valueOf(number)); + } + } + + /** + * Print an integer number. + * + * @param number Integer to be printed. + */ + public void print(final int number) { + synchronized (lock) { + writeIndention(); + write(String.valueOf(number)); + } + } + + /** + * Print a long number. + * + * @param number Long to be printed. + */ + public void print(final long number) { + synchronized (lock) { + writeIndention(); + write(String.valueOf(number)); + } + } + + /** + * Print an object. + * + * @param object Object to be printed. + */ + public void print(final Object object) { + synchronized (lock) { + writeIndention(); + write(String.valueOf(object)); + } + } + + /** + * Print a string. + * + * @param string String to be printed. + */ + public void print(final String string) { + synchronized (lock) { + writeIndention(); + write(string); + } + } + + /** + * A convenience method to print a formatted string build by filling placeholders of the + * specified pattern with given arguments. + * + * @param pattern Pattern with placeholders. + * @param arguments Arguments to replace placeholders in pattern. + */ + public void print(final String pattern, final Object[] arguments) { + synchronized (lock) { + writeIndention(); + write(MessageFormat.format(pattern, arguments)); + } + } + + //-------------------------------------------------------------------------- + + /** + * Terminate the current line by writing the line separator string. + */ + public void println() { + writeNewline(); + } + + /** + * Print an array of characters and terminate the line. + * + * @param chars Array of chars to be printed. + */ + public void println(final char[] chars) { + synchronized (lock) { + writeIndention(); + write(chars); + writeNewline(); + } + } + + /** + * Print a double-precision floating-point number and terminate the line. + * + * @param number Double to be printed. + */ + public void println(final double number) { + synchronized (lock) { + writeIndention(); + write(String.valueOf(number)); + writeNewline(); + } + } + + /** + * Print an integer number and terminate the line. + * + * @param number Integer to be printed. + */ + public void println(final int number) { + synchronized (lock) { + writeIndention(); + write(String.valueOf(number)); + writeNewline(); + } + } + + /** + * Print a long number and terminate the line. + * + * @param number Long to be printed. + */ + public void println(final long number) { + synchronized (lock) { + writeIndention(); + write(String.valueOf(number)); + writeNewline(); + } + } + + /** + * Print an object and terminate the line. + * + * @param object Object to be printed. + */ + public void println(final Object object) { + synchronized (lock) { + writeIndention(); + write(String.valueOf(object)); + writeNewline(); + } + } + + /** + * Print a string and terminate the line. + * + * @param string String to be printed. + */ + public void println(final String string) { + synchronized (lock) { + writeIndention(); + write(string); + writeNewline(); + } + } + + /** + * A convenience method to print a formatted string build by filling placeholders of the + * specified pattern with given arguments. Line will be terminated after the formatted string. + * + * @param pattern Pattern with placeholders. + * @param arguments Arguments to replace placeholders in pattern. + */ + public void println(final String pattern, final Object[] arguments) { + synchronized (lock) { + writeIndention(); + write(MessageFormat.format(pattern, arguments)); + writeNewline(); + } + } + + //-------------------------------------------------------------------------- +} Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Field.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Field.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Field.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.engine.db2; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; import org.castor.ddlgen.schemaobject.Field; @@ -33,17 +34,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" ").append(getType().toDDL(this)); - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.print(getName()); + writer.print(" "); + writer.print(getType().toDDL(this)); + + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" GENERATED BY DEFAULT AS IDENTITY "); - sb.append("START WITH 1 INCREMENT BY 1"); + writer.print(" GENERATED BY DEFAULT AS IDENTITY START WITH 1 INCREMENT BY 1"); } - - return sb.toString(); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Generator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Generator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Generator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.db2; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +86,14 @@ /** * {@inheritDoc} */ - public String generateHeader() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); - StringBuffer buff = new StringBuffer("/* "); - buff.append(newline); - buff.append(new java.util.Date()); - buff.append(newline); - - buff.append("Castor DDL Generator from mapping for DB2"); - buff.append(newline); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + writer.println("/* "); + writer.println(new Date()); + writer.println("Castor DDL Generator from mapping for DB2"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); + writer.println("*/"); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2PrimaryKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2PrimaryKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2PrimaryKey.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.engine.db2; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.PrimaryKey; /** @@ -32,21 +33,21 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() <= 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("ALTER TABLE ").append(getTable().getName()); - sb.append(newline); - sb.append("ADD CONSTRAINT ").append(getName()); - sb.append(newline); - sb.append("PRIMARY KEY (").append(fieldNames()).append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + if (getFieldCount() > 0) { + writer.println(); + writer.println(); + writer.print("ALTER TABLE "); + writer.println(getTable().getName()); + writer.print("ADD CONSTRAINT "); + writer.println(getName()); + writer.print("PRIMARY KEY ("); + fieldNames(writer); + writer.print(")"); + writer.print(delimiter); + } } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2SequenceKeyGeneratorFactory.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2SequenceKeyGeneratorFactory.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2SequenceKeyGeneratorFactory.java (working copy) @@ -18,6 +18,7 @@ import java.text.MessageFormat; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.keygenerator.SequenceKeyGenerator; import org.castor.ddlgen.keygenerator.SequenceKeyGeneratorFactory; import org.castor.ddlgen.schemaobject.KeyGenerator; @@ -34,10 +35,8 @@ /** * {@inheritDoc} */ - public String toCreateDDL(final KeyGenerator key) { + public void toCreateDDL(final KeyGenerator key, final DDLWriter writer) { SequenceKeyGenerator sequenceKey = (SequenceKeyGenerator) key; - DDLGenConfiguration conf = sequenceKey.getConfiguration(); - StringBuffer buff = new StringBuffer(); String tableName = sequenceKey.getTable().getName(); String pkList = toPrimaryKeyList(key.getTable()); String sequenceName = MessageFormat.format(sequenceKey.getSequence(), @@ -43,18 +42,14 @@ String sequenceName = MessageFormat.format(sequenceKey.getSequence(), new Object[]{tableName, pkList}); - String newline = conf.getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = conf.getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); - - buff.append(newline).append(newline); - buff.append("CREATE SEQUENCE AS INTEGER ").append(sequenceName); - buff.append(newline).append(indent); - buff.append("START WITH 1 INCREMENT BY 1"); - buff.append(newline).append(indent); - buff.append("MAXVALUE ").append(Integer.MAX_VALUE); - buff.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); + writer.println(); + writer.println(); + writer.print("CREATE SEQUENCE AS INTEGER "); + writer.println(sequenceName); + writer.println("START WITH 1 INCREMENT BY 1"); + writer.print("MAXVALUE "); + writer.print(Integer.MAX_VALUE); + writer.println(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); if (sequenceKey.isTrigger()) { // refer to http://publib.boulder.ibm.com/infocenter/db2luw/v8/index. @@ -67,8 +62,8 @@ triggerName = "TRG" + sequenceName; } - String triggerTemp = conf.getStringValue( - DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); + DDLGenConfiguration conf = sequenceKey.getConfiguration(); + String triggerTemp = conf.getStringValue(DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); triggerTemp = triggerTemp.replaceAll("", triggerName); triggerTemp = triggerTemp.replaceAll("", sequenceName); @@ -75,12 +70,11 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + + writer.println(); + writer.println(); + writer.println(triggerTemp); } - - return buff.toString(); } /** @@ -86,7 +80,5 @@ /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; - } + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyField.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyField.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyField.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.engine.derby; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; import org.castor.ddlgen.schemaobject.Field; @@ -33,17 +34,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" ").append(getType().toDDL(this)); - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.print(getName()); + writer.print(" "); + writer.print(getType().toDDL(this)); + + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" GENERATED BY DEFAULT AS IDENTITY "); - sb.append("(START WITH 1, INCREMENT BY 1)"); + writer.print(" GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1)"); } - - return sb.toString(); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.derby; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,16 +86,14 @@ /** * {@inheritDoc} */ - public String generateHeader() { - StringBuffer buff = new StringBuffer("/*"); - buff.append(new java.util.Date()); - buff.append("\n"); - - buff.append("Castor DDL Generator from mapping for Derby"); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append("*/"); - return buff.toString(); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + writer.println("/* "); + writer.println(new Date()); + writer.println("Castor DDL Generator from mapping for Derby"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); + writer.println("*/"); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlField.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlField.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlField.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.engine.hsql; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; import org.castor.ddlgen.schemaobject.Field; @@ -33,16 +34,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" ").append(getType().toDDL(this)); - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } - + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.print(getName()); + writer.print(" "); + writer.print(getType().toDDL(this)); + + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } + if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" IDENTITY"); + writer.print(" IDENTITY"); } - - return sb.toString(); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.hsql; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +86,14 @@ /** * {@inheritDoc} */ - public String generateHeader() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer buff = new StringBuffer("/* "); - buff.append(newline); - buff.append(new java.util.Date()); - buff.append(newline); - - buff.append("Castor DDL Generator from mapping for HSQL"); - buff.append(newline); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + writer.println("/* "); + writer.println(new Date()); + writer.println("Castor DDL Generator from mapping for HSQL"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); + writer.println("*/"); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlPrimaryKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlPrimaryKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlPrimaryKey.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.engine.hsql; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.PrimaryKey; /** @@ -32,21 +33,21 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() <= 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("ALTER TABLE ").append(getTable().getName()); - sb.append(newline); - sb.append("ADD CONSTRAINT ").append(getName()); - sb.append(newline); - sb.append("PRIMARY KEY (").append(fieldNames()).append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + if (getFieldCount() > 0) { + writer.println(); + writer.println(); + writer.print("ALTER TABLE "); + writer.println(getTable().getName()); + writer.print("ADD CONSTRAINT "); + writer.println(getName()); + writer.print("PRIMARY KEY ("); + fieldNames(writer); + writer.print(")"); + writer.print(delimiter); + } } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlSequenceKeyGeneratorFactory.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlSequenceKeyGeneratorFactory.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlSequenceKeyGeneratorFactory.java (working copy) @@ -18,6 +18,7 @@ import java.text.MessageFormat; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.keygenerator.SequenceKeyGenerator; import org.castor.ddlgen.keygenerator.SequenceKeyGeneratorFactory; import org.castor.ddlgen.schemaobject.KeyGenerator; @@ -34,10 +35,8 @@ /** * {@inheritDoc} */ - public String toCreateDDL(final KeyGenerator key) { + public void toCreateDDL(final KeyGenerator key, final DDLWriter writer) { SequenceKeyGenerator sequenceKey = (SequenceKeyGenerator) key; - DDLGenConfiguration conf = sequenceKey.getConfiguration(); - StringBuffer buff = new StringBuffer(); String tableName = sequenceKey.getTable().getName(); String pkList = toPrimaryKeyList(key.getTable()); String sequenceName = MessageFormat.format(sequenceKey.getSequence(), @@ -43,16 +42,13 @@ String sequenceName = MessageFormat.format(sequenceKey.getSequence(), new Object[]{tableName, pkList}); - String newline = conf.getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = conf.getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); - - buff.append(newline).append(newline); - buff.append("CREATE SEQUENCE ").append(sequenceName).append(" AS INTEGER"); - buff.append(newline).append(indent); - buff.append("START WITH 1 INCREMENT BY 1"); - buff.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); + writer.println(); + writer.println(); + writer.print("CREATE SEQUENCE "); + writer.print(sequenceName); + writer.println(" AS INTEGER"); + writer.print("START WITH 1 INCREMENT BY 1"); + writer.println(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); if (sequenceKey.isTrigger()) { String pkTypeList = toPrimaryKeyTypeList(key.getTable()); @@ -63,8 +59,8 @@ triggerName = "TRG" + sequenceName; } - String triggerTemp = conf.getStringValue( - DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); + DDLGenConfiguration conf = sequenceKey.getConfiguration(); + String triggerTemp = conf.getStringValue(DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); triggerTemp = triggerTemp.replaceAll("", triggerName); triggerTemp = triggerTemp.replaceAll("", sequenceName); @@ -71,12 +67,11 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + + writer.println(); + writer.println(); + writer.println(triggerTemp); } - - return buff.toString(); } /** @@ -82,7 +77,5 @@ /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; - } + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlTable.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlTable.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlTable.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.engine.hsql; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.schemaobject.Table; @@ -33,19 +34,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("CREATE TABLE ").append(getName()).append(" ("); - sb.append(newline); - sb.append(fields()); - sb.append(newline); - sb.append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; + + writer.println(); + writer.println(); + writer.println("CREATE TABLE {0} (", new Object[] {getName()}); + fields(writer); + writer.println(); + writer.print(")"); + writer.print(delimiter); } /** @@ -51,15 +49,12 @@ /** * {@inheritDoc} */ - public String toDropDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); + public void toDropDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("DROP TABLE IF EXISTS ").append(getName()); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + writer.println(); + writer.println(); + writer.print("DROP TABLE IF EXISTS {0}{1}", new Object[] {getName(), delimiter}); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlField.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlField.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlField.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.engine.mssql; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; import org.castor.ddlgen.schemaobject.Field; @@ -33,17 +34,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" ").append(getType().toDDL(this)); - + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.print(getName()); + writer.print(" "); + writer.print(getType().toDDL(this)); + if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" IDENTITY(1,1)"); + writer.print(" IDENTITY(1,1)"); } - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } - - return sb.toString(); + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.mssql; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,23 +86,14 @@ /** * {@inheritDoc} */ - public String generateHeader() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer buff = new StringBuffer("/* "); - buff.append(newline); - buff.append(new java.util.Date()); - buff.append(newline); - - buff.append("Castor DDL Generator from mapping for Microsoft SQL Server"); - buff.append(newline); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); - return buff.toString(); + writer.println("/* "); + writer.println(new Date()); + writer.println("Castor DDL Generator from mapping for Microsoft SQL Server"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); + writer.println("*/"); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlPrimaryKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlPrimaryKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlPrimaryKey.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.engine.mssql; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.PrimaryKey; /** @@ -32,21 +33,21 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() <= 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("ALTER TABLE ").append(getTable().getName()); - sb.append(newline); - sb.append("ADD CONSTRAINT ").append(getName()); - sb.append(newline); - sb.append("PRIMARY KEY (").append(fieldNames()).append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + if (getFieldCount() > 0) { + writer.println(); + writer.println(); + writer.print("ALTER TABLE "); + writer.println(getTable().getName()); + writer.print("ADD CONSTRAINT "); + writer.println(getName()); + writer.print("PRIMARY KEY ("); + fieldNames(writer); + writer.print(")"); + writer.print(delimiter); + } } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlField.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlField.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlField.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.engine.mysql; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; import org.castor.ddlgen.schemaobject.Field; @@ -33,17 +34,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" ").append(getType().toDDL(this)); - + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.print(getName()); + writer.print(" "); + writer.print(getType().toDDL(this)); + if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" AUTO_INCREMENT"); + writer.print(" AUTO_INCREMENT"); } - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } - - return sb.toString(); + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlForeignKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlForeignKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlForeignKey.java (working copy) @@ -15,7 +15,9 @@ */ package org.castor.ddlgen.engine.mysql; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.ForeignKey; /** @@ -32,39 +34,36 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("ALTER TABLE ").append(getTable().getName()); - sb.append(newline); - sb.append("ADD CONSTRAINT ").append(getName()); - sb.append(newline); - sb.append("FOREIGN KEY ").append(getName()); - sb.append(" (").append(fieldNames()).append(')'); - sb.append(newline); - sb.append("REFERENCES ").append(getReferenceTable().getName()); - sb.append(" (").append(referencedFieldNames()).append(')'); + public void toCreateDDL(final DDLWriter writer) { + Configuration conf = getConfiguration(); + String del = conf.getStringValue(DDLGenConfiguration.FOREIGN_KEY_ON_DELETE_KEY, null); + String upd = conf.getStringValue(DDLGenConfiguration.FOREIGN_KEY_ON_UPDATE_KEY, null); + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; + + writer.println(); + writer.println(); + writer.println("ALTER TABLE {0}", new Object[] {getTable().getName()}); + writer.println("ADD CONSTRAINT {0}", new Object[] {getName()}); + writer.print("FOREIGN KEY {0} (", new Object[] {getName()}); + fieldNames(writer); + writer.println(")"); + writer.print("REFERENCES {0} (", new Object[] {getReferenceTable().getName()}); + referencedFieldNames(writer); + writer.print(")"); - // on delete - String opt = getConfiguration().getStringValue( - DDLGenConfiguration.FOREIGN_KEY_ON_DELETE_KEY, null); - if (opt != null && !"".equals(opt)) { - sb.append(newline); - sb.append("ON DELETE ").append(opt); + if ((del != null) && !"".equals(del)) { + writer.println(); + writer.print("ON DELETE "); + writer.print(del); } - opt = getConfiguration().getStringValue( - DDLGenConfiguration.FOREIGN_KEY_ON_UPDATE_KEY, null); - if (opt != null && !"".equals(opt)) { - sb.append(newline); - sb.append("ON UPDATE ").append(opt); + if ((upd != null) && !"".equals(upd)) { + writer.println(); + writer.print("ON UPDATE "); + writer.print(upd); } - - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + + writer.print(delimiter); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.mysql; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,19 +86,13 @@ /** * {@inheritDoc} */ - public String generateHeader() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer buff = new StringBuffer("# "); - buff.append(new java.util.Date()); - buff.append("\n"); - - buff.append("# Castor DDL Generator from _mapping"); - buff.append(newline).append(newline); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - return buff.toString(); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + writer.println("# {0}", new Object[] {new Date()}); + writer.println("# Castor DDL Generator from mapping for MySQL"); + writer.println(); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlSchema.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlSchema.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlSchema.java (working copy) @@ -15,7 +15,9 @@ */ package org.castor.ddlgen.engine.mysql; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.Schema; /** @@ -32,19 +34,15 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (!getConfiguration().getBoolValue( - DDLGenConfiguration.GENERATE_DDL_FOR_SCHEMA_KEY, true)) { - return ""; - } - - String schema = getConfiguration().getStringValue( - DDLGenConfiguration.SCHEMA_NAME_KEY, ""); - if (schema == null || "".equals(schema)) { - return ""; + public void toCreateDDL(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + if (conf.getBoolValue(DDLGenConfiguration.GENERATE_DDL_FOR_SCHEMA_KEY, true)) { + String schema = conf.getStringValue(DDLGenConfiguration.SCHEMA_NAME_KEY, ""); + if ((schema != null) && !"".equals(schema)) { + writer.println("USE {0};", new Object[] {schema}); + } } - - return "USE " + schema + ";"; } /** @@ -50,9 +48,7 @@ /** * {@inheritDoc} */ - public String toDropDDL() { - return ""; - } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlTable.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlTable.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlTable.java (working copy) @@ -15,7 +15,9 @@ */ package org.castor.ddlgen.engine.mysql; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.schemaobject.Table; @@ -33,38 +35,32 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String engine = getConfiguration().getStringValue( - DDLGenConfiguration.STORAGE_ENGINE_KEY, null); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("CREATE TABLE ").append(getName()).append(" ("); - sb.append(newline); - sb.append(fields()); - sb.append(newline); - sb.append(')'); + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + Configuration conf = getConfiguration(); + String engine = conf.getStringValue(DDLGenConfiguration.STORAGE_ENGINE_KEY, null); + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; + + writer.println(); + writer.println(); + writer.println("CREATE TABLE {0} (", new Object[] {getName()}); + fields(writer); + writer.println(); if ((engine != null) && !"".equals(engine)) { - sb.append(" ENGINE=").append(engine); + writer.print(") ENGINE={0}{1}", new Object[] {engine, delimiter}); + } else { + writer.print("){0}", new Object[] {delimiter}); } - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); } - /** + /** * {@inheritDoc} */ - public String toDropDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); + public void toDropDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("DROP TABLE IF EXISTS ").append(getName()); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + writer.println(); + writer.println(); + writer.print("DROP TABLE IF EXISTS {0}{1}", new Object[] {getName(), delimiter}); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.oracle; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +86,14 @@ /** * {@inheritDoc} */ - public String generateHeader() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer buff = new StringBuffer("/* "); - buff.append(newline); - buff.append(new java.util.Date()); - buff.append(newline); - - buff.append("Castor DDL Generator from mapping for Oracle"); - buff.append(newline); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + writer.println("/* "); + writer.println(new Date()); + writer.println("Castor DDL Generator from mapping for Oracle"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); + writer.println("*/"); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleSequenceKeyGeneratorFactory.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleSequenceKeyGeneratorFactory.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleSequenceKeyGeneratorFactory.java (working copy) @@ -18,6 +18,7 @@ import java.text.MessageFormat; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.keygenerator.SequenceKeyGenerator; import org.castor.ddlgen.keygenerator.SequenceKeyGeneratorFactory; import org.castor.ddlgen.schemaobject.KeyGenerator; @@ -34,11 +35,8 @@ /** * {@inheritDoc} */ - public String toCreateDDL(final KeyGenerator key) { + public void toCreateDDL(final KeyGenerator key, final DDLWriter writer) { SequenceKeyGenerator sequenceKey = (SequenceKeyGenerator) key; - StringBuffer buff = new StringBuffer(); - DDLGenConfiguration conf = sequenceKey.getConfiguration(); - String tableName = sequenceKey.getTable().getName(); String pkList = toPrimaryKeyList(key.getTable()); String pkTypeList = toPrimaryKeyTypeList(key.getTable()); @@ -45,18 +43,14 @@ String sequenceName = MessageFormat.format(sequenceKey.getSequence(), new Object[]{tableName, pkList}); - String newline = conf.getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = conf.getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); - - buff.append(newline).append(newline); - buff.append("CREATE SEQUENCE ").append(sequenceName); - buff.append(newline).append(indent); - buff.append("MAXVALUE ").append(Integer.MAX_VALUE); - buff.append(newline).append(indent); - buff.append("INCREMENT BY 1 START WITH 1"); - buff.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); + writer.println(); + writer.println(); + writer.print("CREATE SEQUENCE "); + writer.println(sequenceName); + writer.print("MAXVALUE "); + writer.println(Integer.MAX_VALUE); + writer.print("INCREMENT BY 1 START WITH 1"); + writer.println(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); if (sequenceKey.isTrigger()) { String triggerName = null; @@ -65,8 +59,8 @@ } else { triggerName = "TRG" + sequenceName; } - String triggerTemp = conf.getStringValue( - DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); + DDLGenConfiguration conf = sequenceKey.getConfiguration(); + String triggerTemp = conf.getStringValue(DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); triggerTemp = triggerTemp.replaceAll("", triggerName); triggerTemp = triggerTemp.replaceAll("", sequenceName); @@ -73,12 +67,11 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); - } - return buff.toString(); + writer.println(); + writer.println(); + writer.println(triggerTemp); + } } /** @@ -84,7 +77,5 @@ /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; - } + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseField.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseField.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseField.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.engine.pointbase; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; import org.castor.ddlgen.schemaobject.Field; @@ -33,16 +34,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" ").append(getType().toDDL(this)); - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } - + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.print(getName()); + writer.print(" "); + writer.print(getType().toDDL(this)); + + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } + if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" IDENTITY(1,1)"); + writer.print(" IDENTITY(1,1)"); } - - return sb.toString(); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.pointbase; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +86,14 @@ /** * {@inheritDoc} */ - public String generateHeader() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer buff = new StringBuffer("/* "); - buff.append(newline); - buff.append(new java.util.Date()); - buff.append(newline); - - buff.append("Castor DDL Generator from mapping for PointBase"); - buff.append(newline); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + writer.println("/* "); + writer.println(new Date()); + writer.println("Castor DDL Generator from mapping for PointBase"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); + writer.println("*/"); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBasePrimaryKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBasePrimaryKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBasePrimaryKey.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.engine.pointbase; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.PrimaryKey; /** @@ -32,21 +33,21 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() <= 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("ALTER TABLE ").append(getTable().getName()); - sb.append(newline); - sb.append("ADD CONSTRAINT ").append(getName()); - sb.append(newline); - sb.append("PRIMARY KEY (").append(fieldNames()).append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + if (getFieldCount() > 0) { + writer.println(); + writer.println(); + writer.print("ALTER TABLE "); + writer.println(getTable().getName()); + writer.print("ADD CONSTRAINT "); + writer.println(getName()); + writer.print("PRIMARY KEY ("); + fieldNames(writer); + writer.print(")"); + writer.print(delimiter); + } } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlField.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlField.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlField.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.engine.postgresql; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; import org.castor.ddlgen.schemaobject.Field; @@ -33,6 +34,26 @@ /** * {@inheritDoc} */ + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.print(getName()); + writer.print(" "); + + if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { + if ("integer".equalsIgnoreCase(getType().getSqlType())) { + writer.print("SERIAL"); + } else { + writer.print("BIGSERIAL"); + } + } else { + writer.print(getType().toDDL(this)); + } + + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } + } + + /** + * {@inheritDoc} + */ public String toCreateDDL() throws GeneratorException { StringBuffer sb = new StringBuffer(); sb.append(getName()).append(" "); Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.postgresql; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,15 +86,12 @@ /** * {@inheritDoc} */ - public String generateHeader() { - StringBuffer buff = new StringBuffer("-- "); - buff.append(new java.util.Date()); - buff.append("\n"); - - buff.append("-- Castor DDL Generator from mapping for PostgreSQL"); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - return buff.toString(); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + writer.println("-- {0}", new Object[] {new Date()}); + writer.println("-- Castor DDL Generator from mapping for PostgreSQL"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlSequenceKeyGeneratorFactory.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlSequenceKeyGeneratorFactory.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlSequenceKeyGeneratorFactory.java (working copy) @@ -18,6 +18,7 @@ import java.text.MessageFormat; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.keygenerator.SequenceKeyGenerator; import org.castor.ddlgen.keygenerator.SequenceKeyGeneratorFactory; import org.castor.ddlgen.schemaobject.KeyGenerator; @@ -34,10 +35,8 @@ /** * {@inheritDoc} */ - public String toCreateDDL(final KeyGenerator key) { + public void toCreateDDL(final KeyGenerator key, final DDLWriter writer) { SequenceKeyGenerator sequenceKey = (SequenceKeyGenerator) key; - DDLGenConfiguration conf = sequenceKey.getConfiguration(); - StringBuffer buff = new StringBuffer(); String tableName = sequenceKey.getTable().getName(); String pkList = toPrimaryKeyList(key.getTable()); String pkTypeList = toPrimaryKeyTypeList(key.getTable()); @@ -44,17 +43,14 @@ String sequenceName = MessageFormat.format(sequenceKey.getSequence(), new Object[]{tableName, pkList}); - String newline = conf.getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = conf.getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); - - buff.append(newline).append(newline); - buff.append("CREATE SEQUENCE ").append(sequenceName); - buff.append(newline).append(indent); - buff.append(" INCREMENT 1 ").append("MAXVALUE "). - append(Integer.MAX_VALUE).append(" START 1"); - buff.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); + writer.println(); + writer.println(); + writer.print("CREATE SEQUENCE "); + writer.println(sequenceName); + writer.print("INCREMENT 1 MAXVALUE "); + writer.print(Integer.MAX_VALUE); + writer.print(" START 1"); + writer.println(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); if (sequenceKey.isTrigger()) { String triggerName = null; @@ -64,8 +60,8 @@ triggerName = "TRG" + sequenceName; } - String triggerTemp = conf.getStringValue( - DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); + DDLGenConfiguration conf = sequenceKey.getConfiguration(); + String triggerTemp = conf.getStringValue(DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); triggerTemp = triggerTemp.replaceAll("", triggerName); triggerTemp = triggerTemp.replaceAll("", sequenceName); @@ -72,12 +68,11 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + + writer.println(); + writer.println(); + writer.println(triggerTemp); } - - return buff.toString(); } /** @@ -83,7 +78,5 @@ /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; - } + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.sapdb; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +86,14 @@ /** * {@inheritDoc} */ - public String generateHeader() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer buff = new StringBuffer("/* "); - buff.append(newline); - buff.append(new java.util.Date()); - buff.append(newline); - - buff.append("Castor DDL Generator from mapping for SapDB"); - buff.append(newline); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + writer.println("/* "); + writer.println(new Date()); + writer.println("Castor DDL Generator from mapping for SapDB"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); + writer.println("*/"); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbSequenceKeyGeneratorFactory.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbSequenceKeyGeneratorFactory.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbSequenceKeyGeneratorFactory.java (working copy) @@ -18,6 +18,7 @@ import java.text.MessageFormat; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.keygenerator.SequenceKeyGenerator; import org.castor.ddlgen.keygenerator.SequenceKeyGeneratorFactory; import org.castor.ddlgen.schemaobject.KeyGenerator; @@ -34,10 +35,8 @@ /** * {@inheritDoc} */ - public String toCreateDDL(final KeyGenerator key) { + public void toCreateDDL(final KeyGenerator key, final DDLWriter writer) { SequenceKeyGenerator sequenceKey = (SequenceKeyGenerator) key; - DDLGenConfiguration conf = sequenceKey.getConfiguration(); - StringBuffer buff = new StringBuffer(); String tableName = sequenceKey.getTable().getName(); String pkList = toPrimaryKeyList(key.getTable()); String sequenceName = MessageFormat.format(sequenceKey.getSequence(), @@ -43,18 +42,14 @@ String sequenceName = MessageFormat.format(sequenceKey.getSequence(), new Object[]{tableName, pkList}); - String newline = conf.getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = conf.getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); - - buff.append(newline).append(newline); - buff.append("CREATE SEQUENCE ").append(sequenceName); - buff.append(newline).append(indent); - buff.append("INCREMENT BY 1 START WITH 1"); - buff.append(newline).append(indent); - buff.append("MAXVALUE ").append(Integer.MAX_VALUE); - buff.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); + writer.println(); + writer.println(); + writer.print("CREATE SEQUENCE "); + writer.println(sequenceName); + writer.println("INCREMENT BY 1 START WITH 1"); + writer.print("MAXVALUE "); + writer.print(Integer.MAX_VALUE); + writer.println(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); if (sequenceKey.isTrigger()) { String pkTypeList = toPrimaryKeyTypeList(key.getTable()); @@ -65,8 +60,8 @@ triggerName = "TRG" + sequenceName; } - String triggerTemp = conf.getStringValue( - DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); + DDLGenConfiguration conf = sequenceKey.getConfiguration(); + String triggerTemp = conf.getStringValue(DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); triggerTemp = triggerTemp.replaceAll("", triggerName); triggerTemp = triggerTemp.replaceAll("", sequenceName); @@ -73,12 +68,11 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + + writer.println(); + writer.println(); + writer.println(triggerTemp); } - - return buff.toString(); } /** @@ -84,7 +78,5 @@ /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; - } + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseField.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseField.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseField.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.engine.sybase; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; import org.castor.ddlgen.schemaobject.Field; @@ -33,16 +34,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" ").append(getType().toDDL(this)); - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } - + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.print(getName()); + writer.print(" "); + writer.print(getType().toDDL(this)); + + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } + if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" IDENTITY"); + writer.print(" IDENTITY"); } - - return sb.toString(); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseGenerator.java (working copy) @@ -15,8 +15,12 @@ */ package org.castor.ddlgen.engine.sybase; +import java.util.Date; + import org.castor.ddlgen.AbstractGenerator; +import org.castor.ddlgen.Configuration; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +86,14 @@ /** * {@inheritDoc} */ - public String generateHeader() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer buff = new StringBuffer("/* "); - buff.append(newline); - buff.append(new java.util.Date()); - buff.append(newline); - - buff.append("Castor DDL Generator from mapping for Sybase"); - buff.append(newline); - buff.append(getConfiguration().getStringValue( - DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + public void generateHeader(final DDLWriter writer) { + Configuration conf = getConfiguration(); + + writer.println("/* "); + writer.println(new Date()); + writer.println("Castor DDL Generator from mapping for Sybase"); + writer.println(conf.getStringValue(DDLGenConfiguration.HEADER_COMMENT_KEY, "")); + writer.println("*/"); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/Generator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/Generator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/Generator.java (working copy) @@ -15,7 +15,7 @@ */ package org.castor.ddlgen; -import java.io.PrintStream; +import java.io.OutputStream; import org.exolab.castor.mapping.Mapping; @@ -82,13 +82,6 @@ */ void setKeyGenRegistry(KeyGeneratorRegistry keygenRegistry); - /** - * Set print stream for output. - * - * @param printer Print stream for output. - */ - void setPrinter(PrintStream printer); - //-------------------------------------------------------------------------- /** @@ -94,9 +87,10 @@ /** * Generate DDL for a mapping document. * + * @param output Output stream for output. * @throws GeneratorException If failed to generate DDL. */ - void generateDDL() throws GeneratorException; + void generateDDL(OutputStream output) throws GeneratorException; //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/HighLowKeyGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/HighLowKeyGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/HighLowKeyGenerator.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.keygenerator; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.schemaobject.KeyGenerator; import org.exolab.castor.mapping.xml.KeyGeneratorDef; @@ -166,7 +167,7 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { return ""; } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} @@ -171,7 +172,7 @@ /** * {@inheritDoc} */ - public String toDropDDL() { return ""; } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/IdentityKeyGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/IdentityKeyGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/IdentityKeyGenerator.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.keygenerator; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.KeyGenerator; import org.exolab.castor.mapping.xml.KeyGeneratorDef; @@ -60,7 +61,7 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { return ""; } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} @@ -65,7 +66,7 @@ /** * {@inheritDoc} */ - public String toDropDDL() { return ""; } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/MaxKeyGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/MaxKeyGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/MaxKeyGenerator.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.keygenerator; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.KeyGenerator; import org.exolab.castor.mapping.xml.KeyGeneratorDef; @@ -55,7 +56,7 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { return ""; } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} @@ -60,7 +61,7 @@ /** * {@inheritDoc} */ - public String toDropDDL() { return ""; } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGenerator.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.keygenerator; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.schemaobject.KeyGenerator; import org.exolab.castor.mapping.xml.KeyGeneratorDef; @@ -153,8 +154,8 @@ *
    * {@inheritDoc} */ - public String toCreateDDL() { - return _factory.toCreateDDL(this); + public void toCreateDDL(final DDLWriter writer) { + _factory.toCreateDDL(this, writer); } /** @@ -162,8 +163,8 @@ *
    * {@inheritDoc} */ - public String toDropDDL() { - return _factory.toDropDDL(this); + public void toDropDDL(final DDLWriter writer) { + _factory.toDropDDL(this, writer); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGeneratorFactory.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGeneratorFactory.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGeneratorFactory.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.keygenerator; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.KeyGeneratorFactory; import org.castor.ddlgen.schemaobject.Field; @@ -64,9 +65,9 @@ * Generate create script for given SEQUENCE key generator. * * @param key SEQUENCE key generator to generate DDL for. - * @return Create script of SEQUENCE key generator. + * @param writer DDLWriter to write schema objects to. */ - public abstract String toCreateDDL(final KeyGenerator key); + public abstract void toCreateDDL(final KeyGenerator key, final DDLWriter writer); /** * Generate drop script for given SEQUENCE key generator. @@ -72,9 +73,9 @@ * Generate drop script for given SEQUENCE key generator. * * @param key SEQUENCE key generator to generate DDL for. - * @return Drop script of SEQUENCE key generator. + * @param writer DDLWriter to write schema objects to. */ - public abstract String toDropDDL(final KeyGenerator key); + public abstract void toDropDDL(final KeyGenerator key, final DDLWriter writer); //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/UUIDKeyGenerator.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/UUIDKeyGenerator.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/UUIDKeyGenerator.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.keygenerator; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.KeyGenerator; import org.exolab.castor.mapping.xml.KeyGeneratorDef; @@ -55,7 +56,7 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { return ""; } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} @@ -60,7 +61,7 @@ /** * {@inheritDoc} */ - public String toDropDDL() { return ""; } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/Main.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/Main.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/Main.java (working copy) @@ -16,7 +16,6 @@ package org.castor.ddlgen; import java.io.FileOutputStream; -import java.io.PrintStream; import java.io.PrintWriter; import java.util.Properties; @@ -99,8 +98,7 @@ new MappingUnmarshaller().loadMappingOnly(mapping); generator.setMapping(mapping); - generator.setPrinter(new PrintStream(new FileOutputStream(ddlName))); - generator.generateDDL(); + generator.generateDDL(new FileOutputStream(ddlName)); } catch (Exception ex) { LOG.error("Error: " + ex.getMessage(), ex); } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultField.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultField.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultField.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.schemaobject; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.keygenerator.IdentityKeyGenerator; @@ -32,11 +33,7 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" ").append(getType().toDDL(this)); - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } - + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { String msg = "IDENTITY key generator is not supported for this database"; throw new GeneratorException(msg); @@ -42,7 +39,11 @@ throw new GeneratorException(msg); } - return sb.toString(); + writer.print(getName()); + writer.print(" "); + writer.print(getType().toDDL(this)); + + if (isIdentity() || isRequired()) { writer.print(" NOT NULL"); } } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultForeignKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultForeignKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultForeignKey.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.schemaobject; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; /** * Default foreign key. @@ -31,22 +32,20 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("ALTER TABLE ").append(getTable().getName()); - sb.append(newline); - sb.append("ADD CONSTRAINT ").append(getName()); - sb.append(newline); - sb.append("FOREIGN KEY (").append(fieldNames()).append(')'); - sb.append(newline); - sb.append("REFERENCES ").append(getReferenceTable().getName()); - sb.append(" (").append(referencedFieldNames()).append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + public void toCreateDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; + + writer.println(); + writer.println(); + writer.println("ALTER TABLE {0}", new Object[] {getTable().getName()}); + writer.println("ADD CONSTRAINT {0}", new Object[] {getName()}); + writer.print("FOREIGN KEY ("); + fieldNames(writer); + writer.println(")"); + writer.print("REFERENCES {0} (", new Object[] {getReferenceTable().getName()}); + referencedFieldNames(writer); + writer.print(")"); + writer.print(delimiter); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultIndex.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultIndex.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultIndex.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.schemaobject; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; /** * Default index. @@ -31,18 +32,16 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("CREATE UNIQUE INDEX ").append(getName()); - sb.append(newline); - sb.append("ON ").append(getTable().getName()); - sb.append(" (").append(fieldNames()).append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + public void toCreateDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; + + writer.println(); + writer.println(); + writer.println("CREATE UNIQUE INDEX {0}", new Object[] {getName()}); + writer.print("ON {0} (", new Object[] {getTable().getName()}); + fieldNames(writer); + writer.print(")"); + writer.print(delimiter); } /** @@ -48,9 +47,7 @@ /** * {@inheritDoc} */ - public String toDropDDL() { - return ""; - } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultPrimaryKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultPrimaryKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultPrimaryKey.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.schemaobject; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; /** * Default primary key. @@ -31,19 +32,19 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() == 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("ALTER TABLE ").append(getTable().getName()); - sb.append(newline); - sb.append("ADD PRIMARY KEY (").append(fieldNames()).append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + if (getFieldCount() > 0) { + writer.println(); + writer.println(); + writer.print("ALTER TABLE "); + writer.println(getTable().getName()); + writer.print("ADD PRIMARY KEY ("); + fieldNames(writer); + writer.print(")"); + writer.print(delimiter); + } } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultSchema.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultSchema.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultSchema.java (working copy) @@ -15,6 +15,8 @@ */ package org.castor.ddlgen.schemaobject; +import org.castor.ddlgen.DDLWriter; + /** * Default schema. * @@ -29,9 +31,7 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - return ""; - } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} @@ -36,9 +36,7 @@ /** * {@inheritDoc} */ - public String toDropDDL() { - return ""; - } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultTable.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultTable.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultTable.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.schemaobject; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; /** @@ -26,7 +27,7 @@ * @version $Revision: 5951 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $ * @since 1.1 */ -public class DefaultTable extends Table { +public final class DefaultTable extends Table { //-------------------------------------------------------------------------- /** @@ -32,19 +33,16 @@ /** * {@inheritDoc} */ - public final String toCreateDDL() throws GeneratorException { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("CREATE TABLE ").append(getName()).append(" ("); - sb.append(newline); - sb.append(fields()); - sb.append(newline); - sb.append(')'); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; + + writer.println(); + writer.println(); + writer.println("CREATE TABLE {0} (", new Object[] {getName()}); + fields(writer); + writer.println(); + writer.print(")"); + writer.print(delimiter); } /** @@ -50,15 +48,12 @@ /** * {@inheritDoc} */ - public final String toDropDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); + public void toDropDDL(final DDLWriter writer) { + String delimiter = DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER; - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("DROP TABLE ").append(getName()); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + writer.println(); + writer.println(); + writer.print("DROP TABLE {0}{1}", new Object[] {getName(), delimiter}); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Field.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Field.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Field.java (working copy) @@ -17,6 +17,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.typeinfo.TypeInfo; @@ -183,10 +184,8 @@ /** * {@inheritDoc} */ - public final String toDropDDL() { - return ""; - } - + public final void toDropDDL(final DDLWriter writer) { } + //-------------------------------------------------------------------------- /** Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/ForeignKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/ForeignKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/ForeignKey.java (working copy) @@ -21,6 +21,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; /** @@ -181,17 +182,18 @@ /** * Concatenate all field names delimited by field delimiter and whitespace. * - * @return Field names delimited by field delimiter and whitespace. + * @param writer DDLWriter to write schema objects to. */ - protected final String fieldNames() { + protected final void fieldNames(final DDLWriter writer) { String delimiter = DDLGenConfiguration.DEFAULT_FIELD_DELIMITER; - StringBuffer sb = new StringBuffer(); for (int i = 0; i < getFieldCount(); i++) { - if (i > 0) { sb.append(delimiter).append(' '); } - sb.append(getField(i).getName()); + if (i > 0) { + writer.print(delimiter); + writer.print(" "); + } + writer.print(getField(i).getName()); } - return sb.toString(); } /** @@ -197,17 +199,18 @@ /** * Concatenate all referenced field names delimited by field delimiter and whitespace. * - * @return Referenced field names delimited by field delimiter and whitespace. + * @param writer DDLWriter to write schema objects to. */ - protected final String referencedFieldNames() { + protected final void referencedFieldNames(final DDLWriter writer) { String delimiter = DDLGenConfiguration.DEFAULT_FIELD_DELIMITER; - StringBuffer sb = new StringBuffer(); for (int i = 0; i < getReferenceFieldCount(); i++) { - if (i > 0) { sb.append(delimiter).append(' '); } - sb.append(getReferenceField(i).getName()); + if (i > 0) { + writer.print(delimiter); + writer.print(" "); + } + writer.print(getReferenceField(i).getName()); } - return sb.toString(); } //-------------------------------------------------------------------------- @@ -215,10 +218,8 @@ /** * {@inheritDoc} */ - public final String toDropDDL() { - return ""; - } - + public final void toDropDDL(final DDLWriter writer) { } + //-------------------------------------------------------------------------- /** Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Index.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Index.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Index.java (working copy) @@ -19,6 +19,7 @@ import java.util.List; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; /** * Abstract base class for all indices. @@ -90,17 +91,18 @@ /** * Concatenate all field names delimited by field delimiter and whitespace. * - * @return Field names delimited by field delimiter and whitespace. + * @param writer DDLWriter to write schema objects to. */ - protected final String fieldNames() { + protected final void fieldNames(final DDLWriter writer) { String delimiter = DDLGenConfiguration.DEFAULT_FIELD_DELIMITER; - StringBuffer sb = new StringBuffer(); for (int i = 0; i < getFieldCount(); i++) { - if (i > 0) { sb.append(delimiter).append(' '); } - sb.append(getField(i).getName()); + if (i > 0) { + writer.print(delimiter); + writer.print(" "); + } + writer.print(getField(i).getName()); } - return sb.toString(); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/PrimaryKey.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/PrimaryKey.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/PrimaryKey.java (working copy) @@ -19,6 +19,7 @@ import java.util.List; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; /** * Abstract base class for all primary keys. @@ -90,17 +91,18 @@ /** * Concatenate all field names delimited by field delimiter and whitespace. * - * @return Field names delimited by field delimiter and whitespace. + * @param writer DDLWriter to write schema objects to. */ - protected final String fieldNames() { + protected final void fieldNames(final DDLWriter writer) { String delimiter = DDLGenConfiguration.DEFAULT_FIELD_DELIMITER; - StringBuffer sb = new StringBuffer(); for (int i = 0; i < getFieldCount(); i++) { - if (i > 0) { sb.append(delimiter).append(' '); } - sb.append(getField(i).getName()); + if (i > 0) { + writer.print(delimiter); + writer.print(" "); + } + writer.print(getField(i).getName()); } - return sb.toString(); } //-------------------------------------------------------------------------- @@ -108,10 +110,8 @@ /** * {@inheritDoc} */ - public final String toDropDDL() { - return ""; - } - + public final void toDropDDL(final DDLWriter writer) { } + //-------------------------------------------------------------------------- /** Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/SchemaObject.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/SchemaObject.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/SchemaObject.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.schemaobject; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; /** @@ -62,10 +63,10 @@ /** * Build create script for the schema object. * - * @return Create script for the schema object. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If generation of the script failed or is not supported. */ - String toCreateDDL() throws GeneratorException; + void toCreateDDL(final DDLWriter writer) throws GeneratorException; /** * Build drop script for the schema object. @@ -70,10 +71,10 @@ /** * Build drop script for the schema object. * - * @return Drop script for the schema object. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If generation of the script failed or is not supported. */ - String toDropDDL() throws GeneratorException; - + void toDropDDL(final DDLWriter writer) throws GeneratorException; + //-------------------------------------------------------------------------- } Index: C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Table.java =================================================================== --- C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Table.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Table.java (working copy) @@ -23,6 +23,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; /** @@ -219,22 +220,18 @@ /** * Concatenate all fields names delimited by line separator. * - * @return Field names delimited by field delimiter and whitespace. + * @param writer DDLWriter to write schema objects to. * @throws GeneratorException If generation of the script failed or is not supported. */ - protected final String fields() throws GeneratorException { + protected final void fields(final DDLWriter writer) throws GeneratorException { String delimiter = DDLGenConfiguration.DEFAULT_FIELD_DELIMITER; - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = getConfiguration().getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); - StringBuffer sb = new StringBuffer(); + writer.indent(); for (int i = 0; i < getFieldCount(); i++) { - if (i > 0) { sb.append(delimiter).append(newline); } - sb.append(indent).append(getField(i).toCreateDDL()); + if (i > 0) { writer.println(delimiter); } + getField(i).toCreateDDL(writer); } - return sb.toString(); + writer.unindent(); } //-------------------------------------------------------------------------- Index: C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/engine/db2/Db2GeneratorTest.java =================================================================== --- C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/engine/db2/Db2GeneratorTest.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/engine/db2/Db2GeneratorTest.java (working copy) @@ -15,6 +15,8 @@ */ package org.castor.ddlgen.engine.db2; +import java.io.ByteArrayOutputStream; + import junit.framework.Test; import junit.framework.TestSuite; @@ -19,6 +21,7 @@ import junit.framework.TestSuite; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.KeyGeneratorRegistry; import org.castor.ddlgen.test.framework.AbstractGeneratorTest; @@ -128,7 +131,14 @@ loadData("single_field_for_all.xml"); try { - getGenerator().generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, getGenerator().getConfiguration()); + + getGenerator().generateCreate(writer); + + writer.close(); + out.toString(); + fail("bit type is not supported, expected an exception"); } catch (GeneratorException e) { assertTrue(true); @@ -145,8 +155,6 @@ try { loadData("single_field_except_bit.xml"); - String ddl = getGenerator().generateCreate(); - DDLGenConfiguration conf = getGenerator().getConfiguration(); Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "tinyint" + PARAM_PRECISION), @@ -173,6 +181,15 @@ getSuffixString(conf, PARAM_PREFIX + "javaobject" + PARAM_LENGTH), getSuffixString(conf, PARAM_PREFIX + "blob" + PARAM_LENGTH), getSuffixString(conf, PARAM_PREFIX + "clob" + PARAM_LENGTH) }; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + getGenerator().generateCreate(writer); + + writer.close(); + String ddl = out.toString(); + boolean b = getExpected().match(getEngine(), ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + getExpected().getLastMatchString(), b); Index: C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/engine/derby/DerbyGeneratorTest.java =================================================================== --- C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/engine/derby/DerbyGeneratorTest.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/engine/derby/DerbyGeneratorTest.java (working copy) @@ -15,6 +15,8 @@ */ package org.castor.ddlgen.engine.derby; +import java.io.ByteArrayOutputStream; + import junit.framework.Test; import junit.framework.TestSuite; @@ -19,6 +21,7 @@ import junit.framework.TestSuite; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.KeyGeneratorRegistry; import org.castor.ddlgen.test.framework.AbstractGeneratorTest; import org.castor.ddlgen.test.framework.Expected; @@ -124,8 +127,6 @@ try { loadData("single_field_for_all.xml"); - String ddl = getGenerator().generateCreate(); - DDLGenConfiguration conf = getGenerator().getConfiguration(); Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "tinyint" + PARAM_PRECISION), @@ -152,6 +153,15 @@ getSuffixString(conf, PARAM_PREFIX + "javaobject" + PARAM_LENGTH), getSuffixString(conf, PARAM_PREFIX + "blob" + PARAM_LENGTH), getSuffixString(conf, PARAM_PREFIX + "clob" + PARAM_LENGTH) }; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + getGenerator().generateCreate(writer); + + writer.close(); + String ddl = out.toString(); + boolean b = getExpected().match(getEngine(), ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + getExpected().getLastMatchString(), b); Index: C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/test/framework/AbstractGeneratorTest.java =================================================================== --- C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/test/framework/AbstractGeneratorTest.java (revision 7007) +++ C:/Java/castor-5/ddlgen/src/test/java/org/castor/ddlgen/test/framework/AbstractGeneratorTest.java (working copy) @@ -15,6 +15,7 @@ */ package org.castor.ddlgen.test.framework; +import java.io.ByteArrayOutputStream; import java.net.URL; import junit.framework.TestCase; @@ -21,6 +22,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.mapping.MappingUnmarshaller; import org.exolab.castor.mapping.Mapping; @@ -169,8 +171,6 @@ try { loadData("single_table.xml"); - String ddl = _generator.generateCreate(); - DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { conf.getStringValue(PARAM_PREFIX + "integer" + PARAM_PRECISION, ""), @@ -175,6 +175,15 @@ Object[] params = new Object[] { conf.getStringValue(PARAM_PREFIX + "integer" + PARAM_PRECISION, ""), conf.getStringValue(PARAM_PREFIX + "char" + PARAM_LENGTH, "") }; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); + boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); @@ -190,8 +199,6 @@ try { loadData("ignored_table.xml"); - String ddl = _generator.generateCreate(); - DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), @@ -196,6 +203,15 @@ Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); + boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); @@ -211,8 +227,6 @@ try { loadData("no_table.xml"); - String ddl = _generator.generateCreate(); - DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), @@ -217,6 +231,15 @@ Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); + boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); @@ -232,7 +255,13 @@ try { loadData("drop_table.xml"); - String ddl = _generator.generateDrop(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, _generator.getConfiguration()); + + _generator.generateDrop(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, ddl); assertTrue("Generated DDL: " + ddl + "\n" @@ -254,7 +283,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -260,7 +295,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generatePrimaryKey(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -282,7 +323,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -288,7 +335,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generatePrimaryKey(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, null); assertTrue("Generated DDL: " + ddl + "\n" @@ -310,7 +363,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -316,7 +375,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generatePrimaryKey(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -338,7 +403,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -344,7 +415,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generatePrimaryKey(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -366,7 +443,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -372,7 +455,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generatePrimaryKey(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -389,8 +478,6 @@ try { loadData("multiple_table.xml"); - String ddl = _generator.generateCreate(); - DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), @@ -395,6 +482,15 @@ Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); + boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); @@ -410,8 +506,6 @@ try { loadData("single_field_for_all.xml"); - String ddl = _generator.generateCreate(); - DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "tinyint" + PARAM_PRECISION), @@ -441,6 +535,15 @@ conf.getStringValue(PARAM_PREFIX + "javaobject" + PARAM_LENGTH), conf.getStringValue(PARAM_PREFIX + "blob" + PARAM_LENGTH), conf.getStringValue(PARAM_PREFIX + "clob" + PARAM_LENGTH) }; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); + boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); @@ -456,8 +559,6 @@ try { loadData("single_field.xml"); - String ddl = _generator.generateCreate(); - DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), @@ -462,6 +563,15 @@ Object[] params = new Object[] { conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); + boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); @@ -482,7 +592,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -488,7 +604,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generateKeyGenerator(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -510,7 +632,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -516,7 +644,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generateKeyGenerator(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -538,7 +672,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -544,7 +684,14 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generateKeyGenerator(writer); + + writer.close(); + ddl = out.toString(); + b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); @@ -566,7 +713,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -572,7 +725,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generateKeyGenerator(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -594,7 +753,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -600,7 +765,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generateKeyGenerator(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -622,7 +793,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -628,7 +805,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateForeignKey(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generateForeignKey(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -650,7 +833,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -656,7 +845,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateForeignKey(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generateForeignKey(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -678,7 +873,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -684,7 +885,13 @@ assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateForeignKey(); + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, conf); + + _generator.generateForeignKey(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -706,7 +913,13 @@ conf.getStringValue(PARAM_PREFIX + "integer" + PARAM_PRECISION, ""), conf.getStringValue(PARAM_PREFIX + "char" + PARAM_LENGTH, "") }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -728,7 +941,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -745,7 +964,13 @@ try { loadData("no_field.xml"); - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, _generator.getConfiguration()); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, ddl); assertTrue("Generated DDL: " + ddl + "\n" @@ -767,7 +992,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -789,7 +1020,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -811,7 +1048,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, conf); + + _generator.generateCreate(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -831,7 +1074,14 @@ DDLGenConfiguration conf = _generator.getConfiguration(); conf.setProperty(DDLGenConfiguration.SCHEMA_NAME_KEY, "test"); - String ddl = _generator.getSchema().toCreateDDL(); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, _generator.getConfiguration()); + + _generator.getSchema().toCreateDDL(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, 0, ddl, new String[] {"test"}); assertTrue("Generated DDL: " + ddl + "\n" @@ -838,7 +1088,14 @@ + "Expected DDL: " + _expected.getLastMatchString(), b); conf.setProperty(DDLGenConfiguration.SCHEMA_NAME_KEY, ""); - ddl = _generator.getSchema().toCreateDDL(); + + out = new ByteArrayOutputStream(); + writer = new DDLWriter(out, _generator.getConfiguration()); + + _generator.getSchema().toCreateDDL(writer); + + writer.close(); + ddl = out.toString(); b = _expected.match(_engine, 1, ddl, new String[] {}); assertTrue("Generated DDL: " + ddl + "\n" @@ -855,7 +1112,13 @@ try { loadData("index_creation.xml"); - String ddl = _generator.generateIndex(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DDLWriter writer = new DDLWriter(out, _generator.getConfiguration()); + + _generator.generateIndex(writer); + + writer.close(); + String ddl = out.toString(); boolean b = _expected.match(_engine, ddl); assertTrue("Generated DDL: " + ddl + "\n" Index: C:/Java/castor-5/src/doc/release-notes.xml =================================================================== --- C:/Java/castor-5/src/doc/release-notes.xml (revision 7007) +++ C:/Java/castor-5/src/doc/release-notes.xml (working copy) @@ -35,6 +35,26 @@ + + + Replaced PrintStream and StringBuffer by a Writer implementation. + + + Le Duc Bao + leducbao@gmail.com + + + Ralf Joachim + ralf.joachim@syscon.eu + + + Ralf Joachim + ralf.joachim@syscon.eu + + Enh. + JDO + 20070607 + Fixed a problem with incorrect import statements/class name Index: C:/Java/castor-5/src/etc/CHANGELOG =================================================================== --- C:/Java/castor-5/src/etc/CHANGELOG (revision 7007) +++ C:/Java/castor-5/src/etc/CHANGELOG (working copy) @@ -1,6 +1,11 @@ SVN --- +JDO: Resolved issue CASTOR-1774 using contribution from Le Duc Bao [leducbao@gmail.com] + Replaced PrintStream and StringBuffer by a Writer implementation. + Details: http://jira.codehaus.org/browse/CASTOR-1774 + (Ralf - 20070607) + XML: Resolved issue CASTOR-1986 using contribution from Werner Guttmann [michael.kopp@gmx.at] Fixed a problem with incorrect import statements/class name references in the context of included/imported XML schemas.