package org.dcache.srm.request.sql; import com.google.common.collect.ImmutableList; import org.springframework.dao.DataAccessException; import java.sql.Connection; import java.sql.PreparedStatement; 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.Job; import org.dcache.srm.request.LsFileRequest; import org.dcache.srm.request.LsRequest; import org.dcache.srm.util.Configuration; public class LsRequestStorage extends DatabaseContainerRequestStorage<LsRequest,LsFileRequest> { public static final String TABLE_NAME ="lsrequests"; private static final String UPDATE_PREFIX = "UPDATE " + TABLE_NAME + " SET "+ "NEXTJOBID=?, " + "CREATIONTIME=?, " + "LIFETIME=?, " + "STATE=?, " + "ERRORMESSAGE=?, " +//5 "SCHEDULERID=?, " + "SCHEDULERTIMESTAMP=?," + "NUMOFRETR=?," + "LASTSTATETRANSITIONTIME=? "; private static final String INSERT_SQL = "INSERT INTO "+ TABLE_NAME+ "( " + "ID ,"+ "NEXTJOBID ,"+ "CREATIONTIME ,"+ "LIFETIME ,"+ "STATE ,"+ //5 "ERRORMESSAGE ,"+ "SCHEDULERID ,"+ "SCHEDULERTIMESTAMP ,"+ "NUMOFRETR ,"+ "LASTSTATETRANSITIONTIME,"+ // 10 //Database Request Storage "RETRYDELTATIME , "+ "SHOULDUPDATERETRYDELTATIME ,"+ "DESCRIPTION ,"+ "CLIENTHOST ,"+ //15 "STATUSCODE ,"+ "USERID , " + // LS REQUEST "EXPLANATION ,"+ "LONGFORMAT ,"+ "NUMOFLEVELS ,"+ "CNT ,"+ "LSOFFSET ) "+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; @Override public PreparedStatement getCreateStatement(Connection connection, Job job) throws SQLException { LsRequest lr = (LsRequest)job; return getPreparedStatement(connection, INSERT_SQL, lr.getId(), lr.getNextJobId(), lr.getCreationTime(), lr.getLifetime(), lr.getState().getStateId(),//5 lr.latestHistoryEvent(), lr.getSchedulerId(), lr.getSchedulerTimeStamp(), 0, // num of retries lr.getLastStateTransitionTime(), // 10 //Database Request Storage lr.getRetryDeltaTime(), lr.isShould_updateretryDeltaTime()?0:1, lr.getDescription(), lr.getClient_host(), lr.getStatusCodeString(), lr.getUser().getId(), lr.getExplanation(), lr.getLongFormat() ?1:0, lr.getNumOfLevels(), lr.getCount(), lr.getOffset() ); } private static final String UPDATE_REQUEST_SQL = UPDATE_PREFIX + ", RETRYDELTATIME=?," + " SHOULDUPDATERETRYDELTATIME=?," + " DESCRIPTION=?," + " CLIENTHOST=?," + " STATUSCODE=?," + " USERID=?," + // LS REQUEST " EXPLANATION=?,"+ " LONGFORMAT=?,"+ " NUMOFLEVELS=?,"+ " CNT=?,"+ " LSOFFSET=? "+ " WHERE ID=?"; @Override public PreparedStatement getUpdateStatement(Connection connection, Job job) throws SQLException { LsRequest lr = (LsRequest)job; return getPreparedStatement(connection, UPDATE_REQUEST_SQL, lr.getNextJobId(), lr.getCreationTime(), lr.getLifetime(), lr.getState().getStateId(), lr.latestHistoryEvent(),//5 lr.getSchedulerId(), lr.getSchedulerTimeStamp(), 0, // num of retries lr.getLastStateTransitionTime(), //Database Request Storage lr.getRetryDeltaTime(), // 10 lr.isShould_updateretryDeltaTime()?0:1, lr.getDescription(), lr.getClient_host(), lr.getStatusCodeString(), lr.getUser().getId(), lr.getExplanation(), lr.getLongFormat() ?1:0, lr.getNumOfLevels(), lr.getCount(), lr.getOffset(), lr.getId()); } public LsRequestStorage(Configuration.DatabaseParameters configuration, ScheduledExecutorService executor, SRMUserPersistenceManager manager) throws DataAccessException { super(configuration, executor, manager); } @Override protected LsRequest getContainerRequest(Connection connection, 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, ImmutableList<LsFileRequest> fileRequests, ResultSet set, int next_index) throws SQLException { Job.JobHistory[] jobHistoryArray = getJobHistory(ID,connection); String explanation=set.getString(next_index++); boolean longFormat=set.getInt(next_index++)==1; int numOfLevels=set.getInt(next_index++); int count=set.getInt(next_index++); int offset=set.getInt(next_index++); return new LsRequest(ID, NEXTJOBID, CREATIONTIME, LIFETIME, STATE, user, SCHEDULERID, SCHEDULER_TIMESTAMP, NUMOFRETR, LASTSTATETRANSITIONTIME, jobHistoryArray, fileRequests, RETRYDELTATIME, SHOULDUPDATERETRYDELTATIME, DESCRIPTION, CLIENTHOST, STATUSCODE, explanation, longFormat, numOfLevels, count, offset); } @Override public String getTableName() { return TABLE_NAME; } @Override public String getFileRequestsTableName() { return LsFileRequestStorage.TABLE_NAME; } }