Added patch by Joachim Van der Auwera to support package level annotations
[hibernate4-maven-plugin] / src / it / schemaexport-example / schemaexport-example-domain / src / main / java / de / test / schemaexport / domain / EnumUserType.java
1 package de.test.schemaexport.domain;
2
3 import org.hibernate.HibernateException;
4 import org.hibernate.engine.spi.SessionImplementor;
5 import org.hibernate.usertype.EnhancedUserType;
6 import org.hibernate.usertype.ParameterizedType;
7
8 import java.io.Serializable;
9 import java.sql.PreparedStatement;
10 import java.sql.ResultSet;
11 import java.sql.SQLException;
12 import java.sql.Types;
13 import java.util.Properties;
14
15 /**
16  * This Hibernate UserType is used to map JDK 5 Enums directly in a column.
17  * Define this UserType in your hbm.xml mapping file like the following example:
18  */
19 public class EnumUserType implements EnhancedUserType, ParameterizedType {
20
21     private Class<Enum> enumClass;
22
23     @Override
24     public void setParameterValues(Properties parameters) {
25         String enumClassName = parameters.getProperty("enumClassName");
26         try {
27             enumClass = (Class<Enum>) Class.forName(enumClassName);
28         } catch (ClassNotFoundException cnfe) {
29             throw new HibernateException("Enum class not found", cnfe);
30         }
31     }
32
33     @Override
34     public Object assemble(Serializable cached, Object owner) throws HibernateException {
35         return cached;
36     }
37
38     @Override
39     public Object deepCopy(Object value) throws HibernateException {
40         return value;
41     }
42
43     @Override
44     public Serializable disassemble(Object value) throws HibernateException {
45         return (Enum) value;
46     }
47
48     @Override
49     public boolean equals(Object x, Object y) throws HibernateException {
50         return x == y;
51     }
52
53     @Override
54     public int hashCode(Object x) throws HibernateException {
55         return x.hashCode();
56     }
57
58     @Override
59     public boolean isMutable() {
60         return false;
61     }
62
63     @Override
64     public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner)
65             throws HibernateException, SQLException {
66         String name = rs.getString(names[0]);
67         return rs.wasNull() ? null : Enum.valueOf(enumClass, name);
68     }
69
70     @Override
71     public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor sessionImplementor)
72             throws HibernateException, SQLException {
73         if (value == null) {
74             st.setNull(index, Types.VARCHAR);
75         } else {
76             st.setString(index, ((Enum) value).name());
77         }
78     }
79
80     @Override
81     public Object replace(Object original, Object target, Object owner) throws HibernateException {
82         return original;
83     }
84
85     @Override
86     public Class returnedClass() {
87         return enumClass;
88     }
89
90     @Override
91     public int[] sqlTypes() {
92         return new int[]{Types.VARCHAR};
93     }
94
95     @Override
96     public Object fromXMLString(String xmlValue) {
97         return Enum.valueOf(enumClass, xmlValue);
98     }
99
100     @Override
101     public String objectToSQLString(Object value) {
102         return '\'' + ((Enum) value).name() + '\'';
103     }
104
105     @Override
106     public String toXMLString(Object value) {
107         return ((Enum) value).name();
108     }
109
110 }