--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.model.common;\r
+\r
+import java.io.Serializable;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.sql.Types;\r
+import java.util.UUID;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hibernate.Hibernate;\r
+import org.hibernate.HibernateException;\r
+import org.hibernate.usertype.UserType;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 22.07.2008\r
+ * @version 1.0\r
+ */\r
+public class UUIDUserType implements UserType {\r
+ private static final Logger logger = Logger.getLogger(UUIDUserType.class);\r
+\r
+ private static final int[] TYPES = { Types.VARCHAR };\r
+\r
+ \r
+ /**\r
+ * \r
+ */\r
+ public UUIDUserType() {\r
+ // TODO Auto-generated constructor stub\r
+ }\r
+\r
+ public Object assemble(Serializable cached, Object owner) throws HibernateException {\r
+ try {\r
+ if(cached == null) {\r
+ return null;\r
+ } else {\r
+ return UUID.fromString(cached.toString());\r
+ }\r
+ } catch (IllegalArgumentException e) {\r
+ throw new HibernateException(e);\r
+ }\r
+ }\r
+\r
+ public Object deepCopy(Object o) throws HibernateException {\r
+ if (o == null) {\r
+ return null;\r
+ }\r
+ \r
+ UUID uuid = (UUID) o;\r
+\r
+ try {\r
+ return UUID.fromString(uuid.toString());\r
+ } catch (IllegalArgumentException e) {\r
+ throw new HibernateException(e);\r
+ }\r
+ }\r
+\r
+ public Serializable disassemble(Object value) throws HibernateException {\r
+ if(value == null) {\r
+ return null;\r
+ } else {\r
+ UUID uuid = (UUID) value;\r
+ return uuid.toString();\r
+ }\r
+ }\r
+\r
+ public boolean equals(Object x, Object y) throws HibernateException {\r
+ return (x == y) || (x != null && y != null && (x.equals(y)));\r
+ }\r
+\r
+ public int hashCode(Object x) throws HibernateException {\r
+ return x.hashCode();\r
+ }\r
+\r
+ public boolean isMutable() {\r
+ return false;\r
+ }\r
+\r
+ public Object nullSafeGet(ResultSet resultSet, String[] names, Object o)\r
+ throws HibernateException, SQLException {\r
+ String val = (String) Hibernate.STRING.nullSafeGet(resultSet, names[0]);\r
+ \r
+ if(val == null) {\r
+ return null;\r
+ } else {\r
+\r
+ try {\r
+ return UUID.fromString(val);\r
+ } catch (IllegalArgumentException e) {\r
+ throw new HibernateException(e);\r
+ }\r
+ }\r
+ }\r
+\r
+ public void nullSafeSet(PreparedStatement preparedStatement, Object o, int index)\r
+ throws HibernateException, SQLException {\r
+ if (null == o) { \r
+ preparedStatement.setNull(index, Types.VARCHAR); \r
+ } else { \r
+ UUID uuid = (UUID)o;\r
+ preparedStatement.setString(index, uuid.toString()); \r
+ }\r
+ }\r
+\r
+ public Object replace(Object original, Object target, Object owner)\r
+ throws HibernateException {\r
+ return original;\r
+ }\r
+\r
+ public Class returnedClass() {\r
+ return UUID.class;\r
+ }\r
+\r
+ public int[] sqlTypes() {\r
+ return TYPES;\r
+ }\r
+}\r