package org.hibernate.test.type.contributor;
import java.util.Arrays;
import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.AbstractTypeDescriptor;
/**
* @author Vlad Mihalcea
*/
public class ArrayTypeDescriptor extends AbstractTypeDescriptor<Array> {
private static final String DELIMITER = ",";
public static final ArrayTypeDescriptor INSTANCE = new ArrayTypeDescriptor();
public ArrayTypeDescriptor() {
super( Array.class );
}
@Override
public String toString(Array value) {
StringBuilder builder = new StringBuilder();
for ( String token : value ) {
if ( builder.length() > 0 ) {
builder.append( DELIMITER );
}
builder.append( token );
}
return builder.toString();
}
@Override
public Array fromString(String string) {
if ( string == null || string.isEmpty() ) {
return null;
}
String[] tokens = string.split( DELIMITER );
Array array = new Array();
array.addAll( Arrays.asList(tokens) );
return array;
}
@SuppressWarnings({"unchecked"})
public <X> X unwrap(Array value, Class<X> type, WrapperOptions options) {
if ( value == null ) {
return null;
}
if ( Array.class.isAssignableFrom( type ) ) {
return (X) value;
}
if ( String.class.isAssignableFrom( type ) ) {
return (X) toString( value);
}
throw unknownUnwrap( type );
}
public <X> Array wrap(X value, WrapperOptions options) {
if ( value == null ) {
return null;
}
if ( String.class.isInstance( value ) ) {
return fromString( (String) value );
}
if ( Array.class.isInstance( value ) ) {
return (Array) value;
}
throw unknownWrap( value.getClass() );
}
}