/*
* PutFileRequestStorage.java
*
* Created on June 17, 2004, 4:49 PM
*/
package org.dcache.srm.request.sql;
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.request.Job;
import org.dcache.srm.request.PutFileRequest;
import org.dcache.srm.util.Configuration;
import org.dcache.srm.v2_2.TAccessLatency;
import org.dcache.srm.v2_2.TRetentionPolicy;
/**
*
* @author timur
*/
public class PutFileRequestStorage extends DatabaseFileRequestStorage<PutFileRequest> {
public static final String TABLE_NAME="putfilerequests";
private static final String UPDATE_PREFIX = "UPDATE " + TABLE_NAME + " SET "+
"NEXTJOBID=?, " +
"CREATIONTIME=?, " +
"LIFETIME=?, " +
"STATE=?, " +
"ERRORMESSAGE=?, " +//5
"SCHEDULERID=?, " +
"SCHEDULERTIMESTAMP=?," +
"NUMOFRETR=?," +
"LASTSTATETRANSITIONTIME=? ";
private PreparedStatement getStatement(Connection connection,
String query,
Job job) throws SQLException {
PutFileRequest request = (PutFileRequest)job;
TRetentionPolicy retentionPolicy = request.getRetentionPolicy();
TAccessLatency accessLatency = request.getAccessLatency();
return getPreparedStatement(connection,
query,
request.getNextJobId(),
request.getCreationTime(),
request.getLifetime(),
request.getState().getStateId(),
request.latestHistoryEvent(),
request.getSchedulerId(),
request.getSchedulerTimeStamp(),
0, // num of retries
request.getLastStateTransitionTime(),
request.getRequestId(),
request.getStatusCodeString(),
request.getSurlString(),
request.getTurlString(),
request.getFileId(),
null, // parentFileId (unused)
request.getSpaceReservationId(),
request.getSize(),
(retentionPolicy!=null? retentionPolicy.getValue():null),
(accessLatency!=null? accessLatency.getValue():null),
request.getId());
}
private static final String UPDATE_REQUEST_SQL =
UPDATE_PREFIX + ", REQUESTID=?, "+
"STATUSCODE=?, "+
"SURL=?, "+
"TURL=? ,"+
"FILEID=? ,"+
"PARENTFILEID=? ,"+
"SPACERESERVATIONID=? ,"+
"SIZE=? ,"+
"RETENTIONPOLICY=? ,"+
"ACCESSLATENCY=? "+
"WHERE ID=? ";
@Override
public PreparedStatement getUpdateStatement(Connection connection,
Job job)
throws SQLException {
if(job == null || !(job instanceof PutFileRequest)) {
throw new IllegalArgumentException("job is not PutFileRequest" );
}
PutFileRequest request = (PutFileRequest)job;
return getStatement(connection,UPDATE_REQUEST_SQL, request);
}
private static final String INSERT_SQL = "INSERT INTO "+ TABLE_NAME+ "( " +
"ID ,"+
"NEXTJOBID ,"+
"CREATIONTIME ,"+
"LIFETIME ,"+
"STATE ,"+ //5
"ERRORMESSAGE ,"+
"SCHEDULERID ,"+
"SCHEDULERTIMESTAMP ,"+
"NUMOFRETR ,"+
"LASTSTATETRANSITIONTIME,"+ // 10
//DATABASE FILE REQUEST STORAGE
"REQUESTID , " +
"STATUSCODE , "+
"SURL ,"+
"TURL ,"+
"FILEID ,"+
"PARENTFILEID ,"+
"SPACERESERVATIONID ,"+
"SIZE ,"+
"RETENTIONPOLICY ," +
"ACCESSLATENCY )"+
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
@Override
public PreparedStatement getCreateStatement(Connection connection,
Job job)
throws SQLException {
if(job == null || !(job instanceof PutFileRequest)) {
throw new IllegalArgumentException("fr is not PutFileRequest" );
}
PutFileRequest request = (PutFileRequest)job;
TRetentionPolicy retentionPolicy = request.getRetentionPolicy();
TAccessLatency accessLatency = request.getAccessLatency();
return getPreparedStatement(connection,
INSERT_SQL,
request.getId(),
request.getNextJobId(),
request.getCreationTime(),
request.getLifetime(),
request.getState().getStateId(),
request.latestHistoryEvent(),
request.getSchedulerId(),
request.getSchedulerTimeStamp(),
0, // num of retries
request.getLastStateTransitionTime(),
request.getRequestId(),
request.getStatusCodeString(),
request.getSurlString(),
request.getTurlString(),
request.getFileId(),
null, // parentFileId (unused)
request.getSpaceReservationId(),
request.getSize(),
(retentionPolicy!=null? retentionPolicy.getValue():null),
(accessLatency!=null? accessLatency.getValue():null));
}
/** Creates a new instance of PutFileRequestStorage */
public PutFileRequestStorage(Configuration.DatabaseParameters configuration, ScheduledExecutorService executor)
throws DataAccessException
{
super(configuration, executor);
}
@Override
protected PutFileRequest getFileRequest(
Connection _con,
long ID,
Long NEXTJOBID,
long CREATIONTIME,
long LIFETIME,
int STATE,
String SCHEDULERID,
long SCHEDULER_TIMESTAMP,
int NUMOFRETR,
long LASTSTATETRANSITIONTIME,
long REQUESTID,
Long CREDENTIALID,
String STATUSCODE,
ResultSet set,
int next_index)throws SQLException {
String SURL = set.getString(next_index++);
String TURL = set.getString(next_index++);
String FILEID = set.getString(next_index++);
String PARENTFILEID = set.getString(next_index++);
String SPACERESERVATIONID = set.getString(next_index++);
Long SIZE = set.getLong(next_index++);
if (set.wasNull()) {
SIZE = null;
}
String RETENTIONPOLICY = set.getString(next_index++);
String ACCESSLATENCY = set.getString(next_index++);
TRetentionPolicy retentionPolicy =
RETENTIONPOLICY == null || RETENTIONPOLICY.equalsIgnoreCase("null") ?
null:TRetentionPolicy.fromString(RETENTIONPOLICY);
TAccessLatency accessLatency =
ACCESSLATENCY == null || ACCESSLATENCY.equalsIgnoreCase("null") ?
null:TAccessLatency.fromString(ACCESSLATENCY);
Job.JobHistory[] jobHistoryArray =
getJobHistory(ID,_con);
return new PutFileRequest(
ID,
NEXTJOBID ,
CREATIONTIME,
LIFETIME,
STATE,
SCHEDULERID,
SCHEDULER_TIMESTAMP,
NUMOFRETR,
LASTSTATETRANSITIONTIME,
jobHistoryArray,
REQUESTID,
STATUSCODE,
SURL,
TURL,
FILEID,
SPACERESERVATIONID,
SIZE,
retentionPolicy,
accessLatency);
}
@Override
public String getTableName() {
return TABLE_NAME;
}
}