org.apache.openjpa.jdbc.meta
Class ReverseMappingTool

java.lang.Object
  extended by org.apache.openjpa.jdbc.meta.ReverseMappingTool
All Implemented Interfaces:
Cloneable, MetaDataModes

public class ReverseMappingTool
extends Object
implements MetaDataModes, Cloneable

Reverse-maps a schema into class mappings and the associated java code. Generates a Java code files for persistent classes and associated identity classes and metadata.

Author:
Abe White

Nested Class Summary
static class ReverseMappingTool.Flags
          Holder for run flags.
 
Field Summary
static String ACCESS_TYPE_FIELD
          Access type for generated source, defaults to field-based access.
static String ACCESS_TYPE_PROPERTY
           
static String LEVEL_CLASS
           
static String LEVEL_NONE
           
static String LEVEL_PACKAGE
           
static int TABLE_ASSOCIATION
          Association table.
static int TABLE_BASE
          Primary table for a new base class.
static int TABLE_NONE
          Unmapped table.
static int TABLE_SECONDARY
          Secondary table of an existing class.
static int TABLE_SECONDARY_OUTER
          Secondary table of an existing class.
static int TABLE_SUBCLASS
          Subclass table.
 
Fields inherited from interface org.apache.openjpa.meta.MetaDataModes
MODE_ALL, MODE_ANN_MAPPING, MODE_MAPPING, MODE_MAPPING_INIT, MODE_META, MODE_NONE, MODE_QUERY
 
Constructor Summary
ReverseMappingTool(JDBCConfiguration conf)
          Constructor.
 
Method Summary
 void addConstraints(ValueMapping vm)
          Add existing unique constraints and indexes to the given value.
 void addJoinConstraints(FieldMapping field)
          Add existing unique constraints and indexes to the given field's join.
 void buildAnnotations()
           
 Object clone()
          Return a new tool with the same settings as this one.
 Class generateClass(String name, Class parent)
          Generate a new class with the given name.
 String getAccessType()
          Whether to use field or property-based access on generated code.
 List getAnnotationsForMeta(Object meta)
          Returns a list of stringified annotations for specified meta.
 boolean getBlobAsObject()
          Whether to reverse-map blob columns as containing serialized Java objects, rather than the default of using a byte[] field.
 ClassMapping getClassMapping(Table table)
          Return the class mapping for the given table, or null if none.
 CodeFormat getCodeFormat()
          The code formatter for the generated Java code.
 JDBCConfiguration getConfiguration()
          Return the configuration provided on construction.
 ReverseCustomizer getCustomizer()
          Return the customizer in use, or null if none.
 boolean getDetachable()
          Whether to make generated classes detachable.
 File getDirectory()
          The file to output the generated code to, or null for the current directory.
 String getDiscriminatorStrategy()
          Default discriminator strategy for base class mappings.
 String getFieldName(String name, ClassMapping dec)
          Return a default Java identifier-formatted name for the given column/table name.
 Class getFieldType(Column col, boolean forceObject)
          Return the default field type for the given column.
 boolean getGenerateAnnotations()
          Whether to generate annotations along with generated code.
 String getIdentityClassSuffix()
          Suffix used to create application identity class name from a class name, or in the case of inner identity classes, the inner class name.
 boolean getInnerIdentityClasses()
          Whether or not to generate inner classes when creating application identity classes.
 boolean getInverseRelations()
          Whether to generate inverse 1-many/1-1 relations for all many-1/1-1 relations.
 Log getLog()
          Return the log to write to.
 ClassMapping[] getMappings()
          Return the generated mappings.
 boolean getNullableAsObject()
          Return whether even nullable columns will be mapped to wrappers rather than primitives.
 String getPackageName()
          Return the default package for the generated classes, or null if unset.
 boolean getPrimaryKeyOnJoin()
          Return true if join tables are allowed to have primary keys, false if all primary key tables will be mapped as persistent classes.
 MappingRepository getRepository()
          Return the mapping repository used to hold generated mappings.
 SchemaGroup getSchemaGroup()
          Return the schema group to reverse map.
 Properties getTypeMap()
          Map of JDBC-name to Java-type-name entries that allows customization of reverse mapping columns to field types.
 ForeignKey getUniqueForeignKey(Table table)
          If the given table has a single unique foreign key or a foreign key that matches the primary key, return it.
 boolean getUseBuiltinIdentityClass()
          Whether to use built in identity classes when possible.
 boolean getUseDataStoreIdentity()
          Whether to use datastore identity when possible.
 boolean getUseForeignKeyName()
          Return whether the foreign key name will be used to generate relation names.
 boolean getUseGenericCollections()
          Whether to use generic collections on one-to-many and many-to-many relations instead of untyped collections.
 boolean getUseSchemaName()
          Return true if the schema name will be included in the generated class name for each table.
 String getVersionStrategy()
          Default version strategy for base class mappings.
 boolean isBaseTable(Table table)
          Return whether the given table is a base class table.
 boolean isUnique(ForeignKey fk)
          Return whether the given foreign key is unique.
