Project

General

Profile

1
package eu.dnetlib.enabling.is.sn.resourcestate.hib;
2

    
3
import static java.sql.Types.VARCHAR;
4

    
5
import java.io.Serializable;
6
import java.io.StringReader;
7
import java.io.StringWriter;
8
import java.sql.PreparedStatement;
9
import java.sql.ResultSet;
10
import java.sql.SQLException;
11

    
12
import javax.xml.transform.stream.StreamResult;
13
import javax.xml.transform.stream.StreamSource;
14
import javax.xml.ws.EndpointReference;
15
import javax.xml.ws.wsaddressing.W3CEndpointReference;
16

    
17
import org.hibernate.HibernateException;
18
import org.hibernate.engine.spi.SessionImplementor;
19
import org.hibernate.usertype.UserType;
20

    
21
/**
22
 * Serializes Endpoint reference types to database columns (strings).
23
 * 
24
 * @author marko
25
 * 
26
 */
27
public class EndpointReferenceType implements UserType { // NOPMD
28

    
29
	/**
30
	 * {@inheritDoc}
31
	 * 
32
	 * @see org.hibernate.usertype.UserType#assemble(java.io.Serializable, java.lang.Object)
33
	 */
34
	@Override
35
	public Object assemble(final Serializable arg0, final Object owner) {
36
		if (arg0 == null) return null;
37
		return EndpointReference.readFrom(new StreamSource(new StringReader((String) arg0)));
38
	}
39

    
40
	/**
41
	 * {@inheritDoc}
42
	 * 
43
	 * @see org.hibernate.usertype.UserType#deepCopy(java.lang.Object)
44
	 */
45
	@Override
46
	public Object deepCopy(final Object arg0) {
47
		if (arg0 == null) return null;
48

    
49
		return arg0;
50
	}
51

    
52
	/**
53
	 * {@inheritDoc}
54
	 * 
55
	 * @see org.hibernate.usertype.UserType#disassemble(java.lang.Object)
56
	 */
57
	@Override
58
	public Serializable disassemble(final Object arg0) {
59
		final StringWriter buffer = new StringWriter();
60
		((W3CEndpointReference) arg0).writeTo(new StreamResult(buffer));
61
		return buffer.toString();
62
	}
63

    
64
	/**
65
	 * {@inheritDoc}
66
	 * 
67
	 * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object)
68
	 */
69
	@Override
70
	public boolean equals(final Object arg0, final Object arg1) {
71
		if (arg0 == arg1) // NOPMD
72
			return true;
73
		if ((arg0 == null) || (arg1 == null)) return false;
74
		return arg0.equals(arg1);
75
	}
76

    
77
	/**
78
	 * {@inheritDoc}
79
	 * 
80
	 * @see org.hibernate.usertype.UserType#hashCode(java.lang.Object)
81
	 */
82
	@Override
83
	public int hashCode(final Object arg0) {
84
		return disassemble(arg0).hashCode();
85
	}
86

    
87
	@Override
88
	public boolean isMutable() {
89
		return false;
90
	}
91

    
92
	/**
93
	 * 
94
	 * {@inheritDoc}
95
	 * 
96
	 * @see org.hibernate.usertype.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[], org.hibernate.engine.spi.SessionImplementor,
97
	 *      java.lang.Object)
98
	 */
99
	@Override
100
	public Object nullSafeGet(final ResultSet rset, final String[] names, final SessionImplementor si, final Object owner) throws SQLException {
101
		return assemble(rset.getString(names[0]), owner);
102
	}
103

    
104
	/**
105
	 * {@inheritDoc}
106
	 * 
107
	 * @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int,
108
	 *      org.hibernate.engine.spi.SessionImplementor)
109
	 */
110
	@Override
111
	public void nullSafeSet(final PreparedStatement statement, final Object epr, final int index, final SessionImplementor arg3) throws HibernateException,
112
			SQLException {
113
		if (epr != null) {
114
			statement.setString(index, (String) disassemble(epr));
115
		}
116

    
117
	}
118

    
119
	/**
120
	 * {@inheritDoc}
121
	 * 
122
	 * @see org.hibernate.usertype.UserType#replace(java.lang.Object, java.lang.Object, java.lang.Object)
123
	 */
124
	@Override
125
	public Object replace(final Object arg0, final Object arg1, final Object arg2) {
126
		// is not mutable
127
		return null;
128
	}
129

    
130
	/**
131
	 * {@inheritDoc}
132
	 * 
133
	 * @see org.hibernate.usertype.UserType#returnedClass()
134
	 */
135
	@Override
136
	@SuppressWarnings("rawtypes")
137
	public Class returnedClass() {
138
		return W3CEndpointReference.class;
139
	}
140

    
141
	/**
142
	 * {@inheritDoc}
143
	 * 
144
	 * @see org.hibernate.usertype.UserType#sqlTypes()
145
	 */
146
	@Override
147
	public int[] sqlTypes() {
148
		return new int[] { VARCHAR };
149
	}
150

    
151
}
(1-1/2)