package _VisualDVM.Passes.All; import Common.Passes.Pass; import Common.Passes.PassException; import Common.Utils.Utils_; import _VisualDVM.Current; import _VisualDVM.Global; import _VisualDVM.GlobalData.Machine.MachineType; import _VisualDVM.GlobalData.Tasks.RunTask.RunTask; import _VisualDVM.GlobalData.Tasks.TaskState; import _VisualDVM.Passes.PassCode; import _VisualDVM.ProjectData.Project.db_project_info; import java.util.Vector; public class Run extends Pass { Pass subpass = null; Vector runTasks; @Override public String getIconPath() { return "/Common/icons/GreenStart.png"; } @Override public String getButtonText() { return ""; } @Override protected void performPreparation() throws Exception { runTasks = Global.mainModule.getRunConfiguration().generateRunTasks(target, Global.mainModule.getCompilationTask()); 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, Current.Machine, Current.User, Current.Makefile, Current.RunConfiguration, Current.CompilationTask)) { //- target = Global.mainModule.getProject(); //- if (Global.mainModule.getMachine().type.equals(MachineType.MVS_cluster) && Global.mainModule.getRunConfiguration().LauncherCall.isEmpty() ) { Log.Writeln_("Запуск напрямую на кластере запрещён.Используйте для запуска DVM систему или MPI"); } if (!Global.mainModule.getCompilationTask().state.equals(TaskState.Done)) Log.Writeln_("Текущая задача на компиляцию еще не выполнялась, или была завершена с ошибками"); return Log.isEmpty(); } return false; } @Override protected void body() throws Exception { switch (Global.mainModule.getMachine().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(Global.mainModule.getMachine().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().Refresh(); 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().Refresh(); Global.mainModule.getUI().getDebugWindow().ShowCurrentRunTask(); //- if (!task_completed) break; ++i; } if (current_task != null) { Global.mainModule.getUI().getDebugWindow().ShowLastRunTask(); } } }