static void main(String[] args)
          Usage: java org.apache.openjpa.jdbc.meta.ReverseMappingTool [option]* <.schema file or resource>* Where the following options are recognized.
 ClassMapping newClassMapping(Class cls, Table table)
          Create a new class to be mapped to a table.
 FieldMapping newFieldMapping(String name, Class type, Column col, ForeignKey fk, ClassMapping dec)
          Create a field mapping for the given info, or return null if customizer rejects.
 List recordCode()
          Uses CodeGenerators to write the Java code for the generated mappings to the proper packages.
 List recordCode(Map output)
          Write the code for the tool.
 Collection recordMetaData(boolean perClass)
          Write the generated metadata to the proper packages.
 Collection recordMetaData(boolean perClass, Map output)
          Write the code for the tool.
(package private) static String replaceInvalidCharacters(String str)
          Replace characters not allowed in Java names with an underscore; package-private for testing.
 void run()
          Generate mappings and class code for the current schema group.
static boolean run(JDBCConfiguration conf, String[] args, Options opts)
          Run the tool.
static void run(JDBCConfiguration conf, String[] args, ReverseMappingTool.Flags flags, ClassLoader loader)
          Run the tool.
 void setAccessType(String accessType)
          Whether to use field or property-based access on generated code.
 void setBlobAsObject(boolean blobAsObj)
          Whether to reverse-map blob columns as containing serialized Java objects, rather than the default of using a byte[] field.
 void setCodeFormat(CodeFormat format)
          Set the code formatter for the generated Java code.
 void setCustomizer(ReverseCustomizer customizer)
          Set the customizer.
 void setDetachable(boolean detachable)
          Whether to make generated classes detachable.
 void setDirectory(File dir)
          The file to output the generated code to, or null for the current directory.
 void setDiscriminatorStrategy(String discStrat)
          Default discriminator strategy for base class mappings.
 void setGenerateAnnotations(boolean genAnnotations)
          Whether to generate annotations along with generated code.
 void setIdentityClassSuffix(String suffix)
          Suffix used to create application identity class name from a class name, or in the case of inner identity classes, the inner class name.
 void setInnerIdentityClasses(boolean inner)
          Whether or not to generate inner classes when creating application identity classes.
 void setInverseRelations(boolean inverse)
          Whether to generate inverse 1-many/1-1 relations for all many-1/1-1 relations.
 void setNullableAsObject(boolean nullAsObj)
          Set whether even nullable columns will be mapped to wrappers rather than primitives.
 void setPackageName(String packageName)
          Set the default package for the generated classes; use null to indicate no package.
 void setPrimaryKeyOnJoin(boolean pkOnJoin)
          Set to true if join tables are allowed to have primary keys, false if all primary key tables will be mapped as persistent classes.
 void setRepository(MappingRepository repos)
          Set the repository to use.
 void setSchemaGroup(SchemaGroup schema)
          Set the schema to reverse map.
 void setTypeMap(Properties typeMap)
          Map of JDBC-name to Java-type-name entries that allows customization of reverse mapping columns to field types.
 void setUseBuiltinIdentityClass(boolean builtin)
          Whether to use built in identity classes when possible.
 void setUseDataStoreIdentity(boolean datastore)
          Whether to use datastore identity when possible.
 void setUseForeignKeyName(boolean useFK)
          Set whether the foreign key name will be used to generate relation names.
 void setUseGenericCollections(boolean useGenericCollections)
          Whether to use generic collections on one-to-many and many-to-many relations instead of untyped collections.
 void setUseSchemaName(boolean useSchema)
          Set whether the schema name will be included in the generated class name for each table.
 void setVersionStrategy(String versionStrat)
          Default version strategy for base class mappings.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TABLE_NONE

