Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/test/framework/AbstractGeneratorTest.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/test/framework/AbstractGeneratorTest.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/test/framework/AbstractGeneratorTest.java (working copy) @@ -15,12 +15,17 @@ */ package org.castor.ddlgen.test.framework; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; import java.net.URL; import junit.framework.TestCase; import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; +import org.castor.ddlgen.GeneratorException; import org.castor.mapping.MappingUnmarshaller; import org.exolab.castor.mapping.Mapping; @@ -169,7 +174,7 @@ try { loadData("single_table.xml"); - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { @@ -190,7 +195,7 @@ try { loadData("ignored_table.xml"); - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { @@ -211,7 +216,7 @@ try { loadData("no_table.xml"); - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { @@ -232,7 +237,7 @@ try { loadData("drop_table.xml"); - String ddl = _generator.generateDrop(); + String ddl = generate(DROP); boolean b = _expected.match(_engine, ddl); assertTrue("Generated DDL: " + ddl + "\n" @@ -254,13 +259,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + ddl = generate(PRIMARY_KEY); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -282,13 +287,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + ddl = generate(PRIMARY_KEY); b = _expected.match(_engine, 1, ddl, null); assertTrue("Generated DDL: " + ddl + "\n" @@ -310,13 +315,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + ddl = generate(PRIMARY_KEY); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -338,13 +343,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + ddl = generate(PRIMARY_KEY); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -366,13 +371,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generatePrimaryKey(); + ddl = generate(PRIMARY_KEY); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -389,7 +394,7 @@ try { loadData("multiple_table.xml"); - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { @@ -410,7 +415,7 @@ try { loadData("single_field_for_all.xml"); - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { @@ -456,7 +461,7 @@ try { loadData("single_field.xml"); - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); DDLGenConfiguration conf = _generator.getConfiguration(); Object[] params = new Object[] { @@ -482,13 +487,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + ddl = generate(KEY_GENERATOR); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -510,13 +515,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + ddl = generate(KEY_GENERATOR); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -538,13 +543,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + ddl = generate(KEY_GENERATOR); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); @@ -566,13 +571,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + ddl = generate(KEY_GENERATOR); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -594,13 +599,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateKeyGenerator(); + ddl = generate(KEY_GENERATOR); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -622,13 +627,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateForeignKey(); + ddl = generate(FOREIGN_KEY); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -650,13 +655,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateForeignKey(); + ddl = generate(FOREIGN_KEY); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -678,13 +683,13 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, 0, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); - ddl = _generator.generateForeignKey(); + ddl = generate(FOREIGN_KEY); b = _expected.match(_engine, 1, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -706,7 +711,7 @@ conf.getStringValue(PARAM_PREFIX + "integer" + PARAM_PRECISION, ""), conf.getStringValue(PARAM_PREFIX + "char" + PARAM_LENGTH, "") }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -728,7 +733,7 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -745,7 +750,7 @@ try { loadData("no_field.xml"); - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, ddl); assertTrue("Generated DDL: " + ddl + "\n" @@ -767,7 +772,7 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -789,7 +794,7 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -811,7 +816,7 @@ conf.getInteger(PARAM_PREFIX + "integer" + PARAM_PRECISION), conf.getInteger(PARAM_PREFIX + "char" + PARAM_LENGTH) }; - String ddl = _generator.generateCreate(); + String ddl = generate(CREATE); boolean b = _expected.match(_engine, ddl, params); assertTrue("Generated DDL: " + ddl + "\n" @@ -831,14 +836,14 @@ DDLGenConfiguration conf = _generator.getConfiguration(); conf.setProperty(DDLGenConfiguration.SCHEMA_NAME_KEY, "test"); - String ddl = _generator.getSchema().toCreateDDL(); + String ddl = generate(SCHEMA); boolean b = _expected.match(_engine, 0, ddl, new String[] {"test"}); assertTrue("Generated DDL: " + ddl + "\n" + "Expected DDL: " + _expected.getLastMatchString(), b); conf.setProperty(DDLGenConfiguration.SCHEMA_NAME_KEY, ""); - ddl = _generator.getSchema().toCreateDDL(); + ddl = generate(SCHEMA); b = _expected.match(_engine, 1, ddl, new String[] {}); assertTrue("Generated DDL: " + ddl + "\n" @@ -855,7 +860,7 @@ try { loadData("index_creation.xml"); - String ddl = _generator.generateIndex(); + String ddl = generate(INDEX); boolean b = _expected.match(_engine, ddl); assertTrue("Generated DDL: " + ddl + "\n" @@ -865,5 +870,43 @@ } } + public static final String CREATE = "create"; + public static final String DROP = "drop"; + public static final String PRIMARY_KEY = "primaryKey"; + public static final String KEY_GENERATOR = "keyGenerator"; + public static final String FOREIGN_KEY = "foreignKey"; + public static final String SCHEMA = "schema"; + public static final String INDEX = "index"; + /** + * @param by by ?. + * @return string + * @throws GeneratorException + */ + protected final String generate(final String by) throws GeneratorException { + StringWriter sw = new StringWriter(); + DDLWriter writer = new DDLWriter(new PrintWriter(sw)); + + if (CREATE.equalsIgnoreCase(by)) { + _generator.generateCreate(writer); + } else if (DROP.equalsIgnoreCase(by)) { + _generator.generateDrop(writer); + } else if (PRIMARY_KEY.equalsIgnoreCase(by)) { + _generator.generatePrimaryKey(writer); + } else if (KEY_GENERATOR.equalsIgnoreCase(by)) { + _generator.generateKeyGenerator(writer); + } else if (FOREIGN_KEY.equalsIgnoreCase(by)) { + _generator.generateForeignKey(writer); + } else if (SCHEMA.equalsIgnoreCase(by)) { + _generator.getSchema().toCreateDDL(writer); + } else if (INDEX.equalsIgnoreCase(by)) { + _generator.generateIndex(writer); + } + + writer.flush(); + String r = sw.getBuffer().toString(); + writer.close(); + return r; + + } //-------------------------------------------------------------------------- } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/engine/derby/DerbyGeneratorTest.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/engine/derby/DerbyGeneratorTest.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/engine/derby/DerbyGeneratorTest.java (working copy) @@ -124,7 +124,7 @@ try { loadData("single_field_for_all.xml"); - String ddl = getGenerator().generateCreate(); + String ddl = generate(CREATE); DDLGenConfiguration conf = getGenerator().getConfiguration(); Object[] params = new Object[] { Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/engine/db2/Db2GeneratorTest.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/engine/db2/Db2GeneratorTest.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/test/java/org/castor/ddlgen/engine/db2/Db2GeneratorTest.java (working copy) @@ -128,7 +128,7 @@ loadData("single_field_for_all.xml"); try { - getGenerator().generateCreate(); + generate(CREATE); fail("bit type is not supported, expected an exception"); } catch (GeneratorException e) { assertTrue(true); @@ -145,7 +145,7 @@ try { loadData("single_field_except_bit.xml"); - String ddl = getGenerator().generateCreate(); + String ddl = generate(CREATE); DDLGenConfiguration conf = getGenerator().getConfiguration(); Object[] params = new Object[] { Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/DDLWriter.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/DDLWriter.java (revision 0) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/DDLWriter.java (revision 0) @@ -0,0 +1,548 @@ +/* + * Copyright 2007 Le Duc Bao + * + * 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.PrintWriter; +import java.io.StringWriter; + +/** + * 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 + */ + +public class DDLWriter { + // ----------------variables--------------------------------------------- + + /** handle the current indent level, initialized by 0. */ + private int _indentLevel; + + /** A real print writer to be writed. */ + private PrintWriter _pw = null; + + /** indent text string, set to \t by default or load from configuration file + * by DEFAULT_INDENT. */ + private String _indentText = "\n"; + + /** + * newline flag, turn on for a new line is activated. + */ + private boolean _isNewline = true; + + /** + * enable/disable indent function. + */ + private boolean _isIndent = true; + + /** new line text string, set to \n by default or load from configuration file + * by DEFAULT_NEWLINE.*/ + private String _newline = null; + + /**char format defined by CHAR_FORMAT_KEY in configuration file.*/ + private String _charFormat = null; + + // -----------------constructors---------------------------------------- + + /** + * Constructor with printwriter and configuration file. This constructor is + * dedicated to Castor-DDL + * @param pw + * a Print Writer to be wrapped. + * @param conf Castor configuration + */ + public DDLWriter(final PrintWriter pw, final Configuration conf) { + _pw = pw; + initialize(conf); + } + + /** + * Constructor with default value. + * @param pw + * a Print Writer to be wrapped. + */ + public DDLWriter(final PrintWriter pw) { + _pw = pw; + } + + // -------------------------private methodes---------------------------- + /** + * get some configuration value from Castor config file. + * @param conf Castor configuration + */ + private void initialize(final Configuration conf) { + _indentLevel = 0; + _newline = conf.getStringValue( + DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); + _indentText = conf.getStringValue( + DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); + _charFormat = conf.getStringValue( + DDLGenConfiguration.CHAR_FORMAT_KEY, + DDLGenConfiguration.CHAR_FORMAT_SENSITIVE); + } + + // -------------------------public methods------------------------------ + + /** + * create a newline in output stream. + */ + public final void newline() { + _pw.print(_newline); + //the newline is turned on indicating that the next printing task will + //take in account the indent text. + _isNewline = true; + } + + /** + * write indent space. + * + */ + private void writeIndent() { + //the indent is effect only when the newline was previously called and + // indent flag is on + if (_isNewline && isIndent()) { + for (int i = 0; i < _indentLevel; i++) { + _pw.print(_indentText); + } + _isNewline = false; + } + } + + /** + * add one more indentText for a newline. + * @return a this writer + */ + public final DDLWriter indent() { + _indentLevel++; + return this; + } + + /** + * remove one indentText of a newline. + * @return a this writer + */ + public final DDLWriter unindent() { + _indentLevel = _indentLevel <= 0 ? 0 : _indentLevel - 1; + return this; + } + + // + /** + * write a string S into output stream. + * @param s + * string to be written. + * @return a this writer + */ + public final DDLWriter write(final String s) { + writeIndent(); + _pw.print(processCharacterFormat (s)); + return this; + } + + /** + * write an integer number into output stream. + * + * @param number + * number to be written. + * @return a this writer + */ + public final DDLWriter write(final int number) { + writeIndent(); + _pw.print(number); + return this; + } + + /** + * write a double number into output stream. + * + * @param number + * number to be written. + * @return a this writer + */ + public final DDLWriter write(final double number) { + writeIndent(); + _pw.print(number); + return this; + } + +// /** +// * write a character into output stream. +// * +// * @param c +// * character to be written. +// * @return a this writer +// */ +// public final DDLWriter write(final char c) { +// writeIndent(); +// _pw.print(c); +// return this; +// } + + /** + * write an array of character into output stream. + * + * @param c + * an array of character to be written. + * @return a this writer + */ + public final DDLWriter write(final char[] c) { + writeIndent(); + _pw.print(processCharacterFormat(new String (c))); + return this; + } + + /** + * write a character into output stream. + * + * @param l + * a number number to be written. + * @return a this writer + */ + public final DDLWriter write(final long l) { + writeIndent(); + _pw.print(l); + return this; + } + + /** + * write an object into output stream. + * + * @param o + * an object to be written. + * @return a this writer + */ + public final DDLWriter write(final Object o) { + writeIndent(); + _pw.print(processCharacterFormat (o)); + return this; + } + + /** + * A convenience method to write a formatted string to this writer using the + * specified format string and arguments. If automatic flushing is enabled, + * calls to this method will flush the output buffer. + * + * @param format + * A format string as described in Format string syntax. + * + * @param args + * Arguments referenced by the format specifiers in the format + * string. + * @return this writer + */ + public final DDLWriter write(final String format, final Object []args) { + writeIndent(); + String s = String.format(format, args); + _pw.print(processCharacterFormat (s)); + return this; + } + + /** + * write a string S into output stream. + * + * @param s + * string to be written. + * @return this writer + */ + public final DDLWriter writeln(final String s) { + writeIndent(); + _pw.print(processCharacterFormat (s)); + newline(); + return this; + } + + /** + * write an integer number into output stream. + * + * @param number + * number to be written. + * @return this writer + */ + public final DDLWriter writeln(final int number) { + writeIndent(); + _pw.print(number); + newline(); + return this; + } + + /** + * write a double number into output stream. + * + * @param number + * number to be written. + * @return this writer + */ + public final DDLWriter writeln(final double number) { + _pw.print(number); + newline(); + return this; + } + + /** + * write a character into output stream. + * + * @return this writer + */ + public final DDLWriter writeln() { + writeIndent(); + newline(); + return this; + } + +// /** +// * write a character into output stream. +// * +// * @param c +// * a character to be written. +// * @return this writer +// */ +// public final DDLWriter writeln(final char c) { +// writeIndent(); +// _pw.print(c); +// newline(); +// return this; +// } + + /** + * write an array of character into output stream. + * + * @param c + * a character to be written. + * @return this writer + */ + public final DDLWriter writeln(final char[] c) { + writeIndent(); + _pw.print(processCharacterFormat(new String (c))); + newline(); + return this; + } + + /** + * write a character into output stream. + * @param l + * a number to be written. + * @return this writer + */ + public final DDLWriter writeln(final long l) { + writeIndent(); + _pw.print(l); + newline(); + return this; + } + + /** + * write an object into output stream. + * @param o + * an object to be written. + * @return this writer + */ + public final DDLWriter writeln(final Object o) { + writeIndent(); + _pw.print(processCharacterFormat (o)); + newline(); + return this; + } + + /** + * A convenience method to write a formatted string to this writer using the + * specified format string and arguments. If automatic flushing is enabled, + * calls to this method will flush the output buffer. + * @param format + * A format string as described in Format string syntax. + * @param args + * Arguments referenced by the format specifiers in the format + * string. + * @return This writer + */ + public final DDLWriter writeln(final String format, + final Object []args) { + writeIndent(); + String s = String.format(format, args); + _pw.print(processCharacterFormat (s)); + newline(); + return this; + } + + /** + * flush. + * @throws IOException + */ + public final void flush() { + _pw.flush(); + } + + /** + * + * @return Returns the indent. + */ + public final boolean isIndent() { + return _isIndent; + } + + /** + * Set the indent by indent. + * @param indent toggle indent + */ + public final void setIndent(final boolean indent) { + this._isIndent = indent; + } + + /** + * + * @return Returns the indentText. + */ + public final String getIndentText() { + return _indentText; + } + + /** + * Set the indentText by IndentText. + * @param indentText indent text + */ + public final void setIndentText(final String indentText) { + this._indentText = indentText; + } + + /** + * + * @return Returns the newline. + */ + public final String getNewline() { + return _newline; + } + + /** + * Set the newline by _newline. + * @param newline newline + */ + public final void setNewline(final String newline) { + _newline = newline; + } + + /** + * process char format. + * @param s string to be processed. + * @return a formated string + */ + private String processCharacterFormat(final String s) { + if (s == null) { return null; } + if (DDLGenConfiguration.CHAR_FORMAT_LOWER.equalsIgnoreCase(_charFormat)) { + return s.toLowerCase(); + } else if (DDLGenConfiguration.CHAR_FORMAT_UPPER.equalsIgnoreCase(_charFormat)) { + return s.toUpperCase(); + } + return s; + } + + /** + * process char format. + * @param o string to be processed. + * @return a formated string + */ + private String processCharacterFormat(final Object o) { + if (o == null) { return null; } + String s = o.toString(); + + if (DDLGenConfiguration.CHAR_FORMAT_LOWER.equalsIgnoreCase(_charFormat)) { + return s.toLowerCase(); + } else if (DDLGenConfiguration.CHAR_FORMAT_UPPER.equalsIgnoreCase(_charFormat)) { + return s.toUpperCase(); + } + return s; + } + + //tester + /** + * main. + * @param argv argv + */ + public static void main(final String[] argv) { + StringWriter sw = new StringWriter(); + DDLWriter writer = new DDLWriter(new PrintWriter(sw)); + writer.setIndentText(" "); + writer.setNewline("\n"); + + writer.writeln(10); + writer.indent(); + writer.writeln(1).indent(); + writer.writeln("2").writeln("3").indent(); + writer.setIndent(false); + writer.writeln("xxx"); + writer.setIndent(true); + writer.writeln("4").unindent(); + writer.writeln("5").writeln("6").unindent(); + writer.writeln("7"); + + writer.flush(); + System.out.println(sw.getBuffer().toString()); + } + + /** + * write a field delimiter. + * @return thid ddl writer + */ + public final DDLWriter writeFieldDelimiter () { + write(DDLGenConfiguration.DEFAULT_FIELD_DELIMITER); + return this; + } + + /** + * write a statement delimiter. + * @return thid ddl writer + */ + public final DDLWriter writeStatementDelimiter () { + write(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); + return this; + } + /** + *close print writer. + */ + public final void close () { + if (_pw != null) { + _pw.close(); + } + } + } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultPrimaryKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultPrimaryKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultPrimaryKey.java (working copy) @@ -15,7 +15,7 @@ */ package org.castor.ddlgen.schemaobject; -import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; /** * Default primary key. @@ -31,19 +31,14 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() == 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + if (getFieldCount() == 0) { return; } - 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(); + writer.write("ALTER TABLE ").writeln(getTable().getName()); + writer.indent(); + writer.write("ADD PRIMARY KEY (").write(fieldNames()).write(')'); + writer.writeStatementDelimiter().writeln(); + writer.unindent(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/ForeignKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/ForeignKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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; /** @@ -215,8 +216,7 @@ /** * {@inheritDoc} */ - public final String toDropDDL() { - return ""; + public final void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultSchema.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultSchema.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,15 +31,13 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - return ""; + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} */ - public String toDropDDL() { - return ""; + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultForeignKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultForeignKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultForeignKey.java (working copy) @@ -15,7 +15,7 @@ */ package org.castor.ddlgen.schemaobject; -import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; /** * Default foreign key. @@ -31,22 +31,15 @@ /** * {@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) { + writer.write("ALTER TABLE ").writeln(getTable().getName()); + writer.indent(); + writer.write("ADD CONSTRAINT ").writeln(getName()); + writer.write("FOREIGN KEY (").write(fieldNames()).writeln(')'); + writer.write("REFERENCES ").write(getReferenceTable().getName()); + writer.write(" (").write(referencedFieldNames()).write(')'); + writer.writeStatementDelimiter().writeln(); + writer.unindent(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultIndex.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultIndex.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultIndex.java (working copy) @@ -15,7 +15,7 @@ */ package org.castor.ddlgen.schemaobject; -import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; /** * Default index. @@ -31,25 +31,19 @@ /** * {@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) { + writer.write("CREATE UNIQUE INDEX ").writeln(getName()); + writer.indent(); + writer.write("ON ").write(getTable().getName()); + writer.write(" (").write(fieldNames()).write(')'); + writer.writeStatementDelimiter().writeln(); + writer.unindent(); } /** * {@inheritDoc} */ - public String toDropDDL() { - return ""; + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Field.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Field.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,8 +184,7 @@ /** * {@inheritDoc} */ - public final String toDropDDL() { - return ""; + public final void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Table.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Table.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/Table.java (working copy) @@ -22,7 +22,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; /** @@ -218,23 +218,16 @@ /** * Concatenate all fields names delimited by line separator. - * - * @return Field names delimited by field delimiter and whitespace. + * @param writer DDL Writer. * @throws GeneratorException If generation of the script failed or is not supported. */ - protected final String fields() 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(); + protected final void fields(final DDLWriter writer) throws GeneratorException { + 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.writeFieldDelimiter(); } + getField(i).toCreateDDL(writer); } - return sb.toString(); + writer.unindent(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/SchemaObject.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/SchemaObject.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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; /** @@ -61,19 +62,17 @@ /** * Build create script for the schema object. - * - * @return Create script for the schema object. + * @param writer DDL writer. * @throws GeneratorException If generation of the script failed or is not supported. */ - String toCreateDDL() throws GeneratorException; + void toCreateDDL(DDLWriter writer) throws GeneratorException; /** * Build drop script for the schema object. - * - * @return Drop script for the schema object. + * @param writer DDL writer. * @throws GeneratorException If generation of the script failed or is not supported. */ - String toDropDDL() throws GeneratorException; + void toDropDDL(DDLWriter writer) throws GeneratorException; //-------------------------------------------------------------------------- } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultField.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultField.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,17 +33,15 @@ /** * {@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.write(getName()).write(" ").write(getType().toDDL(this)); + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } + writer.writeln(); + if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { String msg = "IDENTITY key generator is not supported for this database"; throw new GeneratorException(msg); } - - return sb.toString(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/PrimaryKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/PrimaryKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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. @@ -108,8 +109,7 @@ /** * {@inheritDoc} */ - public final String toDropDDL() { - return ""; + public final void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultTable.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultTable.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/schemaobject/DefaultTable.java (working copy) @@ -15,7 +15,7 @@ */ package org.castor.ddlgen.schemaobject; -import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; /** @@ -32,33 +32,17 @@ /** * {@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 final void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.write("CREATE TABLE ").write(getName()).writeln(" ("); + fields(writer); + writer.write(')').writeStatementDelimiter().writeln(); } /** * {@inheritDoc} */ - public final String toDropDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - StringBuffer sb = new StringBuffer(); - sb.append(newline).append(newline); - sb.append("DROP TABLE ").append(getName()); - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + public final void toDropDDL(final DDLWriter writer) { + writer.write("DROP TABLE ").write(getName()).writeStatementDelimiter().writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/AbstractGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/AbstractGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/AbstractGenerator.java (working copy) @@ -15,7 +15,6 @@ */ package org.castor.ddlgen; -import java.io.PrintStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; @@ -172,8 +171,8 @@ /** handle all resolving tables. */ private final Map _resolveTable = new HashMap(); - /** handle the writer for output. */ - private PrintStream _printer; +// /** handle the writer for output. */ +// private DDLWriter _writer; //-------------------------------------------------------------------------- @@ -290,30 +289,30 @@ return _schema; } - /** - * Set print stream. - * - * @param printer Print stream. - */ - public final void setPrinter(final PrintStream printer) { - _printer = printer; - } +// /** +// * Set print stream. +// * +// * @param printer Print stream. +// */ +// public final void setWriter(final DDLWriter printer) { +// _writer = printer; +// } - /** - * Get print stream. - * - * @return Print stream. - */ - public final PrintStream getPrinter() { - return _printer; - } +// /** +// * Get print stream. +// * +// * @return Print stream. +// */ +// public final DDLWriter getWriter() { +// return _writer; +// } //-------------------------------------------------------------------------- /** * {@inheritDoc} */ - public final void generateDDL() throws GeneratorException { + public final void generateDDL(final DDLWriter writer) throws GeneratorException { // Create schema. createSchema(); @@ -322,9 +321,9 @@ 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); } @@ -333,10 +332,10 @@ /** * Generating ddl grouped by ddl type of DDL (e.g DROP, CREATE TABLE, create * Primary key, create foreign key). - * + * @param writer ddl writer. * @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,42 +351,39 @@ 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); } } /** * Generate DDL for drop statement of table. - * - * @return DDL to drop table. + * @param writer ddl writer. * @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()); + table.toDropDDL(writer); } - return buff.toString(); } /** @@ -404,31 +400,27 @@ * ); * * - * @return DDL for create table. + * @param writer ddl writer. * @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()); + table.toCreateDDL(writer); } - return buff.toString(); } /** * Generate DDL for primany keys. * - * @return DDL for primary keys. + * @param writer ddl writer. * @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()); + table.getPrimaryKey().toCreateDDL(writer); } - return buff.toString(); } /** @@ -441,57 +433,52 @@ * ON UPDATE CASCADE; * * - * @return DDL for foreign keys. + * @param writer ddl writer. * @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(table, writer); } - return buff.toString(); } /** * Generate DDL for indices. * - * @return DDL for indices. + * @param writer ddl writer. * @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(table, writer); } - return buff.toString(); } /** * Generate DDL for key generators (sequence/trigger). * - * @return DDL for key generators. + * @param writer ddl writer. * @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) { table.getKeyGenerator().setTable(table); - buff.append(table.getKeyGenerator().toCreateDDL()); + table.getKeyGenerator().toCreateDDL(writer); } } - return buff.toString(); } /** * Generating ddl group by table. * + * @param writer ddl writer. * @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,26 +494,22 @@ 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); - 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,33 +517,30 @@ * Generate DDL for foreign key. * * @param table Table to generate DDL of foreign key for. - * @return DDL for foreign key. + * @param writer ddl writer. * @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()); + fk.toCreateDDL(writer); } - return buff.toString(); } /** * 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 ddl writer. * @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()); + index.toCreateDDL(writer); } - return buff.toString(); } //-------------------------------------------------------------------------- @@ -568,9 +548,9 @@ /** * Generate header comment. * - * @return Header comment. + * @param writer ddl writer. */ - public abstract String generateHeader(); + public abstract void generateHeader(final DDLWriter writer); //-------------------------------------------------------------------------- @@ -1025,24 +1005,24 @@ //-------------------------------------------------------------------------- - /** - * 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); - } - } - +// /** +// * 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)) { +// _writer.println(s.toLowerCase()); +// } else if (DDLGenConfiguration.CHAR_FORMAT_UPPER.equalsIgnoreCase(f)) { +// _writer.println(s.toUpperCase()); +// } else { +// _writer.println(s); +// } +// } +// //-------------------------------------------------------------------------- } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGeneratorFactory.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGeneratorFactory.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,17 +65,17 @@ * 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 DDL Writer. */ - 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. * * @param key SEQUENCE key generator to generate DDL for. - * @return Drop script of SEQUENCE key generator. + * @param writer DDL Writer. */ - public abstract String toDropDDL(final KeyGenerator key); + public abstract void toDropDDL(final KeyGenerator key, final DDLWriter writer); //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/HighLowKeyGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/HighLowKeyGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,12 +167,12 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { return ""; } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} */ - public String toDropDDL() { return ""; } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/MaxKeyGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/MaxKeyGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,12 +56,12 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { return ""; } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} */ - public String toDropDDL() { return ""; } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/UUIDKeyGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/UUIDKeyGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,12 +56,12 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { return ""; } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} */ - public String toDropDDL() { return ""; } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/SequenceKeyGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/IdentityKeyGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/keygenerator/IdentityKeyGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,12 +61,12 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { return ""; } + public void toCreateDDL(final DDLWriter writer) { } /** * {@inheritDoc} */ - public String toDropDDL() { return ""; } + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/Main.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/Main.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,8 @@ new MappingUnmarshaller().loadMappingOnly(mapping); generator.setMapping(mapping); - generator.setPrinter(new PrintStream(new FileOutputStream(ddlName))); - generator.generateDDL(); + DDLWriter writer = new DDLWriter(new PrintWriter(new FileOutputStream(ddlName))); + generator.generateDDL(writer); } catch (Exception ex) { LOG.error("Error: " + ex.getMessage(), ex); } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlField.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlField.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,15 @@ /** * {@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.write(getName()).write(" ").write(getType().toDDL(this)); if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" IDENTITY(1,1)"); + writer.write(" IDENTITY(1,1)"); } - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } - - return sb.toString(); + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } + writer.writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,23 +83,13 @@ /** * {@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( + public void generateHeader(final DDLWriter writer) { + writer.writeln("/*"); + writer.writeln(new java.util.Date()); + writer.writeln("Castor DDL Generator from mapping for Microsoft SQL Server"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - - return buff.toString(); + writer.writeln("*/"); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlPrimaryKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlPrimaryKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mssql/MssqlPrimaryKey.java (working copy) @@ -15,7 +15,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 +32,14 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() <= 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + if (getFieldCount() <= 0) { return; } - 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(); + writer.write("ALTER TABLE ").write(getTable().getName()); + writer.indent(); + writer.write("ADD CONSTRAINT ").writeln(getName()); + writer.write("PRIMARY KEY (").write(fieldNames()).write(')'); + writer.writeStatementDelimiter().writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlSequenceKeyGeneratorFactory.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlSequenceKeyGeneratorFactory.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,28 +35,20 @@ /** * {@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()); 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); + writer.write("CREATE SEQUENCE ").writeln(sequenceName); + writer.indent(); + writer.write(" INCREMENT 1 ").write("MAXVALUE "). + write(Integer.MAX_VALUE).write(" START 1"); + writer.writeStatementDelimiter().writeln(); - 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); - if (sequenceKey.isTrigger()) { String triggerName = null; if (sequenceName.matches(".*SEQ.*")) { @@ -64,7 +57,7 @@ triggerName = "TRG" + sequenceName; } - String triggerTemp = conf.getStringValue( + String triggerTemp = key.getConfiguration().getStringValue( DDLGenConfiguration.TRIGGER_TEMPLATE_KEY, ""); triggerTemp = triggerTemp.replaceAll("", triggerName); @@ -72,18 +65,14 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + writer.writeln(triggerTemp); } - - return buff.toString(); + writer.unindent(); } /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlField.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlField.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,23 +34,21 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - StringBuffer sb = new StringBuffer(); - sb.append(getName()).append(" "); + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { + writer.write(getName()).write(" "); if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { if ("integer".equalsIgnoreCase(getType().getSqlType())) { - sb.append("SERIAL"); + writer.write("SERIAL"); } else { - sb.append("BIGSERIAL"); + writer.write("BIGSERIAL"); } } else { - sb.append(getType().toDDL(this)); + writer.write(getType().toDDL(this)); } - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } - - return sb.toString(); + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } + writer.writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/postgresql/PostgresqlGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,15 +83,11 @@ /** * {@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( + public void generateHeader(final DDLWriter writer) { + writer.write("-- ").writeln(new java.util.Date()); + writer.writeln("-- Castor DDL Generator from mapping for PostgreSQL"); + writer.write("-- ").writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - return buff.toString(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBasePrimaryKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBasePrimaryKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBasePrimaryKey.java (working copy) @@ -15,7 +15,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 +32,14 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() <= 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + if (getFieldCount() <= 0) { return; } - 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(); + writer.write("ALTER TABLE ").writeln(getTable().getName()); + writer.indent(); + writer.write("ADD CONSTRAINT ").writeln(getName()); + writer.write("PRIMARY KEY (").write(fieldNames()).write(')'); + writer.writeStatementDelimiter().writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseField.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseField.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,15 @@ /** * {@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.write(getName()).write(" ").write(getType().toDDL(this)); + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" IDENTITY(1,1)"); + writer.write(" IDENTITY(1,1)"); } - return sb.toString(); + writer.writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/pointbase/PointBaseGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +83,13 @@ /** * {@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( + public void generateHeader(final DDLWriter writer) { + writer.writeln("/*"); + writer.writeln(new java.util.Date()); + writer.writeln("Castor DDL Generator from mapping for PointBase"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + writer.writeln("*/"); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyField.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyField.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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.write(getName()).write(" ").write(getType().toDDL(this)); + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" GENERATED BY DEFAULT AS IDENTITY "); - sb.append("(START WITH 1, INCREMENT BY 1)"); + writer.write(" GENERATED BY DEFAULT AS IDENTITY "); + writer.write("(START WITH 1, INCREMENT BY 1)"); } - return sb.toString(); + writer.writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/derby/DerbyGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,16 +83,15 @@ /** * {@inheritDoc} */ - public String generateHeader() { - StringBuffer buff = new StringBuffer("/*"); - buff.append(new java.util.Date()); - buff.append("\n"); + public void generateHeader(final DDLWriter writer) { + writer.writeln("/*"); + writer.writeln(new java.util.Date()); + writer.writeln("\n"); - buff.append("Castor DDL Generator from mapping for Derby"); - buff.append(getConfiguration().getStringValue( + writer.writeln("Castor DDL Generator from mapping for Derby"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append("*/"); - return buff.toString(); + writer.writeln("*/"); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlSchema.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlSchema.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlSchema.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.engine.mysql; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.Schema; /** @@ -32,26 +33,25 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { + public void toCreateDDL(final DDLWriter writer) { if (!getConfiguration().getBoolValue( DDLGenConfiguration.GENERATE_DDL_FOR_SCHEMA_KEY, true)) { - return ""; + return; } String schema = getConfiguration().getStringValue( DDLGenConfiguration.SCHEMA_NAME_KEY, ""); if (schema == null || "".equals(schema)) { - return ""; + return; } - return "USE " + schema + ";"; + writer.write("USE ").write(schema).writeln(";"); } /** * {@inheritDoc} */ - public String toDropDDL() { - return ""; + public void toDropDDL(final DDLWriter writer) { } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlForeignKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlForeignKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlForeignKey.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.engine.mysql; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.schemaobject.ForeignKey; /** @@ -32,39 +33,30 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); + public void toCreateDDL(final DDLWriter writer) { + writer.write("ALTER TABLE ").writeln(getTable().getName()); + writer.indent(); + writer.write("ADD CONSTRAINT ").writeln(getName()); + writer.write("FOREIGN KEY ").write(getName()); + writer.write(" (").writeln(fieldNames()).writeln(')'); + writer.write("REFERENCES ").write(getReferenceTable().getName()); + writer.write(" (").write(referencedFieldNames()).writeln(')'); - 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(')'); - // 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); + writer.write("ON DELETE ").writeln(opt); } opt = getConfiguration().getStringValue( DDLGenConfiguration.FOREIGN_KEY_ON_UPDATE_KEY, null); if (opt != null && !"".equals(opt)) { - sb.append(newline); - sb.append("ON UPDATE ").append(opt); + writer.write("ON UPDATE ").writeln(opt); } - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + writer.writeStatementDelimiter().writeln(); + writer.unindent(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlField.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlField.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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.write(getName()).write(" ").write(getType().toDDL(this)); if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" AUTO_INCREMENT"); + writer.write(" AUTO_INCREMENT"); } - if (isIdentity() || isRequired()) { sb.append(" NOT NULL"); } + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } - return sb.toString(); + writer.writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,19 +83,12 @@ /** * {@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( + public void generateHeader(final DDLWriter writer) { + writer.writeln("#"); + writer.writeln(new java.util.Date()); + writer.writeln("# Castor DDL Generator from _mapping"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - return buff.toString(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlTable.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlTable.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/mysql/MysqlTable.java (working copy) @@ -16,6 +16,7 @@ package org.castor.ddlgen.engine.mysql; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.GeneratorException; import org.castor.ddlgen.schemaobject.Table; @@ -33,38 +34,25 @@ /** * {@inheritDoc} */ - public String toCreateDDL() throws GeneratorException { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); + public void toCreateDDL(final DDLWriter writer) throws GeneratorException { 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(')'); + writer.write("CREATE TABLE ").write(getName()).writeln(" ("); + fields(writer); + writer.write(')'); if ((engine != null) && !"".equals(engine)) { - sb.append(" ENGINE=").append(engine); + writer.write(" ENGINE=").write(engine); } - sb.append(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); - return sb.toString(); + writer.writeln(DDLGenConfiguration.DEFAULT_STATEMENT_DELIMITER); } /** * {@inheritDoc} */ - public String toDropDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - 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(); + public void toDropDDL(final DDLWriter writer) { + writer.write("DROP TABLE IF EXISTS ").write(getName()); + writer.writeStatementDelimiter().writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleSequenceKeyGeneratorFactory.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleSequenceKeyGeneratorFactory.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,9 +35,9 @@ /** * {@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(); @@ -45,19 +46,12 @@ 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); + writer.write("CREATE SEQUENCE ").writeln(sequenceName); + writer.indent(); + writer.write("MAXVALUE ").writeln(Integer.MAX_VALUE); + writer.write("INCREMENT BY 1 START WITH 1"); + writer.writeStatementDelimiter().writeln(); - 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); - if (sequenceKey.isTrigger()) { String triggerName = null; if (sequenceName.matches(".*SEQ.*")) { @@ -73,18 +67,14 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + writer.write(triggerTemp); } - - return buff.toString(); + writer.unindent(); } /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/oracle/OracleGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +83,13 @@ /** * {@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( + public void generateHeader(final DDLWriter writer) { + writer.writeln("/*"); + writer.writeln(new java.util.Date()); + writer.writeln("Castor DDL Generator from mapping for Oracle"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + writer.writeln("*/"); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseField.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseField.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,14 @@ /** * {@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.write(getName()).write(" ").write(getType().toDDL(this)); + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" IDENTITY"); + writer.write(" IDENTITY"); } - - return sb.toString(); + writer.writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sybase/SybaseGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +83,13 @@ /** * {@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( + public void generateHeader(final DDLWriter writer) { + writer.writeln("/*"); + writer.writeln(new java.util.Date()); + writer.writeln("Castor DDL Generator from mapping for Sybase"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + writer.writeln("*/"); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2PrimaryKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2PrimaryKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2PrimaryKey.java (working copy) @@ -15,7 +15,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 +32,15 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() <= 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + if (getFieldCount() <= 0) { return; } - 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(); + writer.write("ALTER TABLE ").writeln(getTable().getName()); + writer.indent(); + writer.write("ADD CONSTRAINT ").writeln(getName()); + writer.write("PRIMARY KEY (").write(fieldNames()).write(')'); + writer.writeStatementDelimiter().writeln(); + writer.unindent(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2SequenceKeyGeneratorFactory.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2SequenceKeyGeneratorFactory.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,28 +35,20 @@ /** * {@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(), new Object[]{tableName, pkList}); - String newline = conf.getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = conf.getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); + writer.write("CREATE SEQUENCE AS INTEGER ").writeln(sequenceName); + writer.indent(); + writer.writeln("START WITH 1 INCREMENT BY 1"); + writer.write("MAXVALUE ").write(Integer.MAX_VALUE); + writer.writeStatementDelimiter().writeln(); - 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); - if (sequenceKey.isTrigger()) { // refer to http://publib.boulder.ibm.com/infocenter/db2luw/v8/index. // jsp?topic=/com.ibm.db2.udb.doc/admin/r0000931.htm @@ -75,18 +68,13 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + writer.writeln(triggerTemp); } - - return buff.toString(); } /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Field.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Field.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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.write(getName()).write(" ").write(getType().toDDL(this)); + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" GENERATED BY DEFAULT AS IDENTITY "); - sb.append("START WITH 1 INCREMENT BY 1"); + writer.write(" GENERATED BY DEFAULT AS IDENTITY "); + writer.write("START WITH 1 INCREMENT BY 1"); } - return sb.toString(); + writer.writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Generator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Generator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/db2/Db2Generator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +83,13 @@ /** * {@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 DB2"); - buff.append(newline); - buff.append(getConfiguration().getStringValue( + public void generateHeader(final DDLWriter writer) { + writer.writeln("/*"); + writer.writeln(new java.util.Date()); + writer.writeln("Castor DDL Generator from mapping for DB2"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + writer.writeln("*/"); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlTable.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlTable.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlTable.java (working copy) @@ -15,7 +15,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,33 +33,19 @@ /** * {@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 { + writer.write("CREATE TABLE ").write(getName()).writeln(" ("); + fields(writer); + writer.write(')'); + writer.writeStatementDelimiter().writeln(); } /** * {@inheritDoc} */ - public String toDropDDL() { - String newline = getConfiguration().getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - - 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(); + public void toDropDDL(final DDLWriter writer) { + writer.write("DROP TABLE IF EXISTS ").write(getName()); + writer.writeStatementDelimiter().writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlPrimaryKey.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlPrimaryKey.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlPrimaryKey.java (working copy) @@ -15,7 +15,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 +32,14 @@ /** * {@inheritDoc} */ - public String toCreateDDL() { - if (getFieldCount() <= 0) { return ""; } + public void toCreateDDL(final DDLWriter writer) { + if (getFieldCount() <= 0) { return; } - 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(); + writer.write("ALTER TABLE ").write(getTable().getName()); + writer.indent(); + writer.write("ADD CONSTRAINT ").writeln(getName()); + writer.write("PRIMARY KEY (").write(fieldNames()).write(')'); + writer.writeStatementDelimiter().writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlSequenceKeyGeneratorFactory.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlSequenceKeyGeneratorFactory.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,26 +35,19 @@ /** * {@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(), new Object[]{tableName, pkList}); - String newline = conf.getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = conf.getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); + writer.write("CREATE SEQUENCE ").write(sequenceName).writeln(" AS INTEGER"); + writer.indent(); + writer.write("START WITH 1 INCREMENT BY 1"); + writer.writeStatementDelimiter().writeln(); - 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); - if (sequenceKey.isTrigger()) { String pkTypeList = toPrimaryKeyTypeList(key.getTable()); String triggerName = null; @@ -71,18 +65,13 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + writer.writeln(triggerTemp); } - - return buff.toString(); } /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { } } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlField.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlField.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,15 @@ /** * {@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.write(getName()).write(" ").write(getType().toDDL(this)); + if (isIdentity() || isRequired()) { writer.write(" NOT NULL"); } if (isIdentity() && (getKeyGenerator() instanceof IdentityKeyGenerator)) { - sb.append(" IDENTITY"); + writer.write(" IDENTITY"); } - return sb.toString(); + writer.writeln(); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/hsql/HsqlGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +83,13 @@ /** * {@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( + public void generateHeader(final DDLWriter writer) { + writer.writeln("/*"); + writer.writeln(new java.util.Date()); + writer.writeln("Castor DDL Generator from mapping for HSQL"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + writer.writeln("*/"); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbGenerator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbGenerator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbGenerator.java (working copy) @@ -17,6 +17,7 @@ import org.castor.ddlgen.AbstractGenerator; import org.castor.ddlgen.DDLGenConfiguration; +import org.castor.ddlgen.DDLWriter; import org.castor.ddlgen.MappingHelper; /** @@ -82,22 +83,13 @@ /** * {@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( + public void generateHeader(final DDLWriter writer) { + writer.writeln("/*"); + writer.writeln(new java.util.Date()); + writer.writeln("Castor DDL Generator from mapping for SapDB"); + writer.writeln(getConfiguration().getStringValue( DDLGenConfiguration.HEADER_COMMENT_KEY, "")); - buff.append(newline); - buff.append("*/"); - return buff.toString(); + writer.writeln("*/"); } //-------------------------------------------------------------------------- Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbSequenceKeyGeneratorFactory.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/engine/sapdb/SapdbSequenceKeyGeneratorFactory.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/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,28 +35,19 @@ /** * {@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(), new Object[]{tableName, pkList}); - String newline = conf.getStringValue( - DDLGenConfiguration.NEWLINE_KEY, DDLGenConfiguration.DEFAULT_NEWLINE); - String indent = conf.getStringValue( - DDLGenConfiguration.INDENT_KEY, DDLGenConfiguration.DEFAULT_INDENT); + writer.write("CREATE SEQUENCE ").writeln(sequenceName); + writer.indent(); + writer.writeln("INCREMENT BY 1 START WITH 1"); + writer.write("MAXVALUE ").writeln(Integer.MAX_VALUE).writeStatementDelimiter(); - 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); - if (sequenceKey.isTrigger()) { String pkTypeList = toPrimaryKeyTypeList(key.getTable()); String triggerName = null; @@ -73,18 +65,15 @@ triggerTemp = triggerTemp.replaceAll("", tableName); triggerTemp = triggerTemp.replaceAll("", pkList); triggerTemp = triggerTemp.replaceAll("", pkTypeList); - buff.append(newline); - buff.append(newline); - buff.append(triggerTemp); + writer.writeln(triggerTemp); } - - return buff.toString(); + writer.unindent(); } /** * {@inheritDoc} */ - public String toDropDDL(final KeyGenerator key) { - return ""; + public void toDropDDL(final KeyGenerator key, final DDLWriter writer) { + } } Index: D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/Generator.java =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/Generator.java (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/ddlgen/src/main/java/org/castor/ddlgen/Generator.java (working copy) @@ -15,8 +15,6 @@ */ package org.castor.ddlgen; -import java.io.PrintStream; - import org.exolab.castor.mapping.Mapping; /** @@ -82,21 +80,21 @@ */ void setKeyGenRegistry(KeyGeneratorRegistry keygenRegistry); - /** - * Set print stream for output. - * - * @param printer Print stream for output. - */ - void setPrinter(PrintStream printer); - +// /** +// * Set print stream for output. +// * +// * @param printer Print stream for output. +// */ +// void setPrinter(PrintStream printer); +// //-------------------------------------------------------------------------- /** * Generate DDL for a mapping document. - * + * @param writer ddl writer. * @throws GeneratorException If failed to generate DDL. */ - void generateDDL() throws GeneratorException; + void generateDDL(final DDLWriter writer) throws GeneratorException; //-------------------------------------------------------------------------- } Index: D:/projects/SoC/castor_dev/castor/trunk/.classpath =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/.classpath (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/.classpath (working copy) @@ -1,48 +1,13 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + Index: D:/projects/SoC/castor_dev/castor/trunk/.cvsignore =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/.cvsignore (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/.cvsignore (working copy) @@ -1,3 +1,4 @@ build dist +.classpath Index: D:/projects/SoC/castor_dev/castor/trunk/.settings/org.eclipse.jdt.core.prefs =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/.settings/org.eclipse.jdt.core.prefs (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/.settings/org.eclipse.jdt.core.prefs (working copy) @@ -1,4 +1,4 @@ -#Sat Oct 28 18:16:43 CEST 2006 +#Sun May 06 22:23:18 GMT+02:00 2007 eclipse.preferences.version=1 org.eclipse.jdt.core.codeComplete.argumentPrefixes= org.eclipse.jdt.core.codeComplete.argumentSuffixes= @@ -9,21 +9,21 @@ org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=s_ org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.3 +org.eclipse.jdt.core.compiler.compliance=1.4 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore +org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning org.eclipse.jdt.core.compiler.problem.autoboxing=ignore org.eclipse.jdt.core.compiler.problem.deprecation=warning org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning Index: D:/projects/SoC/castor_dev/castor/trunk/.settings/org.eclipse.jdt.ui.prefs =================================================================== --- D:/projects/SoC/castor_dev/castor/trunk/.settings/org.eclipse.jdt.ui.prefs (revision 6968) +++ D:/projects/SoC/castor_dev/castor/trunk/.settings/org.eclipse.jdt.ui.prefs (working copy) @@ -1,4 +1,4 @@ -#Sat Oct 28 17:56:07 CEST 2006 +#Tue Apr 24 21:50:19 GMT+02:00 2007 eclipse.preferences.version=1 internal.default.compliance=default org.eclipse.jdt.ui.exception.name=e @@ -9,3 +9,4 @@ org.eclipse.jdt.ui.keywordthis=false org.eclipse.jdt.ui.ondemandthreshold=99 org.eclipse.jdt.ui.overrideannotation=true +org.eclipse.jdt.ui.text.custom_code_templates=