1 package org.splat.dal.bo.kernel;
5 * @author Daniel Brunier-Coulin
6 * @copyright OPEN CASCADE 2012
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;
15 import org.hibernate.HibernateException;
16 import org.hibernate.usertype.EnhancedUserType;
17 import org.hibernate.usertype.ParameterizedType;
18 import org.splat.common.Constants;
21 * Base class for persistent enumerations. <BR>
22 * Parameter enumClassName defines the enumeration implementation class in <BR>
23 * hibernate mapping like this:<BR>
25 * <typedef name="ProgressState" class="<i>org.splat.dal.bo.kernel.GenericEnumType</i>"><BR>
26 * <param name="<i>enumClassName</i>">org.splat.dal.bo.som.ProgressState</param><BR>
27 * </typedef><BR>
30 public class GenericEnumType implements EnhancedUserType, ParameterizedType {
33 * Enumeration implementation class.
35 @SuppressWarnings(Constants.UNCHECKED)
36 private transient Class<Enum> _enumClass;
41 * @see org.hibernate.usertype.ParameterizedType#setParameterValues(java.util.Properties)
43 @SuppressWarnings(Constants.UNCHECKED)
44 public void setParameterValues(final Properties parameters) {
45 String enumClassName = parameters.getProperty("enumClassName");
47 _enumClass = (Class<Enum>) Class.forName(enumClassName);
48 } catch (ClassNotFoundException cnfe) {
49 throw new HibernateException("Enum class not found", cnfe);
56 * @see org.hibernate.usertype.UserType#assemble(java.io.Serializable, java.lang.Object)
58 public Object assemble(final Serializable cached, final Object owner)
59 throws HibernateException {
66 * @see org.hibernate.usertype.UserType#deepCopy(java.lang.Object)
68 public Object deepCopy(final Object value) throws HibernateException {
75 * @see org.hibernate.usertype.UserType#disassemble(java.lang.Object)
77 @SuppressWarnings(Constants.UNCHECKED)
78 public Serializable disassemble(final Object value)
79 throws HibernateException {
86 * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object)
88 public boolean equals(final Object x, final Object y)
89 throws HibernateException {
96 * @see org.hibernate.usertype.UserType#hashCode(java.lang.Object)
98 public int hashCode(final Object x) throws HibernateException {
105 * @see org.hibernate.usertype.UserType#isMutable()
107 public boolean isMutable() {
114 * @see org.hibernate.usertype.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[], java.lang.Object)
116 @SuppressWarnings(Constants.UNCHECKED)
117 public Object nullSafeGet(final ResultSet rs, final String[] names,
118 final Object owner) throws HibernateException, SQLException {
121 String name = rs.getString(names[0]);
122 res = Enum.valueOf(_enumClass, name);
130 * @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int)
132 @SuppressWarnings(Constants.UNCHECKED)
133 public void nullSafeSet(final PreparedStatement st, final Object value,
134 final int index) throws HibernateException, SQLException {
136 st.setNull(index, Types.VARCHAR);
138 st.setString(index, ((Enum) value).name());
145 * @see org.hibernate.usertype.UserType#replace(java.lang.Object, java.lang.Object, java.lang.Object)
147 public Object replace(final Object original, final Object target,
148 final Object owner) throws HibernateException {
155 * @see org.hibernate.usertype.UserType#returnedClass()
157 @SuppressWarnings(Constants.UNCHECKED)
158 public Class returnedClass() {
165 * @see org.hibernate.usertype.UserType#sqlTypes()
167 public int[] sqlTypes() {
168 return new int[] { Types.VARCHAR };
174 * @see org.hibernate.usertype.EnhancedUserType#fromXMLString(java.lang.String)
176 @SuppressWarnings(Constants.UNCHECKED)
177 public Object fromXMLString(final String xmlValue) {
178 return Enum.valueOf(_enumClass, xmlValue);
184 * @see org.hibernate.usertype.EnhancedUserType#objectToSQLString(java.lang.Object)
186 @SuppressWarnings(Constants.UNCHECKED)
187 public String objectToSQLString(final Object value) {
188 return '\'' + ((Enum) value).name() + '\'';
194 * @see org.hibernate.usertype.EnhancedUserType#toXMLString(java.lang.Object)
196 @SuppressWarnings(Constants.UNCHECKED)
197 public String toXMLString(final Object value) {
198 return ((Enum) value).name();