public static final int TABLE_NONE
Unmapped table.

See Also:
Constant Field Values

TABLE_BASE

public static final int TABLE_BASE
Primary table for a new base class.

See Also:
Constant Field Values

TABLE_SECONDARY

public static final int TABLE_SECONDARY
Secondary table of an existing class. There is exactly one row in this table for each row in the primary table.

See Also:
Constant Field Values

TABLE_SECONDARY_OUTER

public static final int TABLE_SECONDARY_OUTER
Secondary table of an existing class. There is zero or one row in this table for each row in the primary table.

See Also:
Constant Field Values

TABLE_ASSOCIATION

public static final int TABLE_ASSOCIATION
Association table.

See Also:
Constant Field Values

TABLE_SUBCLASS

public static final int TABLE_SUBCLASS
Subclass table.

See Also:
Constant Field Values

LEVEL_NONE

public static final String LEVEL_NONE
See Also:
Constant Field Values

LEVEL_PACKAGE

public static final String LEVEL_PACKAGE
See Also:
Constant Field Values

LEVEL_CLASS

public static final String LEVEL_CLASS
See Also:
Constant Field Values

ACCESS_TYPE_FIELD

public static final String ACCESS_TYPE_FIELD
Access type for generated source, defaults to field-based access.

See Also:
Constant Field Values

ACCESS_TYPE_PROPERTY

public static final String ACCESS_TYPE_PROPERTY
See Also:
Constant Field Values
Constructor Detail

ReverseMappingTool

public ReverseMappingTool(JDBCConfiguration conf)
Constructor. Supply configuration.

Method Detail

getConfiguration

public JDBCConfiguration getConfiguration()
Return the configuration provided on construction.


getLog

public Log getLog()
Return the log to write to.


getPackageName

public String getPackageName()
Return the default package for the generated classes, or null if unset.


setPackageName

public void setPackageName(String packageName)
Set the default package for the generated classes; use null to indicate no package.


getDirectory

public File getDirectory()
The file to output the generated code to, or null for the current directory. If the directory matches the package, it will be used. Otherwise, the package structure will be created under this directory.


setDirectory

public void setDirectory(File dir)
The file to output the generated code to, or null for the current directory. If the directory matches the package, it will be used. Otherwise, the package structure will be created under this directory.


getUseSchemaName

public boolean getUseSchemaName()
Return true if the schema name will be included in the generated class name for each table. Defaults to false.


setUseSchemaName

public void setUseSchemaName(boolean useSchema)
Set whether the schema name will be included in the generated class name for each table. Defaults to false.


getUseForeignKeyName

public boolean getUseForeignKeyName()
Return whether the foreign key name will be used to generate relation names. Defaults to false.


setUseForeignKeyName

public void setUseForeignKeyName(boolean useFK)
Set whether the foreign key name will be used to generate relation names. Defaults to false.


getNullableAsObject

public boolean getNullableAsObject()
Return whether even nullable columns will be mapped to wrappers rather than primitives. Defaults to false.


setNullableAsObject

public void setNullableAsObject(boolean nullAsObj)
Set whether even nullable columns will be mapped to wrappers rather than primitives. Defaults to false.


getBlobAsObject

public boolean getBlobAsObject()
Whether to reverse-map blob columns as containing serialized Java objects, rather than the default of using a byte[] field.


setBlobAsObject

public void setBlobAsObject(boolean blobAsObj)
Whether to reverse-map blob columns as containing serialized Java objects, rather than the default of using a byte[] field.


getUseGenericCollections

public boolean getUseGenericCollections()
Whether to use generic collections on one-to-many and many-to-many relations instead of untyped collections.


setUseGenericCollections

public void setUseGenericCollections(boolean useGenericCollections)
Whether to use generic collections on one-to-many and many-to-many relations instead of untyped collections.


