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: }