org.benow.repository.mapping
Class JSQLClassMapping

java.lang.Object
  extended by org.benow.java.mapping.ClassMappingImpl
      extended by org.benow.repository.mapping.JSQLClassMapping
All Implemented Interfaces:
org.benow.java.mapping.ClassMapping

public class JSQLClassMapping
extends org.benow.java.mapping.ClassMappingImpl

Wrapper representing sql entry in castor mapping. NOTE could have async notification for run-time modification

Author:
andy

Nested Class Summary
 
Nested classes/interfaces inherited from class org.benow.java.mapping.ClassMappingImpl
org.benow.java.mapping.ClassMappingImpl.Flatten
 
Field Summary
static java.lang.String COMMENT_CLASS_SCHEMA_START
           
 ca.reachable.sql.schema.Table table
           
 
Fields inherited from class org.benow.java.mapping.ClassMappingImpl
fieldMappingByName, fields, forClass, mapTo, pkgMapping, superClass
 
Constructor Summary
protected JSQLClassMapping(org.benow.java.mapping.PackageMapping pkgMapping, java.lang.Class forClass)
           
 
Method Summary
protected  boolean acceptField(java.lang.reflect.Field curr)
          in ClassSchemaInfo Create a diff between current schema and in db schema.
protected  void afterFieldLoad()
           
protected  void beforeFieldLoad()
           
protected  org.benow.java.mapping.FieldMappingImpl constructFieldMapping(java.lang.reflect.Field forField)
           
 org.benow.java.mapping.FieldMapping createFieldMapping(java.lang.reflect.Field forField)
           
 java.lang.Object createInstance()
           
 java.util.List<org.benow.java.mapping.FieldMapping> getCollectionFieldMappings()
           
 JSQLFieldMapping getFieldByMethod(java.lang.reflect.Method method)
           
 java.util.Collection<org.benow.java.mapping.FieldMapping> getFieldMappings()
           
 java.lang.Object getFieldValueByPath(java.lang.Object instance, java.lang.String currPath)
          Gets a value from an instance by the given path.
 JSQLFieldMapping getJSQLFieldMapping(java.lang.String name)
           
 java.util.List<JSQLFieldMapping> getJSQLFieldMappings()
           
 JSQLFieldMapping getKeyFieldMapping()
           
 ca.reachable.sql.schema.Schema getSchema()
           
 java.lang.String getSQLColumn(java.lang.String javaFieldName)
           
 java.lang.String getSQLGetFieldsSnippet()
           
 java.lang.String getSQLGetFieldsSnippet(java.lang.String tableAbbreviation)
           
 java.lang.String getSQLTableAbbreviation()
          Note that two classes with same starting letter with return same abbreviation.
 java.lang.String getSQLTableSnippet()
           
 java.lang.String getTableName()
           
 void init()
           
 void validateSchema(Transaction tx)
          Validates the schema required to store objects of specified class.
 
Methods inherited from class org.benow.java.mapping.ClassMappingImpl
addFieldMapping, afterCreateFieldMapping, compare, getCollectionTypeOverride, getFieldMapping, getFieldMappingQuiet, getFieldMappings, getFieldPaths, getForClass, getForClassAsString, getMapTo, getShortName, toString, validateSuperClass
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

COMMENT_CLASS_SCHEMA_START

public static final java.lang.String COMMENT_CLASS_SCHEMA_START
See Also:
Constant Field Values

table

public ca.reachable.sql.schema.Table table
Constructor Detail

JSQLClassMapping

protected JSQLClassMapping(org.benow.java.mapping.PackageMapping pkgMapping,
                           java.lang.Class forClass)
Method Detail

getTableName

public java.lang.String getTableName()

createInstance

public java.lang.Object createInstance()
                                throws java.lang.InstantiationException
Specified by:
createInstance in interface org.benow.java.mapping.ClassMapping
Overrides:
createInstance in class org.benow.java.mapping.ClassMappingImpl
Throws:
java.lang.InstantiationException

getCollectionFieldMappings

public java.util.List<org.benow.java.mapping.FieldMapping> getCollectionFieldMappings()

init

public void init()
Overrides:
init in class org.benow.java.mapping.ClassMappingImpl