getTypeMap

public Properties getTypeMap()
Map of JDBC-name to Java-type-name entries that allows customization of reverse mapping columns to field types.


setTypeMap

public void setTypeMap(Properties typeMap)
Map of JDBC-name to Java-type-name entries that allows customization of reverse mapping columns to field types.


getPrimaryKeyOnJoin

public boolean getPrimaryKeyOnJoin()
Return true if join tables are allowed to have primary keys, false if all primary key tables will be mapped as persistent classes. Defaults to false.


setPrimaryKeyOnJoin

public void setPrimaryKeyOnJoin(boolean pkOnJoin)
Set to true if join tables are allowed to have primary keys, false if all primary key tables will be mapped as persistent classes. Defaults to false.


getUseDataStoreIdentity

public boolean getUseDataStoreIdentity()
Whether to use datastore identity when possible. Defaults to false.


setUseDataStoreIdentity

public void setUseDataStoreIdentity(boolean datastore)
Whether to use datastore identity when possible. Defaults to false.


getUseBuiltinIdentityClass

public boolean getUseBuiltinIdentityClass()
Whether to use built in identity classes when possible. Defaults to true.


setUseBuiltinIdentityClass

public void setUseBuiltinIdentityClass(boolean builtin)
Whether to use built in identity classes when possible. Defaults to true.


getInnerIdentityClasses

public boolean getInnerIdentityClasses()
Whether or not to generate inner classes when creating application identity classes.


setInnerIdentityClasses

public void setInnerIdentityClasses(boolean inner)
Whether or not to generate inner classes when creating application identity classes.


getIdentityClassSuffix

public String getIdentityClassSuffix()
Suffix used to create application identity class name from a class name, or in the case of inner identity classes, the inner class name.


setIdentityClassSuffix

public void setIdentityClassSuffix(String suffix)
Suffix used to create application identity class name from a class name, or in the case of inner identity classes, the inner class name.


getInverseRelations

public boolean getInverseRelations()
Whether to generate inverse 1-many/1-1 relations for all many-1/1-1 relations. Defaults to true.


setInverseRelations

public void setInverseRelations(boolean inverse)
Whether to generate inverse 1-many/1-1 relations for all many-1/1-1 relations. Defaults to true.


getDetachable

public boolean getDetachable()
Whether to make generated classes detachable. Defaults to false.


setDetachable

public void setDetachable(boolean detachable)
Whether to make generated classes detachable. Defaults to false.


getDiscriminatorStrategy

public String getDiscriminatorStrategy()
Default discriminator strategy for base class mappings.


setDiscriminatorStrategy

public void setDiscriminatorStrategy(String discStrat)
Default discriminator strategy for base class mappings.


getVersionStrategy

public String getVersionStrategy()
Default version strategy for base class mappings.


setVersionStrategy

public void setVersionStrategy(String versionStrat)
Default version strategy for base class mappings.


getGenerateAnnotations

public boolean getGenerateAnnotations()
Whether to generate annotations along with generated code. Defaults to false.


setGenerateAnnotations

public void setGenerateAnnotations(boolean genAnnotations)
Whether to generate annotations along with generated code. Defaults to false.


getAccessType

public String getAccessType()
Whether to use field or property-based access on generated code. Defaults to field-based access.


setAccessType

public void setAccessType(String accessType)
Whether to use field or property-based access on generated code. Defaults to field-based access.


getCodeFormat

public CodeFormat getCodeFormat()
The code formatter for the generated Java code.


setCodeFormat

public void setCodeFormat(CodeFormat format)
Set the code formatter for the generated Java code.


getCustomizer

public ReverseCustomizer getCustomizer()
Return the customizer in use, or null if none.


setCustomizer

public void setCustomizer(ReverseCustomizer customizer)
Set the customizer. The configuration on the customizer, if any, should already be set.


getRepository

public MappingRepository getRepository()
Return the mapping repository used to hold generated mappings. You can also use the repository to seed the schema group to generate classes from.


setRepository

public void setRepository(MappingRepository repos)
Set the repository to use.


getSchemaGroup

public SchemaGroup getSchemaGroup()
Return the schema group to reverse map. If none has been set, the schema will be generated from the database.


