package org.kisst.gft.filetransfer;
import org.kisst.gft.action.Action;
import org.kisst.gft.action.Transaction;
import org.kisst.gft.poller.PollerJob;
import org.kisst.gft.task.BasicTask;
public class PollerTask extends BasicTask {
public final FileServerConnection fsconn;
public final String filename;
private final Transaction transaction;
private final PollerJob job;
private boolean inprogress=false;
public PollerTask(PollerJob taskdef, FileServerConnection fsconn, String filename) {
super(taskdef.gft, taskdef, filename);
this.job=taskdef;
this.fsconn=fsconn;
this.filename = filename;
Action action = taskdef.getFlow();
if (action instanceof Transaction)
transaction = (Transaction) action;
else
transaction=null;
}
public void moveToInProgress() throws FileCouldNotBeMovedException {
fsconn.move(getOrigPath(), getInprogressPath());
inprogress=true;
}
public void deleteInProgressFile() throws FileCouldNotBeMovedException {
if (inprogress)
fsconn.deleteFile(getActivePath());
else
throw new RuntimeException("Trying to delete inprogress file that is not inprogress "+getActivePath());
}
public String getOrigPath() { return job.getDir() + "/" + filename; }
public String getInprogressPath() { return job.getMoveToDir() + "/" + filename; }
public String getActivePath() {
if (inprogress)
return getInprogressPath();
else
return getOrigPath();
}
public void startTransaction() {
if (transaction!=null)
transaction.prepareTransaction(this);
}
public void commit() {
if (transaction!=null)
transaction.commitTransaction(this);
}
public void rollback() {
if (transaction!=null)
transaction.rollbackTransaction(this);
}
}