2023-09-17 22:13:42 +03:00
|
|
|
package GlobalData.Tasks;
|
2024-10-07 00:58:29 +03:00
|
|
|
import Common_old.Constants;
|
|
|
|
|
import Common.Database.Objects.iDBObject;
|
|
|
|
|
import _VisualDVM.Global;
|
|
|
|
|
import Common_old.Utils.Utils;
|
2023-09-17 22:13:42 +03:00
|
|
|
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 {
|
|
|
|
|
//<editor-fold desc="файловые константы">
|
|
|
|
|
//</editor-fold>
|
|
|
|
|
public TaskState state = TaskState.Inactive;
|
|
|
|
|
//----------------------------------
|
2023-09-29 21:46:08 +03:00
|
|
|
public int machine_id = Constants.Nan;
|
|
|
|
|
public int user_id = Constants.Nan;
|
2023-09-17 22:13:42 +03:00
|
|
|
//-----------------------------------
|
|
|
|
|
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")
|
2023-09-29 21:46:08 +03:00
|
|
|
public int progressStep = Constants.Nan;
|
2023-09-17 22:13:42 +03:00
|
|
|
@Description("IGNORE")
|
2023-09-29 21:46:08 +03:00
|
|
|
public int progressAll = Constants.Nan;
|
2023-09-17 22:13:42 +03:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
//</editor-fold>
|
|
|
|
|
//<editor-fold desc="локальные файлы">
|
|
|
|
|
public abstract File getHome();
|
|
|
|
|
public File getLocalWorkspace() {
|
|
|
|
|
return Paths.get(getHome().getAbsolutePath(), String.valueOf(id)).toFile();
|
|
|
|
|
}
|
|
|
|
|
public File getOutputFile() {
|
2023-10-04 22:01:09 +03:00
|
|
|
return Paths.get(getLocalWorkspace().getAbsolutePath(), Constants.out_file).toFile();
|
2023-09-17 22:13:42 +03:00
|
|
|
}
|
|
|
|
|
public File getErrorsFile() {
|
2023-10-04 22:01:09 +03:00
|
|
|
return Paths.get(getLocalWorkspace().getAbsolutePath(), Constants.err_file).toFile();
|
2023-09-17 22:13:42 +03:00
|
|
|
}
|
|
|
|
|
public File getTimeFile() {
|
2023-10-04 22:01:09 +03:00
|
|
|
return Paths.get(getLocalWorkspace().getAbsolutePath(), Constants.time_file).toFile();
|
2023-09-17 22:13:42 +03:00
|
|
|
}
|
|
|
|
|
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() {
|
2023-09-29 21:46:08 +03:00
|
|
|
progressStep = Constants.Nan;
|
|
|
|
|
progressAll = Constants.Nan;
|
2023-09-17 22:13:42 +03:00
|
|
|
}
|
|
|
|
|
public boolean hasProgress() {
|
2023-09-29 21:46:08 +03:00
|
|
|
return (progressStep != Constants.Nan) && (progressAll != Constants.Nan);
|
2023-09-17 22:13:42 +03:00
|
|
|
}
|
|
|
|
|
//---------------------------------
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|