raimund@711: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz raimund@711: * Software engineering by Intevation GmbH raimund@711: * raimund@711: * This file is Free Software under the GNU GPL (v>=3) raimund@711: * and comes with ABSOLUTELY NO WARRANTY! Check out raimund@711: * the documentation coming with IMIS-Labordaten-Application for details. raimund@711: */ raimund@653: package de.intevation.lada.util.data; raimund@653: raimund@653: import java.io.Serializable; raimund@653: import java.sql.Array; raimund@653: import java.sql.Connection; raimund@653: import java.sql.PreparedStatement; raimund@653: import java.sql.ResultSet; raimund@653: import java.sql.SQLException; raimund@653: raimund@653: import org.hibernate.HibernateException; raimund@653: import org.hibernate.engine.spi.SessionImplementor; raimund@653: import org.hibernate.usertype.UserType; raimund@653: raimund@711: /** raimund@711: * Implementation for a new data type in the postgresql/postgis jdbc driver. raimund@711: * raimund@711: * @author Raimund Renkert raimund@711: */ raimund@653: public class IntegerArrayType implements UserType { raimund@653: protected static final int SQLTYPE = java.sql.Types.ARRAY; raimund@653: raimund@653: @Override raimund@653: public int[] sqlTypes() { raimund@653: return new int[] {SQLTYPE}; raimund@653: } raimund@653: raimund@653: @Override raimund@653: public Class returnedClass() { raimund@653: return Integer[].class; raimund@653: } raimund@653: raimund@653: @Override raimund@653: public boolean equals(Object x, Object y) raimund@653: throws HibernateException { raimund@653: return x == null ? y == null : x.equals(y); raimund@653: } raimund@653: raimund@653: @Override raimund@653: public int hashCode(Object x) raimund@653: throws HibernateException { raimund@653: return x == null ? 0 : x.hashCode(); raimund@653: } raimund@653: raimund@653: @Override raimund@653: public Object nullSafeGet( raimund@653: ResultSet rs, raimund@653: String[] names, raimund@653: SessionImplementor session, raimund@653: Object owner) raimund@653: throws HibernateException, SQLException { raimund@653: Array array = rs.getArray(names[0]); raimund@653: Integer[] javaArray = (Integer[]) array.getArray(); raimund@653: return javaArray; raimund@653: } raimund@653: raimund@653: @Override raimund@653: public void nullSafeSet( raimund@653: PreparedStatement st, raimund@653: Object value, raimund@653: int index, raimund@653: SessionImplementor session) raimund@653: throws HibernateException, SQLException { raimund@653: Connection connection = st.getConnection(); raimund@653: Integer[] castObject = (Integer[]) value; raimund@653: Array array = connection.createArrayOf("integer", castObject); raimund@653: st.setArray(index, array); raimund@653: } raimund@653: raimund@653: @Override raimund@653: public Object deepCopy(Object value) raimund@653: throws HibernateException { raimund@653: return value == null ? null : ((Integer[]) value).clone(); raimund@653: } raimund@653: raimund@653: @Override raimund@653: public boolean isMutable() { raimund@653: return true; raimund@653: } raimund@653: raimund@653: @Override raimund@653: public Serializable disassemble(Object value) raimund@653: throws HibernateException { raimund@653: return (Integer[])this.deepCopy(value); raimund@653: } raimund@653: raimund@653: @Override raimund@653: public Object assemble(Serializable cached, Object owner) raimund@653: throws HibernateException { raimund@653: return this.deepCopy(cached); raimund@653: } raimund@653: raimund@653: @Override raimund@653: public Object replace(Object original, Object target, Object owner) raimund@653: throws HibernateException { raimund@653: return original; raimund@653: } raimund@653: raimund@653: }