package org.kisst.gft.filetransfer.action;
import org.kisst.gft.action.BaseAction;
import org.kisst.gft.filetransfer.FileLocation;
import org.kisst.gft.filetransfer.FileServerConnection;
import org.kisst.gft.task.Task;
import org.kisst.props4j.Props;
import org.kisst.util.exception.BasicFunctionalException;
public class MoveDestFileToFinalDestination extends BaseAction {
public MoveDestFileToFinalDestination(Props props) { super(props); }
public class Problem extends BasicFunctionalException {
private static final long serialVersionUID = 1L;
public Problem(FileLocation loc) { super("On host "+loc.getFileServer()+" there already is a file "+loc.getPath()); }
}
@Override public boolean safeToRetry() { return true; }
@Override public void execute(Task task) {
DestinationFile desttask= (DestinationFile) task;
FileLocation dest = desttask.getDestinationFile();
FileLocation finaldest = desttask.getFinalDestinationFile();
if (finaldest==null || finaldest.getPath().equals(dest.getPath()))
return; // nothing to do
// TODO: check if fileservers are the same
FileServerConnection fsconn=dest.getFileServer().openConnection();
try {
fsconn.move(dest.getPath(), finaldest.getPath());
}
finally {
if (fsconn!=null)
fsconn.close();
}
}
}