setSchemaGroup

public void setSchemaGroup(SchemaGroup schema)
Set the schema to reverse map.


getMappings

public ClassMapping[] getMappings()
Return the generated mappings.


run

public void run()
Generate mappings and class code for the current schema group.


recordCode

public List recordCode()
                throws IOException
Uses CodeGenerators to write the Java code for the generated mappings to the proper packages.

Returns:
a list of File instances that were written
Throws:
IOException

recordCode

public List recordCode(Map output)
                throws IOException
Write the code for the tool.

Parameters:
output - if null, then perform the write directly to the filesystem; otherwise, populate the specified map with keys as the generated ClassMapping and values as a String that contains the generated code
Returns:
a list of File instances that were written
Throws:
IOException

recordMetaData

public Collection recordMetaData(boolean perClass)
                          throws IOException
Write the generated metadata to the proper packages.

Returns:
the set of metadata Files that were written
Throws:
IOException

recordMetaData

public Collection recordMetaData(boolean perClass,
                                 Map output)
                          throws IOException
Write the code for the tool.

Parameters:
output - if null, then perform the write directly to the filesystem; otherwise, populate the specified map with keys as the generated ClassMapping and values as a String that contains the generated code
Returns:
the set of metadata Files that were written
Throws:
IOException

buildAnnotations

public void buildAnnotations()

getAnnotationsForMeta

public List getAnnotationsForMeta(Object meta)
Returns a list of stringified annotations for specified meta.


getClassMapping

public ClassMapping getClassMapping(Table table)
Return the class mapping for the given table, or null if none.


newClassMapping

public ClassMapping newClassMapping(Class cls,
                                    Table table)
Create a new class to be mapped to a table. The class will start out with a default application identity class set.


generateClass

public Class generateClass(String name,
                           Class parent)
Generate a new class with the given name. If a non-null parent class is given, it will be set as the superclass.


isUnique

public boolean isUnique(ForeignKey fk)
Return whether the given foreign key is unique.


getUniqueForeignKey

public ForeignKey getUniqueForeignKey(Table table)
If the given table has a single unique foreign key or a foreign key that matches the primary key, return it. Else return null.


addJoinConstraints

public void addJoinConstraints(FieldMapping field)
Add existing unique constraints and indexes to the given field's join.


addConstraints

public void addConstraints(ValueMapping vm)
Add existing unique constraints and indexes to the given value.


isBaseTable

public boolean isBaseTable(Table table)
Return whether the given table is a base class table.


newFieldMapping

public FieldMapping newFieldMapping(String name,
                                    Class type,
                                    Column col,
                                    ForeignKey fk,
                                    ClassMapping dec)
Create a field mapping for the given info, or return null if customizer rejects.


getFieldName

public String getFieldName(String name,
                           ClassMapping dec)
Return a default Java identifier-formatted name for the given column/table name.


replaceInvalidCharacters

static String replaceInvalidCharacters(String str)
Replace characters not allowed in Java names with an underscore; package-private for testing.


getFieldType

public Class getFieldType(Column col,
                          boolean forceObject)
Return the default field type for the given column.


clone

public Object clone()
Return a new tool with the same settings as this one. Used in workbench.

Overrides:
clone in class Object

main

public static void main(String[] args)
                 throws IOException,
                        SQLException
Usage: java org.apache.openjpa.jdbc.meta.ReverseMappingTool [option]* <.schema file or resource>* Where the following options are recognized. Each schema given as an argument will be reverse-mapped into persistent classes and associated metadata. If no arguments are given, the database schemas defined by the system configuration will be reverse-mapped.

Throws:
IOException
SQLException

run

public static boolean run(JDBCConfiguration conf,
                          String[] args,
                          Options opts)
                   throws IOException,
                          SQLException
Run the tool. Returns false if invalid options were given.

Throws:
IOException
SQLException
See Also:
main(java.lang.String[])

run

public static void run(JDBCConfiguration conf,
                       String[] args,
                       ReverseMappingTool.Flags flags,
                       ClassLoader loader)
                throws IOException,
                       SQLException
Run the tool.

Throws:
IOException
SQLException


Copyright © 2006-2012 Apache Software Foundation. All Rights Reserved.