package GlobalData.Tasks; import Common.Constants.Constants; import Common.Database.iDBObject; import Common.Global; import Common.Utils.Utils; import GlobalData.Machine.Machine; import GlobalData.User.User; import ProjectData.Project.db_project_info; import com.sun.org.glassfish.gmbal.Description; import java.io.File; import java.nio.file.Paths; import java.util.Date; public abstract class Task extends iDBObject { // // public TaskState state = TaskState.Inactive; //---------------------------------- public int machine_id = Constants.Nan; public int user_id = Constants.Nan; //----------------------------------- public String PID = ""; public String project_path;// путь к проекту. public String project_description; // краткое описание(чтобы не лезть в бд целевого проекта). только для таблицы. public int maxtime = 40; //результаты------------------------------- public double Time; //время выполнения. public long StartDate = 0; //дата начала выполнения public long EndDate = 0;//дата окончания выполнения //--------------------------------- @Description("IGNORE") public int progressStep = Constants.Nan; @Description("IGNORE") public int progressAll = Constants.Nan; public boolean belongsToProject(db_project_info project) { return this.project_path.equalsIgnoreCase(project.Home.getAbsolutePath()); } public void DropResults() throws Exception { Utils.forceDeleteWithCheck(getOutputFile()); Utils.forceDeleteWithCheck(getErrorsFile()); //- StartDate = 0; EndDate = 0; Time = 0; state = TaskState.Inactive; Global.db.Update(this); } // // public abstract File getHome(); public File getLocalWorkspace() { return Paths.get(getHome().getAbsolutePath(), String.valueOf(id)).toFile(); } public File getOutputFile() { return Paths.get(getLocalWorkspace().getAbsolutePath(), db_project_info.out_file).toFile(); } public File getErrorsFile() { return Paths.get(getLocalWorkspace().getAbsolutePath(), db_project_info.err_file).toFile(); } public File getTimeFile() { return Paths.get(getLocalWorkspace().getAbsolutePath(), db_project_info.time_file).toFile(); } public abstract String getFullCommand(); public Date getEndDate() { return new Date(EndDate); } public Machine getMachine() { return Global.db.getById(Machine.class, machine_id); } public User getUser() { return Global.db.getById(User.class, user_id); } protected String getTextResult(File file) { return (file.exists()) ? Utils.ReadAllText(file) : "файл не найден. Задача еще не выполнялась или была завершена некорректно"; } //подразумевается, что выходные потоки задачи видны только при открытом проекте public String getOutput() { return getTextResult(getOutputFile()); } public String getErrors() { return getTextResult(getErrorsFile()); } public void RefreshTime() { Time = Double.parseDouble(Utils.ReadAllText(getTimeFile())); } public void MaximizeTime() { Time = maxtime + 1; } public void UpdateState(TaskState state_in) { if (state != state_in) { state = state_in; try { Global.db.Update(this); } catch (Exception ex) { Global.Log.PrintException(ex); } } } public void Reset() { PID = ""; StartDate = 0; EndDate = 0; state = TaskState.Inactive; } public void setProgress(int progressStep_in, int progressAll_in) { progressStep = progressStep_in; progressAll = progressAll_in; } public void dropProgress() { progressStep = Constants.Nan; progressAll = Constants.Nan; } public boolean hasProgress() { return (progressStep != Constants.Nan) && (progressAll != Constants.Nan); } //--------------------------------- public void AnalyzeResultsTexts(db_project_info project) throws Exception { state = TaskState.Done; AnalyzeOutFile(project); AnalyzeErrorsFile(project); } public void AnalyzeOutFile(db_project_info project) throws Exception { } public void AnalyzeErrorsFile(db_project_info project) throws Exception { } public boolean isPassive() { return (state != TaskState.Queued) && (state != TaskState.Running); } }