change SupportedCategoricalEnumeration and RecommendedModifierEnumeration from OneToM...
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / hibernate / URIUserType.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.cdm.hibernate;
10
11
12 import java.net.URI;
13 import java.net.URISyntaxException;
14 import java.sql.PreparedStatement;
15 import java.sql.ResultSet;
16 import java.sql.SQLException;
17 import java.sql.Types;
18
19 import org.hibernate.HibernateException;
20 import org.hibernate.TypeMismatchException;
21 import org.hibernate.engine.spi.SessionImplementor;
22 import org.hibernate.type.StandardBasicTypes;
23 import org.hibernate.usertype.UserType;
24 import org.jadira.usertype.dateandtime.shared.spi.AbstractUserType;
25
26 /**
27 * This class maps java.net.URI to varchar(255)
28 * @author a.mueller
29 *
30 */
31 public class URIUserType extends AbstractUserType implements UserType {
32 private static final long serialVersionUID = -5825017496962569105L;
33
34 /**
35 * SQL type for this usertype.
36 */
37 private static final int[] SQL_TYPES = {Types.CLOB};
38
39 /* (non-Javadoc)
40 * @see org.jadira.usertype.dateandtime.shared.spi.AbstractSingleColumnUserType#returnedClass()
41 */
42 @Override
43 public Class returnedClass() {
44 return URI.class;
45 }
46
47 @Override
48 public int[] sqlTypes() {
49 return SQL_TYPES;
50 }
51
52
53 @Override
54 public URI nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)
55 throws HibernateException, SQLException {
56 String val = (String) StandardBasicTypes.STRING.nullSafeGet(rs, names, session, owner);
57
58 if(val == null) {
59 return null;
60 } else {
61 try {
62 return new URI(val);
63 } catch (URISyntaxException e) {
64 throw new TypeMismatchException(e);
65 }
66 }
67 }
68
69
70
71 @Override
72 public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor session)
73 throws HibernateException, SQLException {
74 if (value == null) {
75 StandardBasicTypes.STRING.nullSafeSet(statement, value, index, session);
76 } else {
77 URI uri = (URI) value;
78 StandardBasicTypes.STRING.nullSafeSet(statement, uri.toString(), index, session);
79 }
80 }
81
82 /**
83 * @param value value being copied
84 * @return copied value
85 */
86 public Object deepCopy(Object value) {
87 if (value == null) {
88 return null;
89 }
90 try {
91 return new URI(((URI) value).toString());
92 } catch (URISyntaxException e) {
93 throw new TypeMismatchException(e);
94 }
95 }
96
97 }