Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/util/data/IntegerArrayType.java @ 1345:883ab3a6f525 tip
changed version to 2.7-SNAPSHOT after release2.6.2 for default branch
author | Marco Lechner, Bundesamt fuer Strahlenschutz, SW 2.1 <mlechner@bfs.de> |
---|---|
date | Fri, 07 Apr 2017 11:14:37 +0200 |
parents | 3ec358698b4d |
children |
rev | line source |
---|---|
711
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
1 /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
2 * Software engineering by Intevation GmbH |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
3 * |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
4 * This file is Free Software under the GNU GPL (v>=3) |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
6 * the documentation coming with IMIS-Labordaten-Application for details. |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
7 */ |
653
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
8 package de.intevation.lada.util.data; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
9 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
10 import java.io.Serializable; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
11 import java.sql.Array; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
12 import java.sql.Connection; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
13 import java.sql.PreparedStatement; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
14 import java.sql.ResultSet; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
15 import java.sql.SQLException; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
16 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
17 import org.hibernate.HibernateException; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
18 import org.hibernate.engine.spi.SessionImplementor; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
19 import org.hibernate.usertype.UserType; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
20 |
711
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
21 /** |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
22 * Implementation for a new data type in the postgresql/postgis jdbc driver. |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
23 * |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
24 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a> |
3ec358698b4d
Code style and documentation.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
653
diff
changeset
|
25 */ |
653
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
26 public class IntegerArrayType implements UserType { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
27 protected static final int SQLTYPE = java.sql.Types.ARRAY; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
28 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
29 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
30 public int[] sqlTypes() { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
31 return new int[] {SQLTYPE}; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
32 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
33 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
34 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
35 public Class<Integer[]> returnedClass() { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
36 return Integer[].class; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
37 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
38 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
39 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
40 public boolean equals(Object x, Object y) |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
41 throws HibernateException { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
42 return x == null ? y == null : x.equals(y); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
43 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
44 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
45 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
46 public int hashCode(Object x) |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
47 throws HibernateException { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
48 return x == null ? 0 : x.hashCode(); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
49 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
50 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
51 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
52 public Object nullSafeGet( |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
53 ResultSet rs, |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
54 String[] names, |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
55 SessionImplementor session, |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
56 Object owner) |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
57 throws HibernateException, SQLException { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
58 Array array = rs.getArray(names[0]); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
59 Integer[] javaArray = (Integer[]) array.getArray(); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
60 return javaArray; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
61 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
62 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
63 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
64 public void nullSafeSet( |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
65 PreparedStatement st, |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
66 Object value, |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
67 int index, |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
68 SessionImplementor session) |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
69 throws HibernateException, SQLException { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
70 Connection connection = st.getConnection(); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
71 Integer[] castObject = (Integer[]) value; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
72 Array array = connection.createArrayOf("integer", castObject); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
73 st.setArray(index, array); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
74 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
75 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
76 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
77 public Object deepCopy(Object value) |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
78 throws HibernateException { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
79 return value == null ? null : ((Integer[]) value).clone(); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
80 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
81 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
82 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
83 public boolean isMutable() { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
84 return true; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
85 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
86 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
87 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
88 public Serializable disassemble(Object value) |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
89 throws HibernateException { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
90 return (Integer[])this.deepCopy(value); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
91 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
92 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
93 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
94 public Object assemble(Serializable cached, Object owner) |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
95 throws HibernateException { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
96 return this.deepCopy(cached); |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
97 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
98 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
99 @Override |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
100 public Object replace(Object original, Object target, Object owner) |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
101 throws HibernateException { |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
102 return original; |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
103 } |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
104 |
d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
105 } |