/*
* GetRequestStorage.java
*
* Created on June 22, 2004, 2:48 PM
*/
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.CopyFileRequest;
import org.dcache.srm.request.CopyRequest;
import org.dcache.srm.request.Job;
import org.dcache.srm.util.Configuration;
import org.dcache.srm.v2_2.TAccessLatency;
import org.dcache.srm.v2_2.TFileStorageType;
import org.dcache.srm.v2_2.TRetentionPolicy;
/**
*
* @author timur
*/
public class CopyRequestStorage extends DatabaseContainerRequestStorage<CopyRequest,CopyFileRequest> {
public static final String TABLE_NAME="copyrequests";
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
"CREDENTIALID , " +
"RETRYDELTATIME , "+
"SHOULDUPDATERETRYDELTATIME ,"+
"DESCRIPTION ,"+
"CLIENTHOST ,"+ // 15
"STATUSCODE ,"+
"USERID ,"+
// Copy Request
"STORAGETYPE, " +
"RETENTIONPOLICY, "+
"ACCESSLATENCY ) " +
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
@Override
public PreparedStatement getCreateStatement(Connection connection, Job job) throws SQLException {
CopyRequest cr = (CopyRequest)job;
String storageTypeValue=null;
if(cr.getStorageType() != null) {
storageTypeValue = cr.getStorageType().getValue();
}
String retentionPolicyValue=null;
if(cr.getTargetRetentionPolicy() != null) {
retentionPolicyValue = cr.getTargetRetentionPolicy().getValue();
}
String accessLatencyValue=null;
if(cr.getTargetAccessLatency() != null) {
accessLatencyValue = cr.getTargetAccessLatency().getValue();
}
return getPreparedStatement(connection,
INSERT_SQL,
cr.getId(),
cr.getNextJobId(),
cr.getCreationTime(),
cr.getLifetime(),
cr.getState().getStateId(),//5
cr.latestHistoryEvent(),
cr.getSchedulerId(),
cr.getSchedulerTimeStamp(),
0, // num of retries
cr.getLastStateTransitionTime(), // 10
//Database Request Storage
cr.getCredentialId(),
cr.getRetryDeltaTime(),
cr.isShould_updateretryDeltaTime()?0:1,
cr.getDescription(),
cr.getClient_host(),
cr.getStatusCodeString(),
cr.getUser().getId(),
storageTypeValue,
retentionPolicyValue,
accessLatencyValue);
}
private static final String UPDATE_REQUEST_SQL =
UPDATE_PREFIX + ", CREDENTIALID=?," +
" RETRYDELTATIME=?," +
" SHOULDUPDATERETRYDELTATIME=?," +
" DESCRIPTION=?," +
" CLIENTHOST=?," +
" STATUSCODE=?," +
" USERID=?," +
" STORAGETYPE=?, " +
" RETENTIONPOLICY=?,"+
" ACCESSLATENCY=?" +
" WHERE ID=?";
@Override
public PreparedStatement getUpdateStatement(Connection connection,
Job job) throws SQLException {
CopyRequest cr = (CopyRequest)job;
String storageTypeValue=null;
if(cr.getStorageType() != null) {
storageTypeValue = cr.getStorageType().getValue();
}
String retentionPolicyValue=null;
if(cr.getTargetRetentionPolicy() != null) {
retentionPolicyValue = cr.getTargetRetentionPolicy().getValue();
}
String accessLatencyValue=null;
if(cr.getTargetAccessLatency() != null) {
accessLatencyValue = cr.getTargetAccessLatency().getValue();
}
return getPreparedStatement(connection,
UPDATE_REQUEST_SQL,
cr.getNextJobId(),
cr.getCreationTime(),
cr.getLifetime(),
cr.getState().getStateId(),
cr.latestHistoryEvent(),//5
cr.getSchedulerId(),
cr.getSchedulerTimeStamp(),
0, // num of retries
cr.getLastStateTransitionTime(),
//Database Request Storage
cr.getCredentialId(), // 10
cr.getRetryDeltaTime(),
cr.isShould_updateretryDeltaTime()?0:1,
cr.getDescription(),
cr.getClient_host(),
cr.getStatusCodeString(),
cr.getUser().getId(),
storageTypeValue,
retentionPolicyValue,
accessLatencyValue,
cr.getId());
}
/** Creates a new instance of GetRequestStorage */
public CopyRequestStorage(Configuration.DatabaseParameters configuration,
ScheduledExecutorService executor, SRMUserPersistenceManager manager)
throws DataAccessException
{
super(configuration, executor, manager);
}
@Override
protected CopyRequest getContainerRequest(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,
ImmutableList<CopyFileRequest> fileRequests,
ResultSet set,
int next_index) throws SQLException {
Job.JobHistory[] jobHistoryArray =
getJobHistory(ID,_con);
String STORAGETYPE = set.getString(next_index++);
String RETENTIONPOLICY = set.getString(next_index++);
String ACCESSLATENCY = set.getString(next_index++);
TFileStorageType storageType =
STORAGETYPE == null || STORAGETYPE.equalsIgnoreCase("null") ?
null:TFileStorageType.fromString(STORAGETYPE);
TRetentionPolicy retentionPolicy =
RETENTIONPOLICY == null || RETENTIONPOLICY.equalsIgnoreCase("null") ?
null:TRetentionPolicy.fromString(RETENTIONPOLICY);
TAccessLatency accessLatency =
ACCESSLATENCY == null || ACCESSLATENCY.equalsIgnoreCase("null") ?
null:TAccessLatency.fromString(ACCESSLATENCY);
return new CopyRequest(
ID,
NEXTJOBID,
CREATIONTIME,
LIFETIME,
STATE,
user,
SCHEDULERID,
SCHEDULER_TIMESTAMP,
NUMOFRETR,
LASTSTATETRANSITIONTIME,
jobHistoryArray,
CREDENTIALID,
fileRequests,
RETRYDELTATIME,
SHOULDUPDATERETRYDELTATIME,
DESCRIPTION,
CLIENTHOST,
STATUSCODE,
storageType,
retentionPolicy,
accessLatency);
}
@Override
public String getTableName() {
return TABLE_NAME;
}
@Override
public String getFileRequestsTableName() {
return CopyFileRequestStorage.TABLE_NAME;
}
}