126 lines
5.2 KiB
Java
126 lines
5.2 KiB
Java
package _VisualDVM.Passes.All;
|
||
import Common.MainModule_;
|
||
import Common.Passes.Pass;
|
||
import Common.Passes.PassException;
|
||
import Common.Utils.Utils_;
|
||
import _VisualDVM.Current;
|
||
import _VisualDVM.Global;
|
||
import _VisualDVM.GlobalData.Machine.Machine;
|
||
import _VisualDVM.GlobalData.Machine.MachineType;
|
||
import _VisualDVM.GlobalData.Makefile.Makefile;
|
||
import _VisualDVM.GlobalData.RunConfiguration.RunConfiguration;
|
||
import _VisualDVM.GlobalData.Tasks.CompilationTask.CompilationTask;
|
||
import _VisualDVM.GlobalData.Tasks.RunTask.RunTask;
|
||
import _VisualDVM.GlobalData.Tasks.TaskState;
|
||
import _VisualDVM.GlobalData.User.User;
|
||
import _VisualDVM.Passes.PassCode;
|
||
import _VisualDVM.ProjectData.Project.db_project_info;
|
||
|
||
import java.util.Vector;
|
||
public class Run extends Pass<db_project_info> {
|
||
Pass subpass = null;
|
||
Vector<RunTask> runTasks;
|
||
@Override
|
||
public String getIconPath() {
|
||
return "/Common/icons/GreenStart.png";
|
||
}
|
||
@Override
|
||
public String getButtonText() {
|
||
return "";
|
||
}
|
||
@Override
|
||
protected void performPreparation() throws Exception {
|
||
runTasks = MainModule_.instance.getDb().getTable(RunConfiguration.class).getUI().getCurrent().generateRunTasks(target,
|
||
MainModule_.instance.getDb().getTable(CompilationTask.class).getUI().getCurrent()
|
||
);
|
||
for (RunTask runTask : runTasks) {
|
||
Global.mainModule.getDb().Insert(runTask);
|
||
Utils_.forceDeleteWithCheck(runTask.getLocalWorkspace());
|
||
}
|
||
}
|
||
@Override
|
||
protected void showPreparation() throws Exception {
|
||
Global.mainModule.getDb().runTasks.ShowUI();
|
||
}
|
||
@Override
|
||
protected boolean canStart(Object... args) {
|
||
subpass = null;
|
||
if ((Global.mainModule.Check(Log, Current.Project)) &&
|
||
MainModule_.instance.getDb().CheckCurrent(Log, Machine.class, User.class, Makefile.class, RunConfiguration.class, CompilationTask.class)) {
|
||
//-
|
||
target = Global.mainModule.getProject();
|
||
//-
|
||
if (MainModule_.instance.getDb().getTable(Machine.class).getUI().getCurrent().type.equals(MachineType.MVS_cluster) &&
|
||
MainModule_.instance.getDb().getTable(RunConfiguration.class).getUI().getCurrent().LauncherCall.isEmpty()
|
||
) {
|
||
Log.Writeln_("Запуск напрямую на кластере запрещён.Используйте для запуска DVM систему или MPI");
|
||
}
|
||
if (!MainModule_.instance.getDb().getTable(CompilationTask.class).getUI().getCurrent().state.equals(TaskState.Done))
|
||
Log.Writeln_("Текущая задача на компиляцию еще не выполнялась, или была завершена с ошибками");
|
||
return Log.isEmpty();
|
||
}
|
||
return false;
|
||
}
|
||
@Override
|
||
protected void body() throws Exception {
|
||
switch (MainModule_.instance.getDb().getTable(Machine.class).getUI().getCurrent().type) {
|
||
case Local:
|
||
if (Utils_.isWindows()) {
|
||
subpass = Global.mainModule.getPass(PassCode.WindowsLocalRun);
|
||
} else
|
||
subpass = Global.mainModule.getPass(PassCode.LinuxLocalRun);
|
||
break;
|
||
case Undefined:
|
||
case MVS_cluster:
|
||
throw new PassException("Запуск не реализован для типа машины "
|
||
+ Utils_.DQuotes(
|
||
MainModule_.instance.getDb().getTable(Machine.class).getUI().getCurrent().type));
|
||
/*
|
||
case MVS_cluster:
|
||
subpass = passes.get(PassCode_2021.MVSRun);
|
||
break;
|
||
*/
|
||
default:
|
||
subpass = Global.mainModule.getPass(PassCode.ServerRun);
|
||
break;
|
||
}
|
||
int i = 1;
|
||
RunTask current_task = null;
|
||
for (RunTask task : runTasks) {
|
||
current_task = task;
|
||
boolean task_completed = false;
|
||
task.setProgress(i, runTasks.size());
|
||
//-
|
||
Global.mainModule.getDb().runTasks.getUI().RedrawControl();
|
||
Global.mainModule.getDb().runTasks.getUI().SetCurrentByPK(task.id);
|
||
//-
|
||
subpass.Do(task, target);
|
||
//-
|
||
switch (task.state) {
|
||
case Done:
|
||
case DoneWithErrors:
|
||
task_completed = true;
|
||
if (task.hasDvmSts) {
|
||
Utils_.CheckAndCleanDirectory(Global.mainModule.getProject().getStatisticDirectory());
|
||
Global.mainModule.getPass(PassCode.SPF_StatisticAnalyzer).Do(task);
|
||
}
|
||
break;
|
||
case Finished:
|
||
case Crushed:
|
||
case AbortedByTimeout:
|
||
task_completed = true;
|
||
break;
|
||
}
|
||
//-
|
||
Global.mainModule.getDb().runTasks.getUI().RedrawControl();
|
||
Global.mainModule.getUI().getDebugWindow().ShowCurrentRunTask();
|
||
//-
|
||
if (!task_completed) break;
|
||
++i;
|
||
}
|
||
if (current_task != null) {
|
||
Global.mainModule.getUI().getDebugWindow().ShowLastRunTask();
|
||
}
|
||
}
|
||
}
|