acceptField

protected boolean acceptField(java.lang.reflect.Field curr)
in ClassSchemaInfo Create a diff between current schema and in db schema.

requires:

private void applySQL(ClassSchemaInfo info, String sql) throws IOException { File outFile = File.createTempFile(getForClass().getSimpleName() + "." + info.version + ".to." + version, ".sql"); Util.copy(new StringReader(sql), new FileWriter(outFile)); System.out.println("Generated sql for: " + forClass.getName() + " in " + outFile.getAbsolutePath()); try { File databaseFile = JDBCRepository.getDatabaseFile(); log.info("Applying sql to database: " + databaseFile.getAbsolutePath()); // NOTE could do remote databases // NOTE should be delegate. should handle mysql, etc ISQL isql = new ISQL(databaseFile.getAbsolutePath(), "localhost", "" + JDBCRepository.CFG_USER.getValue(), "" + JDBCRepository.CFG_PASSWORD.getValue()); isql.exec(outFile); log.info("Integrated schema into database for: " + getForClass().getName() + " from:" + outFile.getAbsolutePath()); outFile.delete(); return; } catch (ObjectRepositoryException e1) { log.warn("Database must be local"); } catch (InterruptedException e1) { log.warn("Error running isql", e1); } catch (IOException e1) { log.warn("Error running isql", e1); } log.info("Failed sql is in: " + outFile.getAbsolutePath()); }

Overrides:
acceptField in class org.benow.java.mapping.ClassMappingImpl

getFieldMappings

public java.util.Collection<org.benow.java.mapping.FieldMapping> getFieldMappings()
Specified by:
getFieldMappings in interface org.benow.java.mapping.ClassMapping
Overrides:
getFieldMappings in class org.benow.java.mapping.ClassMappingImpl

createFieldMapping

public org.benow.java.mapping.FieldMapping createFieldMapping(java.lang.reflect.Field forField)
Specified by:
createFieldMapping in interface org.benow.java.mapping.ClassMapping
Overrides:
createFieldMapping in class org.benow.java.mapping.ClassMappingImpl

beforeFieldLoad

protected void beforeFieldLoad()
Overrides:
beforeFieldLoad in class org.benow.java.mapping.ClassMappingImpl

afterFieldLoad

protected void afterFieldLoad()
Overrides:
afterFieldLoad in class org.benow.java.mapping.ClassMappingImpl

constructFieldMapping

protected org.benow.java.mapping.FieldMappingImpl constructFieldMapping(java.lang.reflect.Field forField)
Specified by:
constructFieldMapping in class org.benow.java.mapping.ClassMappingImpl

getFieldByMethod

public JSQLFieldMapping getFieldByMethod(java.lang.reflect.Method method)

getSQLTableAbbreviation

public java.lang.String getSQLTableAbbreviation()
Note that two classes with same starting letter with return same abbreviation. Manually create the query using getTableName() in such cases.

Returns:

getSQLGetFieldsSnippet

public java.lang.String getSQLGetFieldsSnippet()

getSQLGetFieldsSnippet

public java.lang.String getSQLGetFieldsSnippet(java.lang.String tableAbbreviation)

getSQLColumn

public java.lang.String getSQLColumn(java.lang.String javaFieldName)

getSQLTableSnippet

public java.lang.String getSQLTableSnippet()

getSchema

public ca.reachable.sql.schema.Schema getSchema()

validateSchema

public void validateSchema(Transaction tx)
Validates the schema required to store objects of specified class. Should be called before persisting, once called, will be skipped in future calls.

Parameters:
transaction -

getJSQLFieldMapping

public JSQLFieldMapping getJSQLFieldMapping(java.lang.String name)

getJSQLFieldMappings

public java.util.List<JSQLFieldMapping> getJSQLFieldMappings()

getKeyFieldMapping

public JSQLFieldMapping getKeyFieldMapping()

getFieldValueByPath

public java.lang.Object getFieldValueByPath(java.lang.Object instance,
                                            java.lang.String currPath)
Gets a value from an instance by the given path. Path may span objects, if fetching is implemented.

Paths are in xpath-like format, field1, field1/field2, etc

Parameters:
instance -
currPath -
Returns: