package _VisualDVM; import Common.CurrentAnchestor; import Common.Database.Tables.DataSet; import Common.Mode; import Common.Utils.CommonUtils; import Common.Utils.Loggable; import Common.Visual.CommonUI; import _VisualDVM.GlobalData.Account.Account; import _VisualDVM.GlobalData.Account.AccountRole; import _VisualDVM.GlobalData.GlobalDatabase; import _VisualDVM.GlobalData.Settings.DBSetting; import _VisualDVM.GlobalData.Settings.SettingName; import _VisualDVM.ProjectData.ProjectView; import _VisualDVM.Repository.Component.*; import _VisualDVM.Repository.Component.PerformanceAnalyzer.PerformanceAnalyzer; import _VisualDVM.Repository.Component.Sapfor.MessagesServer; import _VisualDVM.Repository.Component.Sapfor.Sapfor_F; import _VisualDVM.Repository.Component.Sapfor.TransformationPermission; import _VisualDVM.Repository.Server.ComponentsServer; import _VisualDVM.TestingSystem.Common.TestingServer; import _VisualDVM.TestingSystem.DVM.LocalDVMTestingPlanner; import _VisualDVM.TestingSystem.DVM.RemoteDVMTestingPlanner; import _VisualDVM.TestingSystem.SAPFOR.PackageModeSupervisor; import Visual_DVM_2021.Passes.PassCode_2021; import Visual_DVM_2021.Passes.Pass_2021; import _VisualDVM.Visual.Syntax.LightSPFEditorTheme; import _VisualDVM.Visual.UI; import org.fife.ui.rsyntaxtextarea.AbstractTokenMakerFactory; import org.fife.ui.rsyntaxtextarea.TokenMakerFactory; import java.io.File; import java.nio.file.Paths; import java.util.Vector; public class Global { //Режим public static Mode mode = Mode.Undefined; //-------------------------------------------------- public static GlobalProperties properties = new GlobalProperties(); // //------------------------------------------------------ public static boolean enable_text_changed = false; //--- public static boolean files_multiselection = false; public static boolean versions_multiselection = false; //--- public static TransformationPermission transformationPermission = TransformationPermission.None; //?? public static DataSet Components = null; public static MessagesServer messagesServer = null; public static File ComponentsDirectory; public static File DataDirectory; public static File BugReportsDirectory; public static File BackUpsDirectory; public static File TempDirectory; public static File ProjectsDirectory; public static File CompilationTasksDirectory; public static File RunTasksDirectory; public static File StsDirectory; public static File RepoDirectory; public static File TestsDirectory; public static File PerformanceAnalyzerDirectory; public static File DataBackUpsDirectory; public static File DVMPackagesDirectory; public static File SapforsDirectory; public static File SapforPackagesDirectory; public static File MachinesDirectory; //------------------------------------------------------------------ public static Visualiser visualiser = null; public static Visualizer_2 visualizer_2 = null; public static PerformanceAnalyzer performanceAnalyzer = null; //------------------------------------------------------------------ public static ComponentsServer componentsServer = new ComponentsServer(); public static TestingServer testingServer = new TestingServer(); public static int bad_state = 0; public static int need_update = 0; public static int need_publish = 0; public static void SynschronizeProperties() { try { File new_propertiesFile = new File(CommonUtils.getHomeDirectory(), "properties"); if (new_propertiesFile.exists()) properties = (GlobalProperties) CommonUtils.jsonFromFile(new_propertiesFile, GlobalProperties.class); CommonUtils.jsonToFile(properties, new_propertiesFile); } catch (Exception ex) { ex.printStackTrace(); } } public static void CheckVisualiserDirectories() { Utils.CheckDirectory(ComponentsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.ComponentsDirectoryName)); Utils.CheckAndCleanDirectory(TempDirectory = new File(CommonUtils.getHomeDirectory(), Constants.TempDirectoryName)); Utils.CheckDirectory(DataDirectory = new File(CommonUtils.getHomeDirectory(), Constants.DataDirectoryName)); //- Utils.CheckDirectory(RepoDirectory = new File(CommonUtils.getHomeDirectory(), Constants.RepoDirectoryName)); Utils.CheckDirectory(BugReportsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.BugsDirectoryName)); Utils.CheckDirectory(BackUpsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.BackUpsDirectoryName)); Utils.CheckDirectory(ProjectsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.ProjectsDirectoryName)); Utils.CheckDirectory(CompilationTasksDirectory = new File(CommonUtils.getHomeDirectory(), Constants.CompilationTasksDirectoryName)); Utils.CheckDirectory(RunTasksDirectory = new File(CommonUtils.getHomeDirectory(), Constants.RunTasksDirectoryName)); Utils.CheckDirectory(StsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.StsDirectoryName)); Utils.CheckDirectory(TestsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.TestsDirectoryName)); Utils.CheckDirectory(PerformanceAnalyzerDirectory = new File(CommonUtils.getHomeDirectory(), Constants.PerformanceAnalyzerDirectoryName)); Utils.CheckDirectory(DVMPackagesDirectory = new File(CommonUtils.getHomeDirectory(), Constants.DVMPackagesDirectoryName)); //через пару версий заменить на clean. Utils.CheckDirectory(SapforPackagesDirectory = new File(CommonUtils.getHomeDirectory(), "SapforPackages")); Utils.CheckDirectory(MachinesDirectory = new File(CommonUtils.getHomeDirectory(), "Machines")); } public static void CheckServerDirectories() { Utils.CheckDirectory(ComponentsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.ComponentsDirectoryName)); Utils.CheckAndCleanDirectory(TempDirectory = new File(CommonUtils.getHomeDirectory(), Constants.TempDirectoryName)); Utils.CheckDirectory(DataDirectory = new File(CommonUtils.getHomeDirectory(), Constants.DataDirectoryName)); //- Utils.CheckDirectory(BugReportsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.BugsDirectoryName)); Utils.CheckDirectory(DataBackUpsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.DataBackUpsDirectoryName)); Utils.CheckDirectory(MachinesDirectory = new File(CommonUtils.getHomeDirectory(), "Machines")); } public static void CheckTestingSystemDirectories() { Utils.CheckDirectory(ComponentsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.ComponentsDirectoryName)); Utils.CheckAndCleanDirectory(TempDirectory = new File(CommonUtils.getHomeDirectory(), Constants.TempDirectoryName)); Utils.CheckDirectory(DataDirectory = new File(CommonUtils.getHomeDirectory(), Constants.DataDirectoryName)); //- Utils.CheckDirectory(TestsDirectory = new File(CommonUtils.getHomeDirectory(), Constants.TestsDirectoryName)); Utils.CheckDirectory(RepoDirectory = new File(CommonUtils.getHomeDirectory(), Constants.RepoDirectoryName)); Utils.CheckDirectory(DVMPackagesDirectory = new File(CommonUtils.getHomeDirectory(), Constants.DVMPackagesDirectoryName)); Utils.CheckDirectory(SapforsDirectory = new File(CommonUtils.getHomeDirectory(), "Sapfors")); Utils.CheckDirectory(SapforPackagesDirectory = new File(CommonUtils.getHomeDirectory(), "SapforPackages")); //CheclAndClean через неделю Utils.CheckDirectory(MachinesDirectory = new File(CommonUtils.getHomeDirectory(), "Machines")); } public static void CreateLogAtComponentsPath() { CommonUtils.MainLog = new Loggable() { @Override public String getLogHomePath() { return Paths.get(System.getProperty("user.dir"), "Components").toString(); } @Override public String getLogName() { return "VisualDVM"; } }; CommonUtils.MainLog.ClearLog(); } public static void CreateLogAtHome() { CommonUtils.MainLog = new Loggable() { @Override public String getLogHomePath() { return CommonUtils.getHomePath(); } @Override public String getLogName() { return mode.toString(); } }; CommonUtils.MainLog.ClearLog(); } //- public static void FinishApplication() { try { if (CommonUtils.db != null) CommonUtils.db.Disconnect(); if (componentsServer.db != null) componentsServer.db.Disconnect(); if (testingServer.db != null) testingServer.db.Disconnect(); if (visualizer_2 != null) visualizer_2.Shutdown(); if (messagesServer != null) messagesServer.Shutdown(); if (performanceAnalyzer != null) performanceAnalyzer.Shutdown(); } catch (Exception ex) { if (CommonUtils.MainLog != null) { CommonUtils.MainLog.PrintException(ex); } else { ex.printStackTrace(); } } System.exit(0); } public static void ActivateDB() throws Exception { CommonUtils.db = new GlobalDatabase(); CommonUtils.db.Connect(); CommonUtils.db.CreateAllTables(); CommonUtils.db.prepareTablesStatements(); CommonUtils.db.Synchronize(); } public static void RefreshUpdatesStatus() { Components.RefreshUI(); ValidateComponentsStates(); if (UI.HasMainWindow()) UI.getMainWindow().ShowUpdatesIcon(); } public static boolean ValidateComponentsStates() { bad_state = need_update = need_publish = 0; for (Component component : Components.Data.values()) { if (component.isVisible()) { switch (component.getState()) { case Not_found: case Unknown_version: case Old_version: if (component.isNecessary()) bad_state++; component.Select(true); break; case Needs_update: need_update++; component.Select(true); break; case Needs_publish: need_publish++; break; default: component.Select(false); break; } } } return (bad_state == 0); } public static void changeSetting(SettingName settingName, Object new_value) throws Exception { Pass_2021.passes.get(PassCode_2021.UpdateSetting).Do(settingName, new_value); } public static String packSapforSettings() { Vector res_ = new Vector<>(); Vector forbidden = new Vector<>(); forbidden.add(SettingName.GCOVLimit); forbidden.add(SettingName.Precompilation); forbidden.add(SettingName.DVMConvertationOptions); forbidden.add(SettingName.SaveModifications); for (DBSetting setting : ((GlobalDatabase) CommonUtils.db).settings.getSettingsByOwner(ComponentType.SapforOptions)) { if (!forbidden.contains(setting.Name)) res_.add(setting.Value); } return String.join("|", res_); } //-- public static void removeOldDatabases() { File data = Paths.get(System.getProperty("user.dir"), "Data").toFile(); File[] files = data.listFiles(); if (files != null) { for (File file : files) { if (file.getName().contains(Constants.old_tests_db_name)) { try { Utils.forceDeleteWithCheck(file); } catch (Exception ex) { ex.printStackTrace(); } } } } } public static void NormalMode(int port) throws Exception { CommonUI.active = true; CommonUI.setTheme(new LightSPFEditorTheme()); removeOldDatabases(); CheckVisualiserDirectories(); CreateLogAtComponentsPath(); //- visualizer_2 = new Visualizer_2(port); visualizer_2.Connect(); visualizer_2.refreshPid(); //если делать раньше, то не удастся убить сервер. if (CommonUtils.ContainsCyrillic(CommonUtils.getHomePath())) { CommonUI.Info("В пути к корневой папке " + CommonUtils.DQuotes(CommonUtils.getHomePath()) + "\n" + "Найдены русские буквы.\n" + "Визуализатор завершает работу."); // FinishApplication(); } messagesServer = new MessagesServer(); messagesServer.Start(); //создание списков служебных объектов UI.CreateAll(); Pass_2021.CreateAll(); //единственное меню до остальных. CommonUI.menuBars.put(ComponentsSet.class, new ComponentsMenuBar()); Components = new ComponentsSet(); CurrentAnchestor.set(Current.ProjectView, ProjectView.Files); Components.put(ComponentType.Visualiser, visualiser = new Visualiser()); Components.put(ComponentType.Sapfor_F, (Component) CurrentAnchestor.set(Current.Sapfor, new Sapfor_F())); Components.put(ComponentType.Visualizer_2, visualizer_2); Components.put(ComponentType.PerformanceAnalyzer, performanceAnalyzer = new PerformanceAnalyzer()); Components.put(ComponentType.Instruction, new Instruction()); //- for (Component component : Components.Data.values()) if (component.isVisible()) component.InitialVersionCheck(); //- UI.CreateComponentsForm(); AbstractTokenMakerFactory atmf = (AbstractTokenMakerFactory) TokenMakerFactory.getDefaultInstance(); atmf.putMapping("text/FortranSPF", "_VisualDVM.Visual.Syntax.FortranSPFTokenMaker"); atmf.putMapping("text/FreeFortranSPF", "_VisualDVM.Visual.Syntax.FreeFortranSPFTokenMaker"); // FoldParserManager.get().addFoldParserMapping("text/FortranSPF", new FortranFolder()); блоки кода. todo //light_editor.xml-------->> //-------->> if (properties.AutoUpdateSearch) Pass_2021.passes.get(PassCode_2021.GetComponentsActualVersions).Do(); ValidateComponentsStates(); if ((need_update > 0) || (bad_state > 0)) { boolean flag = true; do { UI.ShowComponentsWindow(); if (flag = (!ValidateComponentsStates())) { if (!CommonUI.Question("Найдено " + bad_state + " некорректных необходимых компонент.Работа визуализатора невозможна.\n" + "Вернуться к окну компонент" )) { CommonUI.Info("Визуализатор завершает работу."); FinishApplication(); } } } while (flag); } //--- ActivateDB(); //тут current getAccount; роль по умолчанию всегда неизвестна. ///-------------- CurrentAnchestor.set(Current.Account, new Account() { { name = "M"; email = "vmk-post@yandex.ru"; role = AccountRole.Admin; } }); // Pass_2021.passes.get(PassCode_2021.CheckAccount).Do(); //--------------- componentsServer.ActivateDB(); testingServer.ActivateDB(); //в проперти их! //-- чисто чтобы создать таблицы. соединения на стороне клиента не предвидится. if (((GlobalDatabase) CommonUtils.db).settings.get(SettingName.AutoBugReportsLoad).toBoolean()) Pass_2021.passes.get(PassCode_2021.SynchronizeBugReports).Do(); //-- if (((GlobalDatabase) CommonUtils.db).settings.get(SettingName.AutoTestsLoad).toBoolean()) Pass_2021.passes.get(PassCode_2021.SynchronizeTests).Do(); Pass_2021.CheckAllStats(); Current.getSapfor().refreshPid(); //без сапфора сюда это все равно не дойдет. UI.CreateMenus(); UI.CreateWindows(); } public static void ServerMode() throws Exception { CheckServerDirectories(); CreateLogAtComponentsPath(); Utils.createEmptyFile("kek"); componentsServer = new ComponentsServer(); componentsServer.ActivateDB(); componentsServer.Start(); System.exit(0); } public static void TestingSystemMode() throws Exception { CheckTestingSystemDirectories(); CreateLogAtComponentsPath(); testingServer = new TestingServer(); testingServer.ActivateDB(); // testingServer.PATCH(); testingServer.Start(); System.exit(0); } //режим запуска пакета Сапфор public static void PackageMode() throws Exception { CreateLogAtHome(); PackageModeSupervisor planner = new PackageModeSupervisor(); planner.Start(); } public static void MachineQueueMode(String... args) throws Exception { RemoteDVMTestingPlanner supervisor = new RemoteDVMTestingPlanner(args); while (true) { supervisor.Perform(); } } public static void LocalMachineQueueMode(String... args) throws Exception { LocalDVMTestingPlanner supervisor = new LocalDVMTestingPlanner(args); while (true) { supervisor.Perform(); } } //--- public static void Init(String... args) { System.out.println("VisualSapfor.jar started.."); System.out.println("home directory is" + CommonUtils.Brackets(CommonUtils.getHomePath())); //--- SynschronizeProperties(); mode = properties.Mode; System.out.println("mode is " + mode); try { switch (mode) { case Normal: NormalMode(Integer.parseInt(args[1])); break; case Server: ServerMode(); break; case Testing: TestingSystemMode(); break; case Package: PackageMode(); break; case MachineQueue: MachineQueueMode(args); break; case LocalMachineQueue: LocalMachineQueueMode(args); break; case Undefined: break; } } catch (Exception ex) { System.out.println("VISUALISER FAILED"); ex.printStackTrace(); if (CommonUtils.MainLog != null) CommonUtils.MainLog.PrintException(ex); FinishApplication(); } } }