Skip to content

Instantly share code, notes, and snippets.

@gbadner
Created October 1, 2014 22:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gbadner/9ab8f91d227470175f33 to your computer and use it in GitHub Desktop.
Save gbadner/9ab8f91d227470175f33 to your computer and use it in GitHub Desktop.
NamingStrategyDelegator/NamingStrategyDelegate (not good names; need to change...)
/**
* 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