package org.molgenis.compute.pipelinemodel; import java.io.*; import java.util.Timer; import java.util.TimerTask; import java.util.Vector; //now script has //local name //remote name //remote directory //data - the listing of the script public abstract class Script implements Serializable { private String ID = null; private String localname = null; private String remotename = null; private byte[] scriptData = null; private String remoteDir = null; private boolean isFinished = false; private boolean isStarted = false; private Timer countdown = new Timer(); private int maxRunTime = 180; // 3 minutes for testing hello world public boolean isExpired() { return expired; } private boolean expired = false; public void setExpired(boolean b) { System.out.println("... execution time is expired"); this.expired = b; } public enum Status { IDLE { public String toString() { return "waiting"; } }, WAITING { public String toString() { return "waiting"; } }, SCHEDULED { public String toString() { return "scheduled"; } }, RUNNING { public String toString() { return "running"; } }, DONE_SUCCESS { public String toString() { return "done success"; } }, DONE_FAILED { public String toString() { return "failed"; } } } private Status status = Status.IDLE; private boolean hasAdditionalFiles = false; private Vector<FileToSaveRemotely> filesToSaveRemotely = new Vector(); private boolean isShort = false; public Script(String scriptID, String outputRemoteLocation, byte[] bytes) { this.ID = scriptID; this.remotename = ID + ".sh"; this.remoteDir = outputRemoteLocation; this.scriptData = bytes; } public String getID() { return ID; } public void setID(String ID) { this.ID = ID; } // todo delete public Script(String localname, String remotename) { this.localname = localname; this.remotename = remotename; try { this.scriptData = getFileAsBytes(localname); } catch (IOException e) { e.printStackTrace(); } } // todo delete public Script(String remotename, byte[] scriptListing) { this.remotename = remotename; this.scriptData = scriptListing; } public String getLocalname() { return localname; } public String getRemotename() { return remotename; } private final byte[] getFileAsBytes(String filename) throws IOException { File file = new File(filename); final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); final byte[] bytes = new byte[(int) file.length()]; bis.read(bytes); bis.close(); return bytes; } public byte[] getScriptData() { return scriptData; } public String getRemoteDir() { return remoteDir; } public void setRemoteDir(String remoteDir) { this.remoteDir = remoteDir; } public boolean isHasAdditionalFiles() { return hasAdditionalFiles; } public void setHasAdditionalFiles(boolean hasAdditionalFiles) { this.hasAdditionalFiles = hasAdditionalFiles; } public void addFileToTransfer(FileToSaveRemotely file) { filesToSaveRemotely.add(file); } public FileToSaveRemotely getFileToSaveRemotely(int i) { return filesToSaveRemotely.elementAt(i); } public boolean isShort() { return isShort; } public void setShort(boolean aShort) { isShort = aShort; } public int getNumberFileToSaveRemotely() { return filesToSaveRemotely.size(); } public boolean isFinished() { return isFinished; } public void setFinished(boolean finished) { isFinished = finished; } public boolean isStarted() { return isStarted; } public void setStarted(boolean started) { isStarted = started; start(); } @Override public String toString() { return "Script{" + "ID='" + ID + '\'' + ", localname='" + localname + '\'' + ", remotename='" + remotename + '\'' + ", scriptData=" + new String(scriptData) + ", remoteDir='" + remoteDir + '\'' + ", hasAdditionalFiles=" + hasAdditionalFiles + ", filesToSaveRemotely=" + filesToSaveRemotely + '}'; } public abstract String getSubmitCommand(); public abstract String getMonitoringCommand(); public Status getStatus() { return status; } public void setStatus(Status status) { this.status = status; } private void start() { isStarted = true; countdown.schedule(new TimerTask() { public void run() { setExpired(true); } }, maxRunTime * 1000); } }