/* * Copyright 2009 Ralf Joachim * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.castor.cpa.persistence.sql.keygen.typehandler; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.exolab.castor.jdo.PersistenceException; /** * Interface for various type handlers. The type handler handles * integer, BigDecimal, Long and String values depending on the database engine. * * @param <T> Name of KeyGeneratorTypeHandler interface. * * @author <a href="mailto:ahmad DOT hassan AT gmail DOT com">Ahmad Hassan</a> * @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a> * @version $Revision$ $Date: 2009-07-13 17:22:43 (Tue, 28 Jul 2009) $ */ public interface KeyGeneratorTypeHandler <T> { //----------------------------------------------------------------------------------- /** * Gets the value from resultset by calling getValue method and then * calls the increment method to increment the extracted value. * * @param rs A ResultSet object. * @return Returns the new value after incrementing it. * @throws PersistenceException If ResultSet is empty or if the type handler * should fail when current row of the record set is not valid, * @throws SQLException If database error occurs. */ T getNextValue(ResultSet rs) throws PersistenceException, SQLException; /** * Reads the resultset and return the extracted typehandler value from the * resultset. * * @param rs ResultSet object * @return Value extracted from the ResultSet. * @throws PersistenceException If ResultSet is empty or if the type handler * should fail when current row of the record set is not valid, * @throws SQLException If database error occurs. */ T getValue(ResultSet rs) throws PersistenceException, SQLException; /** * Increments the provided value by ONE. * * @param value value to be incremented. * @return Modified TypeHandler object with incremented value.. */ T increment(T value); /** * Adds the new Type Handler of type T to the provided handler instance at * the provided offset. * * @param value Handler instance in which new value will be added * @param offset Offset location. * * @return Modified object. */ T add(T value, int offset); /** * Binds the value in the sql preparedstatement at the provided index * location. * * @param stmt A SQL PreparedStatement. * @param index Index location for binding parameter to statement. * @param value Value to be binded * @throws SQLException If SQL error occurs in binding param to sql statement. */ void bindValue(PreparedStatement stmt, int index, T value) throws SQLException; //----------------------------------------------------------------------------------- }