|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.castor.ddlgen.AbstractGenerator
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);
| Field Summary |
| Fields inherited from interface org.castor.ddlgen.Generator |
GLOBAL_CONFIG_NAME, GLOBAL_CONFIG_PATH |
| Constructor Summary | |
protected |
AbstractGenerator(DDLGenConfiguration configuration)
Constructor for AbstractGenerator. |
| Method Summary | |
protected java.lang.String |
createForeignKeyDDL(Table table)
Generate DDL for foreign key. |
java.lang.String |
createIndex(Table table)
Generate DDL for indices of given table. |
void |
createSchema()
Extracting informations from mapping to schema, this is done by 3 steps. |
java.lang.String |
generateCreate()
Generate DDL for create statementof table. |
void |
generateDDL()
Generate DDL for a mapping document. |
java.lang.String |
generateDrop()
Generate DDL for drop statement of table. |
java.lang.String |
generateForeignKey()
Generate DDL for foreign keys. |
abstract java.lang.String |
generateHeader()
Generate header comment. |
java.lang.String |
generateIndex()
Generate DDL for indices. |
java.lang.String |
generateKeyGenerator()
Generate DDL for key generators (sequence/trigger). |
java.lang.String |
generatePrimaryKey()
Generate DDL for primany keys. |
DDLGenConfiguration |
getConfiguration()
Get configuration of generator. |
Mapping |
getMapping()
Get mapping document. |
MappingHelper |
getMappingHelper()
Get mapping helper. |
java.io.PrintStream |
getPrinter()
Get print stream. |
Schema |
getSchema()
Get schema. |
SchemaFactory |
getSchemaFactory()
Get schema factory. |
TypeMapper |
getTypeMapper()
Get type mapper. |
void |
setKeyGenRegistry(KeyGeneratorRegistry keyGenRegistry)
Set key generator registry. |
void |
setMapping(Mapping mapping)
Set mapping document. |
protected void |
setMappingHelper(MappingHelper mappingHelper)
Set mapping helper. |
void |
setPrinter(java.io.PrintStream printer)
Set print stream. |
protected void |
setSchemaFactory(SchemaFactory schemaFactory)
Set schema factory. |
void |
setTypeMapper(TypeMapper typeMapper)
Set type mapper. |
protected void |
write(java.lang.String s)
Write given string to print stream. |
| 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 Detail |
protected AbstractGenerator(DDLGenConfiguration configuration)
configuration - Configuration to use by the generator.| Method Detail |
public final DDLGenConfiguration getConfiguration()
public final void setKeyGenRegistry(KeyGeneratorRegistry keyGenRegistry)
setKeyGenRegistry in interface GeneratorkeyGenRegistry - Key generator registry.protected final void setMappingHelper(MappingHelper mappingHelper)
mappingHelper - Mapping helper.public final MappingHelper getMappingHelper()
public final void setTypeMapper(TypeMapper typeMapper)
typeMapper - Type mapper.public final TypeMapper getTypeMapper()
protected final void setSchemaFactory(SchemaFactory schemaFactory)
schemaFactory - Schema factory.public final SchemaFactory getSchemaFactory()
public final void setMapping(Mapping mapping)
setMapping in interface Generatormapping - Mapping document.public final Mapping getMapping()
public final Schema getSchema()
public final void setPrinter(java.io.PrintStream printer)
setPrinter in interface Generatorprinter - Print stream.public final java.io.PrintStream getPrinter()
public final void generateDDL()
throws GeneratorException
generateDDL in interface GeneratorGeneratorException - If failed to generate DDL.
public final java.lang.String generateDrop()
throws GeneratorException
GeneratorException - If failed to generate DDL.
public final java.lang.String generateCreate()
throws GeneratorException
CREATE TABLE prod ( id INTEGER NOT NULL, name CHAR(16) ); CREATE TABLE prod_detail ( id INTEGER NOT NULL, prod_id CHAR(16) );
GeneratorException - If failed to generate DDL.
public final java.lang.String generatePrimaryKey()
throws GeneratorException
GeneratorException - If failed to generate DDL.
public final java.lang.String generateForeignKey()
throws GeneratorException
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;
GeneratorException - If failed to generate DDL.
public final java.lang.String generateIndex()
throws GeneratorException
GeneratorException - If failed to generate DDL.
public final java.lang.String generateKeyGenerator()
throws GeneratorException
GeneratorException - If failed to generate DDL.
protected final java.lang.String createForeignKeyDDL(Table table)
throws GeneratorException
table - Table to generate DDL of foreign key for.
GeneratorException - If failed to generate DDL.
public final java.lang.String createIndex(Table table)
throws GeneratorException
table - Table to generate DDL of indices for.
GeneratorException - If failed to generate DDL.public abstract java.lang.String generateHeader()
public final void createSchema()
throws GeneratorException
GeneratorException - If failed to create schema objects.protected final void write(java.lang.String s)
s - String to write to print stream.
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||