Created
October 1, 2014 22:11
-
-
Save gbadner/9ab8f91d227470175f33 to your computer and use it in GitHub Desktop.
NamingStrategyDelegator/NamingStrategyDelegate (not good names; need to change...)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Provides access to the appropriate {@link NamingStrategyDelegate}. | |
* | |
* @author Gail Badner | |
*/ | |
public interface NamingStrategyDelegator { | |
public void injectNamingStrategy(NamingStrategy namingStrategy); | |
/** | |
* Returns the {@link org.hibernate.cfg.NamingStrategy}. | |
* | |
* @return the {@link org.hibernate.cfg.NamingStrategy}. | |
*/ | |
public NamingStrategy getNamingStrategy(); | |
/** | |
* Returns the appropriate {@link NamingStrategyDelegate}. | |
* | |
* @param isHbm - true, if {@link NamingStrategyDelegate} is to be used for a | |
* hibernate-specific (hbm.xml) mapping; false, otherwise. | |
* | |
* @return the appropriate {@link NamingStrategyDelegate} | |
*/ | |
public NamingStrategyDelegate getNamingStrategyDelegate(boolean isHbm); | |
} | |
public interface NamingStrategyDelegate { | |
public String classToTableName(String className); | |
public String propertyToColumnName(String propertyName); | |
/** | |
* Alter the table name given in the mapping document | |
* @param tableName a table name | |
* @return a table name | |
*/ | |
public String tableName(String tableName); | |
/** | |
* Alter the column name given in the mapping document | |
* @param columnName a column name | |
* @return a column name | |
*/ | |
public String columnName(String columnName); | |
public String elementCollectionTableName( | |
String ownerEntityName, | |
String ownerJpaEntityName, | |
String ownerEntityTable, | |
String propertyName); | |
public String elementCollectionForeignKeyColumnName( | |
String propertyName, | |
String propertyEntityName, | |
String propertyJpaEntityName, | |
String propertyTableName, | |
String referencedColumnName); | |
public String entityCollectionTableName( | |
String ownerEntityName, | |
String ownerJpaEntityName, | |
String ownerEntityTable, | |
String associatedEntityName, | |
String associatedJpaEntityName, | |
String associatedEntityTable, | |
String propertyName); | |
public String entityAssociationForeignKeyColumnName( | |
String propertyName, | |
String propertyEntityName, | |
String propertyJpaEntityName, | |
String propertyTableName, | |
String referencedColumnName); | |
public String joinKeyColumnName(String joinedColumn, String joinedTable); | |
public String logicalColumnName(String columnName, String propertyName); | |
public String logicalElementCollectionTableName( | |
String tableName, | |
String ownerEntityName, | |
String ownerJpaEntityName, | |
String ownerEntityTable, | |
String propertyName); | |
public String logicalEntityCollectionTableName( | |
String tableName, | |
String ownerEntityName, | |
String ownerJpaEntityName, | |
String ownerEntityTable, | |
String associatedEntityName, | |
String associatedJpaEntityName, | |
String associatedEntityTable, | |
String propertyName); | |
public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn); | |
static interface NamingStrategyDelegateContext { | |
NamingStrategy getNamingStrategy(); | |
} | |
} | |
public class DefaultNamingStrategyDelegator | |
implements NamingStrategyDelegator, NamingStrategyDelegate.NamingStrategyDelegateContext { | |
private NamingStrategy namingStrategy; | |
private final NamingStrategyDelegate hbmNamingStrategyDelegate; | |
private final NamingStrategyDelegate jpaNamingStrategyDelegate; | |
public DefaultNamingStrategyDelegator(NamingStrategy namingStrategy) { | |
this.namingStrategy = namingStrategy; | |
this.hbmNamingStrategyDelegate = new HbmNamingStrategyDelegate( this ); | |
this.jpaNamingStrategyDelegate = new JpaNamingStrategyDelegate( this ); | |
} | |
@Override | |
public void injectNamingStrategy(NamingStrategy namingStrategy) { | |
this.namingStrategy = namingStrategy; | |
} | |
public NamingStrategy getNamingStrategy() { | |
return namingStrategy; | |
} | |
@Override | |
public NamingStrategyDelegate getNamingStrategyDelegate(boolean isHbm) { | |
return isHbm ? | |
hbmNamingStrategyDelegate : | |
jpaNamingStrategyDelegate; | |
} | |
} | |
public class LegacyNamingStrategyDelegator implements NamingStrategyDelegator, NamingStrategyDelegate.NamingStrategyDelegateContext { | |
private NamingStrategy namingStrategy; | |
private final NamingStrategyDelegate hbmNamingStrategyDelegate; | |
private final NamingStrategyDelegate jpaNamingStrategyDelegate; | |
public LegacyNamingStrategyDelegator(NamingStrategy namingStrategy) { | |
this.namingStrategy = namingStrategy; | |
this.hbmNamingStrategyDelegate = new HbmNamingStrategyDelegate( this ); | |
this.jpaNamingStrategyDelegate = new LegacyNamingStrategyDelegate( this ); | |
} | |
@Override | |
public void injectNamingStrategy(NamingStrategy namingStrategy) { | |
this.namingStrategy = namingStrategy; | |
} | |
public NamingStrategy getNamingStrategy() { | |
return namingStrategy; | |
} | |
@Override | |
public NamingStrategyDelegate getNamingStrategyDelegate(boolean isHbm) { | |
return isHbm ? | |
hbmNamingStrategyDelegate : | |
jpaNamingStrategyDelegate; | |
} | |
private class LegacyNamingStrategyDelegate extends AbstractNamingStrategyDelegate { | |
LegacyNamingStrategyDelegate(NamingStrategyDelegateContext context) { | |
super( context ); | |
} | |
@Override | |
public String tableName(String tableName) { | |
return namingStrategy.tableName( tableName ); | |
} | |
@Override | |
public String columnName(String columnName) { | |
return namingStrategy.columnName( columnName ); | |
} | |
@Override | |
public String elementCollectionTableName( | |
String ownerEntityName, | |
String ownerJpaEntityName, | |
String ownerEntityTable, | |
String propertyNamePath) { | |
return namingStrategy.collectionTableName( | |
ownerEntityName, | |
StringHelper.unqualifyEntityName( ownerEntityName ), | |
null, | |
null, | |
propertyNamePath | |
); | |
} | |
@Override | |
public String elementCollectionForeignKeyColumnName( | |
String propertyName, | |
String propertyEntityName, | |
String propertyJpaEntityName, | |
String propertyTableName, | |
String referencedColumnName) { | |
return namingStrategy.foreignKeyColumnName( | |
propertyName, | |
propertyEntityName, | |
StringHelper.unqualifyEntityName( propertyEntityName ), | |
referencedColumnName | |
); | |
} | |
@Override | |
public String entityCollectionTableName( | |
String ownerEntityName, | |
String ownerJpaEntityName, | |
String ownerEntityTable, | |
String associatedEntityName, | |
String associatedJpaEntityName, | |
String associatedEntityTable, | |
String propertyNamePath) { | |
return namingStrategy.collectionTableName( | |
ownerEntityName, | |
ownerEntityTable, | |
associatedEntityName, | |
associatedEntityTable, | |
propertyNamePath | |
); | |
} | |
@Override | |
public String entityAssociationForeignKeyColumnName( | |
String propertyName, | |
String propertyEntityName, | |
String propertyJpaEntityName, | |
String propertyTableName, | |
String referencedColumnName) { | |
return namingStrategy.foreignKeyColumnName( | |
propertyName, | |
propertyEntityName, | |
propertyTableName, | |
referencedColumnName | |
); | |
} | |
@Override | |
public String logicalElementCollectionTableName( | |
String tableName, | |
String ownerEntityName, | |
String ownerJpaEntityName, | |
String ownerEntityTable, | |
String propertyName) { | |
return namingStrategy.logicalCollectionTableName( | |
tableName, | |
ownerEntityName == null ? null : StringHelper.unqualifyEntityName( ownerEntityName ), | |
null, | |
propertyName | |
); | |
} | |
@Override | |
public String logicalEntityCollectionTableName( | |
String tableName, | |
String ownerEntityName, | |
String ownerJpaEntityName, | |
String ownerEntityTable, | |
String associatedEntityName, | |
String associatedJpaEntityName, | |
String associatedEntityTable, | |
String propertyName) { | |
return namingStrategy.logicalCollectionTableName( | |
tableName, | |
ownerEntityTable, | |
associatedEntityTable, | |
propertyName | |
); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment