Files
VisualSapfor/src/_VisualDVM/GlobalData/Tasks/Task.java

132 lines
5.0 KiB
Java
Raw Normal View History

2024-10-09 22:21:57 +03:00
package _VisualDVM.GlobalData.Tasks;
2024-10-07 14:22:52 +03:00
import Common.CommonConstants;
2024-10-14 15:19:13 +03:00
import Common.Database.Objects.iDBObject;
2024-10-11 00:00:30 +03:00
import Common.Utils.Utils_;
2024-10-09 22:01:19 +03:00
import _VisualDVM.Constants;
2024-10-12 00:17:51 +03:00
import _VisualDVM.Global;
2024-10-09 22:21:57 +03:00
import _VisualDVM.GlobalData.Machine.Machine;
import _VisualDVM.GlobalData.User.User;
import _VisualDVM.ProjectData.Project.db_project_info;
2024-10-14 15:19:13 +03:00
import _VisualDVM.Utils;
2023-09-17 22:13:42 +03:00
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;
//----------------------------------
2024-10-07 14:22:52 +03:00
public int machine_id = CommonConstants.Nan;
public int user_id = CommonConstants.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")
2024-10-07 14:22:52 +03:00
public int progressStep = CommonConstants.Nan;
2023-09-17 22:13:42 +03:00
@Description("IGNORE")
2024-10-07 14:22:52 +03:00
public int progressAll = CommonConstants.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 {
2024-10-14 12:54:52 +03:00
Utils_.forceDeleteWithCheck(getOutputFile());
Utils_.forceDeleteWithCheck(getErrorsFile());
2023-09-17 22:13:42 +03:00
//-
StartDate = 0;
EndDate = 0;
Time = 0;
state = TaskState.Inactive;
2024-10-12 00:17:51 +03:00
Global.mainModule.getDb().Update(this);
2023-09-17 22:13:42 +03:00
}
//</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() {
2024-10-12 00:17:51 +03:00
return Global.mainModule.getDb().getById(Machine.class, machine_id);
2023-09-17 22:13:42 +03:00
}
public User getUser() {
2024-10-12 00:17:51 +03:00
return Global.mainModule.getDb().getById(User.class, user_id);
2023-09-17 22:13:42 +03:00
}
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 {
2024-10-12 00:17:51 +03:00
Global.mainModule.getDb().Update(this);
2023-09-17 22:13:42 +03:00
} catch (Exception ex) {
2024-10-11 00:00:30 +03:00
Utils_.MainLog.PrintException(ex);
2023-09-17 22:13:42 +03:00
}
}
}
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() {
2024-10-07 14:22:52 +03:00
progressStep = CommonConstants.Nan;
progressAll = CommonConstants.Nan;
2023-09-17 22:13:42 +03:00
}
public boolean hasProgress() {
2024-10-07 14:22:52 +03:00
return (progressStep != CommonConstants.Nan) && (progressAll != CommonConstants.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);
}
}