/* * DatabaseRequestStorage.java * * Created on February 16, 2007, 1:24 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package org.dcache.srm.request.sql; import org.springframework.dao.DataAccessException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.concurrent.ScheduledExecutorService; import org.dcache.srm.SRMUser; import org.dcache.srm.SRMUserPersistenceManager; import org.dcache.srm.request.Request; import org.dcache.srm.util.Configuration; import static com.google.common.base.Preconditions.checkNotNull; /** * * @author timur */ public abstract class DatabaseRequestStorage<R extends Request> extends DatabaseJobStorage<R> { final SRMUserPersistenceManager srmUserPersistenceManager; /** Creates a new instance of DatabaseRequestStorage */ public DatabaseRequestStorage(Configuration.DatabaseParameters configuration, ScheduledExecutorService executor, SRMUserPersistenceManager manager) throws DataAccessException { super(configuration, executor); srmUserPersistenceManager = checkNotNull(manager); } protected abstract R getRequest( Connection _con, long ID, Long NEXTJOBID, long CREATIONTIME, long LIFETIME, int STATE, SRMUser user, String SCHEDULERID, long SCHEDULER_TIMESTAMP, int NUMOFRETR, long LASTSTATETRANSITIONTIME, Long CREDENTIALID, int RETRYDELTATIME, boolean SHOULDUPDATERETRYDELTATIME, String DESCRIPTION, String CLIENTHOST, String STATUSCODE, ResultSet set, int next_index)throws SQLException; @Override protected final R getJob( Connection _con, long ID, Long NEXTJOBID, long CREATIONTIME, long LIFETIME, int STATE, String SCHEDULERID, long SCHEDULER_TIMESTAMP, int NUMOFRETR, long LASTSTATETRANSITIONTIME, ResultSet set, int next_index) throws SQLException { Long CREDENTIALID = set.getLong(next_index++); int RETRYDELTATIME = set.getInt(next_index++); boolean SHOULDUPDATERETRYDELTATIME = set.getBoolean(next_index++); String DESCRIPTION = set.getString(next_index++); String CLIENTHOST = set.getString(next_index++); String STATUSCODE= set.getString(next_index++); long id = set.getLong(next_index++); SRMUser user = set.wasNull() ? srmUserPersistenceManager.createAnonymous() // FIXME: Using client host for this is not correct as the client may specify a different host : srmUserPersistenceManager.find(CLIENTHOST, id); return getRequest( _con, ID, NEXTJOBID , CREATIONTIME, LIFETIME, STATE, user, SCHEDULERID, SCHEDULER_TIMESTAMP, NUMOFRETR, LASTSTATETRANSITIONTIME, CREDENTIALID, RETRYDELTATIME, SHOULDUPDATERETRYDELTATIME, DESCRIPTION, CLIENTHOST, STATUSCODE, set, next_index ); } }