package se.chalmers.gdcn.files;
import org.codehaus.plexus.util.FileUtils;
import se.chalmers.gdcn.taskbuilder.Task;
import se.chalmers.gdcn.taskbuilder.communicationToClient.TaskListener;
import se.chalmers.gdcn.taskbuilder.fileManagement.PathManager;
import java.io.File;
import java.io.IOException;
/**
* Created by Leif on 2014-04-21.
*/
public class SelfWorker {
private final String taskName;
private final PathManager jobPathManager;
private final PathManager workerPathManager;
public SelfWorker(TaskMeta taskMeta, String jobName) throws TaskMetaDataException {
taskName = taskMeta.getTaskName();
jobPathManager = PathManager.jobOwner(jobName);
workerPathManager = PathManager.worker(jobName);
}
/**
* Returns absolute path to result file from this self work.
* This file will be in the /data directory.
* @return Absolute path
*/
public String futureResultFilePath(){
// return jobPathManager.getResultFilePath(taskName);
return workerPathManager.getResultFilePath(taskName);
}
/**
* Creates a Task object for the local job owner to work on himself.
*
* @param taskMeta Meta info of this replica
* @param listener Listener for success or failure
* @return Runnable Task
* @throws TaskMetaDataException
*/
public Task workSelf(TaskMeta taskMeta, TaskListener listener) throws TaskMetaDataException {
try {
copyFiles();
} catch (IOException e) {
e.printStackTrace();
listener.taskFailed(taskName, e.getMessage());
}
return new Task(jobPathManager.getProjectName(), taskMeta.getTaskName(), FileManagementUtils.moduleName(taskMeta),
FileManagementUtils.getResourceFiles(jobPathManager, taskMeta), listener);
}
/**
* Copies files from jobs/ to data/ folder in order to perform local work.
* @throws IOException
*/
private void copyFiles() throws IOException {
// PathManager workerPathManager = PathManager.worker(jobPathManager.getProjectName());
FileUtils.copyDirectory( new File(jobPathManager.taskResourcesDir()), new File(workerPathManager.taskResourcesDir()));
FileUtils.copyDirectory( new File(jobPathManager.taskCodeDir()), new File(workerPathManager.taskCodeDir()));
}
}