package liquibase.common.datatype; import liquibase.database.Database; import liquibase.datatype.DatabaseDataType; import liquibase.datatype.LiquibaseDataType; /** * A wrapper class for data types. * Wraps a LiquibaseDataType instance and replaces some of the * original data types with dbms-compatible ones. * * @author islavov */ public class DataTypeWrapper extends LiquibaseDataType { private static LiquibaseDataType stripWrappedDataType(LiquibaseDataType candidate) { if (candidate instanceof DataTypeWrapper) { // Strip off any wrapped data type return((DataTypeWrapper) candidate).getUnderlyingDataType(); } return candidate; } private LiquibaseDataType underlyingDataType; public LiquibaseDataType getUnderlyingDataType() { return underlyingDataType; } public DataTypeWrapper(LiquibaseDataType originalType) { super(stripWrappedDataType(originalType)); this.underlyingDataType = stripWrappedDataType(originalType); } @Override public String getName() { return underlyingDataType.getName(); } @Override public String[] getAliases() { return underlyingDataType.getAliases(); } @Override public int getPriority() { return underlyingDataType.getPriority(); } @Override public boolean supports(Database database) { return underlyingDataType.supports(database); } @Override public int getMinParameters(Database database) { return underlyingDataType.getMinParameters(database); } @Override public int getMaxParameters(Database database) { return underlyingDataType.getMaxParameters(database); } @Override public Object[] getParameters() { return underlyingDataType.getParameters(); } @Override public void addParameter(Object value) { this.underlyingDataType.addParameter(value); } @Override public boolean validate(Database database) { return underlyingDataType.validate(database); } @Override public DatabaseDataType toDatabaseDataType(Database database) { return underlyingDataType.toDatabaseDataType(database); } @Override public String objectToSql(Object value, Database database) { return underlyingDataType.objectToSql(value, database); } public Object stringToObject(String value, Database database) { return value; } @Override public String toString() { return underlyingDataType.toString(); } @Override public boolean equals(final Object o) { return o instanceof DataTypeWrapper && underlyingDataType.equals(((DataTypeWrapper)o).getUnderlyingDataType()); } @Override public int hashCode() { return toString().hashCode(); } }