From: <hib...@li...> - 2006-08-08 17:12:28
|
Author: epbernard Date: 2006-08-08 13:12:21 -0400 (Tue, 08 Aug 2006) New Revision: 10232 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/type/EnumType.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java Log: ANN-409 enumtype implements EntancedType Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/type/EnumType.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/type/EnumType.java 2006-08-08 13:31:56 UTC (rev 10231) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/type/EnumType.java 2006-08-08 17:12:21 UTC (rev 10232) @@ -18,8 +18,8 @@ import org.apache.commons.logging.LogFactory; import org.hibernate.AssertionFailure; import org.hibernate.HibernateException; +import org.hibernate.usertype.EnhancedUserType; import org.hibernate.usertype.ParameterizedType; -import org.hibernate.usertype.UserType; import org.hibernate.util.ReflectHelper; import org.hibernate.util.StringHelper; @@ -30,7 +30,7 @@ * @author Emmanuel Bernard */ //TODO implements readobject/writeobject to recalculate the enumclasses -public class EnumType implements UserType, ParameterizedType, Serializable { +public class EnumType implements EnhancedUserType, ParameterizedType, Serializable { private static Log log = LogFactory.getLog( EnumType.class ); private static final boolean IS_TRACE_ENABLED; @@ -324,4 +324,46 @@ ois.defaultReadObject(); initEnumValue(); } + + public String objectToSQLString(Object value) { + boolean isOrdinal = isOrdinal( sqlType ); + if ( isOrdinal ) { + int ordinal = ( (Enum) value ).ordinal(); + return Integer.toString( ordinal ); + } + else { + return '\'' + ( (Enum) value ).name() + '\''; + } + } + + public String toXMLString(Object value) { + boolean isOrdinal = isOrdinal( sqlType ); + if ( isOrdinal ) { + int ordinal = ( (Enum) value ).ordinal(); + return Integer.toString( ordinal ); + } + else { + return ( (Enum) value ).name(); + } + } + + public Object fromXMLString(String xmlValue) { + try { + int ordinal = Integer.parseInt( xmlValue ); + Object[] values = enumValues.get( enumClass ); + if ( values == null ) throw new AssertionFailure( "enumValues not preprocessed: " + enumClass ); + if ( ordinal < 0 || ordinal >= values.length ) { + throw new IllegalArgumentException( "Unknown ordinal value for enum " + enumClass + ": " + ordinal ); + } + return values[ordinal]; + } + catch(NumberFormatException e) { + try { + return Enum.valueOf( enumClass, xmlValue ); + } + catch (IllegalArgumentException iae) { + throw new IllegalArgumentException( "Unknown name value for enum " + enumClass + ": " + xmlValue, iae ); + } + } + } } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java 2006-08-08 13:31:56 UTC (rev 10231) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java 2006-08-08 17:12:21 UTC (rev 10232) @@ -50,7 +50,12 @@ s = openSession(); tx = s.beginTransaction(); - bid = (Bid) s.get( Bid.class, bid.getId() ); + //bid = (Bid) s.get( Bid.class, bid.getId() ); + bid = (Bid)s.createQuery( "select b from Bid b where b.note = " + + Starred.class.getName() + ".OK and b.editorsNote = " + + Starred.class.getName() + ".GOOD and b.id = :id") + .setParameter( "id", bid.getId() ).uniqueResult(); + //testing constant value assertEquals( Starred.OK, bid.getNote() ); assertEquals( Starred.GOOD, bid.getEditorsNote() ); bid.setNote( null ); |