Package org.castor.ddlgen
Class AbstractGenerator
java.lang.Object
org.castor.ddlgen.AbstractGenerator
- All Implemented Interfaces:
Generator
- Direct Known Subclasses:
Db2Generator
,DerbyGenerator
,HsqlGenerator
,MssqlGenerator
,MysqlGenerator
,OracleGenerator
,PointBaseGenerator
,PostgresqlGenerator
,SapdbGenerator
,SybaseGenerator
AbstractGenerator is the base class for various DDL generator of specific DB and
handles following tasks:
Extract information from Mapping to Schema
Loop through the schema and provide a skeleton for DDL creation
AbstractGenerator will automatically extract necessary information for DDL
creation. That information is handled by Schema.
To create new generator for a DBMS, you should:
Overwrite this class to create new generator for a DBMS.
If the syntax of DBMS is different to standard DDL syntax, you should
overwrite SchemaObject (Table, Field, KeyGenerator, Index, ForeignKey,...) classes.
The class SchemaObjectFactory who handles the SchemaObject creation must
be overwritten.
You must overwrite the TypeMapper if mapping between JDBC types and
specific DBMS’s types is different among various DBMS.
The example bellow shows how to create a generator for DB2:
Generator for DB2
public class Db2Generator extends AbstractGenerator { public Db2Generator(final String globConf, final String dbConf) throws GeneratorException { super(globConf, dbConf); setTypeMapper(new Db2TypeMapper(getConf())); } }TypeMapper for DB2
public final class Db2TypeMapper extends AbstractTypeMapper { public Db2TypeMapper(final Configuration conf) { super(conf); } protected void initialize(final Configuration conf) { // numeric types this.add(new NotSupportedType("bit")); LOG.warn("Db2 does not support 'TINY' type, use SMALLINT instead."); this.add(new NoParamType("tinyint", "SMALLINT")); this.add(new NoParamType("smallint", "SMALLINT")); this.add(new NoParamType("integer", "INTEGER")); this.add(new NoParamType("bigint", "BIGINT")); } }Field for DB2
public class Db2Field extends Field { public Db2Field() { super(); } public String toDDL() throws GeneratorException { StringBuffer buff = new StringBuffer(); buff.append(getName()).append(" "); buff.append(getType().toDDL(this)); if (isIdentity()) { buff.append(" NOT NULL"); } KeyGenerator keyGen = getKeyGenerator(); if (keyGen != null && isIdentity()) { if (KeyGenerator.IDENTITY_KEY.equalsIgnoreCase(keyGen.getName())) { buff.append(" GENERATED BY DEFAULT AS IDENTITY "). append("START WITH 1 INCREMENT BY 1"); } } return buff.toString(); } }Field for DB2
public class Db2SchemaFactory extends SchemaFactory { public Db2SchemaFactory() { super(); } public Field createField() { return new Db2Field(); } }The GeneratorFactory class handles the specific database generator creation. For example:
Generator generator = GeneratorFactory. createDDLGenerator(“mysql”, “ddl.properties”, “mysql.properties”);And to generate DDL, it should specify the printer and call generateDDL method.
generator.setPrinter(System.out); Mapping mapping = new Mapping(); mapping.loadMapping("mapping.xml"); generator.generateDDL(mapping);
- Since:
- 1.1
- Version:
- $Revision: 5951 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $
- Author:
- Le Duc Bao, Ralf Joachim
-
Field Summary
Fields inherited from interface org.castor.ddlgen.Generator
GLOBAL_CONFIG_NAME, GLOBAL_CONFIG_PATH
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AbstractGenerator
(DDLGenConfiguration configuration) Constructor for AbstractGenerator. -
Method Summary
Modifier and TypeMethodDescriptionprotected final void
createForeignKeyDDL
(Table table, DDLWriter writer) Generate DDL for foreign key.final void
createIndex
(Table table, DDLWriter writer) Generate DDL for indices of given table.final void
Extracting informations from mapping to schema, this is done by 3 steps.final void
generateCreate
(DDLWriter writer) Generate DDL for create statementof table.final void
generateDDL
(OutputStream output) Generate DDL for a mapping document.final void
generateDrop
(DDLWriter writer) Generate DDL for drop statement of table.final void
generateForeignKey
(DDLWriter writer) Generate DDL for foreign keys.abstract void
generateHeader
(DDLWriter writer) Generate header comment.final void
generateIndex
(DDLWriter writer) Generate DDL for indices.final void
generateKeyGenerator
(DDLWriter writer) Generate DDL for key generators (sequence/trigger).final void
generatePrimaryKey
(DDLWriter writer) Generate DDL for primany keys.final DDLGenConfiguration
Get configuration of generator.final Mapping
Get mapping document.final MappingHelper
Get mapping helper.final Schema
Get schema.final SchemaFactory
Get schema factory.final TypeMapper
Get type mapper.final void
setKeyGenRegistry
(KeyGeneratorRegistry keyGenRegistry) Set key generator registry.final void
setMapping
(Mapping mapping) Set mapping document.protected final void
setMappingHelper
(MappingHelper mappingHelper) Set mapping helper.protected final void
setSchemaFactory
(SchemaFactory schemaFactory) Set schema factory.final void
setTypeMapper
(TypeMapper typeMapper) Set type mapper.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.castor.ddlgen.Generator
getEngineConfigName, getEngineConfigPath, getEngineName, initialize
-
Constructor Details
-
AbstractGenerator
Constructor for AbstractGenerator.- Parameters:
configuration
- Configuration to use by the generator.
-
-
Method Details
-
getConfiguration
Get configuration of generator.- Returns:
- Configuration of generator.
-
setKeyGenRegistry
Set key generator registry.- Specified by:
setKeyGenRegistry
in interfaceGenerator
- Parameters:
keyGenRegistry
- Key generator registry.
-
setMappingHelper
Set mapping helper.- Parameters:
mappingHelper
- Mapping helper.
-
getMappingHelper
Get mapping helper.- Returns:
- Mapping helper.
-
setTypeMapper
Set type mapper.- Parameters:
typeMapper
- Type mapper.
-
getTypeMapper
Get type mapper.- Returns:
- Type mapper.
-
setSchemaFactory
Set schema factory.- Parameters:
schemaFactory
- Schema factory.
-
getSchemaFactory
Get schema factory.- Returns:
- Schema factory.
-
setMapping
Set mapping document.- Specified by:
setMapping
in interfaceGenerator
- Parameters:
mapping
- Mapping document.
-
getMapping
Get mapping document.- Returns:
- Mapping document.
-
getSchema
Get schema.- Returns:
- Schema
-
generateDDL
Generate DDL for a mapping document.- Specified by:
generateDDL
in interfaceGenerator
- Parameters:
output
- Output stream for output.- Throws:
GeneratorException
- If failed to generate DDL.
-
generateDrop
Generate DDL for drop statement of table.- Parameters:
writer
- DDLWriter to write schema objects to.- Throws:
GeneratorException
- If failed to generate DDL.
-
generateCreate
Generate DDL for create statementof table.CREATE TABLE prod ( id INTEGER NOT NULL, name CHAR(16) ); CREATE TABLE prod_detail ( id INTEGER NOT NULL, prod_id CHAR(16) );
- Parameters:
writer
- DDLWriter to write schema objects to.- Throws:
GeneratorException
- If failed to generate DDL.
-
generatePrimaryKey
Generate DDL for primany keys.- Parameters:
writer
- DDLWriter to write schema objects to.- Throws:
GeneratorException
- If failed to generate DDL.
-
generateForeignKey
Generate DDL for foreign keys.ALTER TABLE `prod_group` ADD CONSTRAINT `FK_prod_group_1` FOREIGN KEY `FK_prod_group_1` (`id`, `name`) REFERENCES `category` (`id`, `name`) ON DELETE SET NULL ON UPDATE CASCADE;
- Parameters:
writer
- DDLWriter to write schema objects to.- Throws:
GeneratorException
- If failed to generate DDL.
-
generateIndex
Generate DDL for indices.- Parameters:
writer
- DDLWriter to write schema objects to.- Throws:
GeneratorException
- If failed to generate DDL.
-
generateKeyGenerator
Generate DDL for key generators (sequence/trigger).- Parameters:
writer
- DDLWriter to write schema objects to.- Throws:
GeneratorException
- If failed to generate DDL.
-
createForeignKeyDDL
Generate DDL for foreign key.- Parameters:
table
- Table to generate DDL of foreign key for.writer
- DDLWriter to write schema objects to.- Throws:
GeneratorException
- If failed to generate DDL.
-
createIndex
Generate DDL for indices of given table.- Parameters:
table
- Table to generate DDL of indices for.writer
- DDLWriter to write schema objects to.- Throws:
GeneratorException
- If failed to generate DDL.
-
generateHeader
Generate header comment.- Parameters:
writer
- DDLWriter to write schema objects to.
-
createSchema
Extracting informations from mapping to schema, this is done by 3 steps.- Create key generators
- Create tables
- Create additional tables for many-many relations
- Throws:
GeneratorException
- If failed to create schema objects.
-