class DataTypeWrapper extends LiquibaseDataType {
	
	private static LiquibaseDataType stripWrappedDataType(LiquibaseDataType candidate) {<FILL_FUNCTION_BODY>}
	
	private final 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();
    }

    @Override
    public LoadDataChange.LOAD_DATA_TYPE getLoadTypeName() {
        return LoadDataChange.LOAD_DATA_TYPE.STRING;
    }

}

		
		if (candidate instanceof DataTypeWrapper) {
			
			// Strip off any wrapped data type
			
			return((DataTypeWrapper) candidate).getUnderlyingDataType();
		}
		
		return candidate; 
	
<methods>public void <init>() ,public void addParameter(java.lang.Object) ,public boolean equals(java.lang.Object) ,public void finishInitialization(java.lang.String) ,public java.lang.String getAdditionalInformation() ,public java.lang.String[] getAliases() ,public abstract liquibase.change.core.LoadDataChange.LOAD_DATA_TYPE getLoadTypeName() ,public int getMaxParameters(liquibase.database.Database) ,public int getMinParameters(liquibase.database.Database) ,public java.lang.String getName() ,public java.lang.Object[] getParameters() ,public int getPriority() ,public java.lang.String getRawDefinition() ,public int hashCode() ,public boolean isAutoIncrement() ,public java.lang.String objectToSql(java.lang.Object, liquibase.database.Database) ,public void setAdditionalInformation(java.lang.String) ,public java.lang.Object sqlToObject(java.lang.String, liquibase.database.Database) ,public boolean supports(liquibase.database.Database) ,public liquibase.datatype.DatabaseDataType toDatabaseDataType(liquibase.database.Database) ,public java.lang.String toString() ,public boolean validate(liquibase.database.Database) <variables>private java.lang.String additionalInformation,private final non-sealed java.lang.String[] aliases,private final non-sealed int maxParameters,private final non-sealed int minParameters,private final non-sealed java.lang.String name,private final List<java.lang.Object> parameters,private final non-sealed int priority,private java.lang.String rawDefinition