|
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 );
|