package _VisualDVM.Passes.All; import Common.Utils.Utils_; import _VisualDVM.Current; import _VisualDVM.Global; import _VisualDVM.Visual.UI; import _VisualDVM.GlobalData.Tasks.CompilationTask.CompilationTask; import _VisualDVM.GlobalData.Tasks.TaskState; import _VisualDVM.GlobalData.User.UserState; import _VisualDVM.ProjectData.LanguageName; import _VisualDVM.ProjectData.Project.db_project_info; import _VisualDVM.Passes.PassCode; import Common.Passes.PassException; import Common.Passes.Pass; public class Compile extends Pass { Pass subpass = null; CompilationTask compilationTask = null; @Override protected PassCode necessary() { return Global.mainModule.getProject().languageName.equals(LanguageName.fortran) ? PassCode.SPF_ParseFilesWithOrder : null; } @Override public String getIconPath() { return "/icons/Start.png"; } @Override public String getButtonText() { return ""; } @Override protected boolean canStart(Object... args) { if (Global.mainModule.Check(Log, Current.Project, Current.Machine, Current.User, Current.Makefile)) { target = Global.mainModule.getProject(); subpass = null; compilationTask = null; if (Global.mainModule.getUser().state != UserState.ready_to_work) Log.Writeln_("Пользователь " + Utils_.Brackets(Global.mainModule.getUser().login) + " не проинициализирован\nПерейдите на вкладку 'Настройки компиляции и запуска',\n" + " и выполните команду 'Инициализация пользователя'\n"); Global.mainModule.getMakefile().Validate(Log); return Log.isEmpty(); } return false; } @Override protected void performPreparation() throws Exception { compilationTask = new CompilationTask(); compilationTask.machine_id = Global.mainModule.getMachine().id; compilationTask.user_id = Global.mainModule.getUser().id; compilationTask.makefile_id = Global.mainModule.getMakefile().id; compilationTask.project_path = target.Home.getAbsolutePath(); compilationTask.project_description = target.description; //------------------------------------------ compilationTask.CompleteSummary(target.compilation_maxtime); compilationTask.state = TaskState.Inactive; Global.mainModule.getDb().Insert(compilationTask); Utils_.forceDeleteWithCheck(compilationTask.getLocalWorkspace()); } @Override protected void showPreparation() throws Exception { Global.mainModule.getDb().compilationTasks.ShowUI(compilationTask.getPK()); } @Override protected void body() throws Exception { switch (Global.mainModule.getMachine().type) { case Local: if (Utils_.isWindows()) { subpass = Global.mainModule.getPass(PassCode.WindowsLocalCompilation); } else subpass = Global.mainModule.getPass(PassCode.LinuxLocalCompilation); break; case Undefined: case MVS_cluster: throw new PassException("Компиляция не реализована для типа машины " + Utils_.DQuotes(Global.mainModule.getMachine().type)); default: subpass = Global.mainModule.getPass(PassCode.RemoteCompilation); break; } subpass.Do(Global.mainModule.getCompilationTask(), Global.mainModule.getProject()); } @Override protected boolean validate() { return (subpass != null) && subpass.isDone(); } @Override protected void showFinish() throws Exception { Global.mainModule.getDb().compilationTasks.ShowUI(compilationTask.getPK()); UI.getDebugWindow().ShowLastCompilationTask(); } }