package _VisualDVM; import Common.Utils.CommonUtils; import Common_old.Constants; import Common_old.Current; import Common_old.GlobalProperties; import Common_old.UI.UI; import Common_old.Utils.Utils; import Common.Database.Tables.DataSet; import Common.Visual.CommonUI; import GlobalData.Account.Account; import GlobalData.Account.AccountRole; import GlobalData.GlobalDatabase; import GlobalData.Settings.DBSetting; import GlobalData.Settings.SettingName; import ProjectData.ProjectView; import Repository.Component.*; import Repository.Component.PerformanceAnalyzer.PerformanceAnalyzer; import Repository.Component.Sapfor.MessagesServer; import Repository.Component.Sapfor.Sapfor_F; import Repository.Component.Sapfor.TransformationPermission; import Repository.Server.ComponentsServer; import TestingSystem.Common.TestingServer; import TestingSystem.DVM.LocalDVMTestingPlanner; import TestingSystem.DVM.RemoteDVMTestingPlanner; import TestingSystem.SAPFOR.PackageModeSupervisor; import Visual_DVM_2021.Passes.PassCode_2021; import Visual_DVM_2021.Passes.Pass_2021; import Visual_DVM_2021.UI.Interface.Loggable; 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 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 GlobalDatabase db = null; //- public static String Home; 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 boolean isWindows; public static int bad_state = 0; public static int need_update = 0; public static int need_publish = 0; //------------------------------------------------------------------------ public static Loggable Log; public static void SynschronizeProperties() { try { File new_propertiesFile = Paths.get(Home, "properties").toFile(); 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 = Paths.get(Home, Constants.ComponentsDirectoryName).toFile()); Utils.CheckAndCleanDirectory(TempDirectory = Paths.get(Home, Constants.TempDirectoryName).toFile()); Utils.CheckDirectory(DataDirectory = Paths.get(Home, Constants.DataDirectoryName).toFile()); //- Utils.CheckDirectory(RepoDirectory = Paths.get(Home, Constants.RepoDirectoryName).toFile()); Utils.CheckDirectory(BugReportsDirectory = Paths.get(Home, Constants.BugsDirectoryName).toFile()); Utils.CheckDirectory(BackUpsDirectory = Paths.get(Home, Constants.BackUpsDirectoryName).toFile()); Utils.CheckDirectory(ProjectsDirectory = Paths.get(Home, Constants.ProjectsDirectoryName).toFile()); Utils.CheckDirectory(CompilationTasksDirectory = Paths.get(Home, Constants.CompilationTasksDirectoryName).toFile()); Utils.CheckDirectory(RunTasksDirectory = Paths.get(Home, Constants.RunTasksDirectoryName).toFile()); Utils.CheckDirectory(StsDirectory = Paths.get(Home, Constants.StsDirectoryName).toFile()); Utils.CheckDirectory(TestsDirectory = Paths.get(Home, Constants.TestsDirectoryName).toFile()); Utils.CheckDirectory(PerformanceAnalyzerDirectory = Paths.get(Home, Constants.PerformanceAnalyzerDirectoryName).toFile()); Utils.CheckDirectory(DVMPackagesDirectory = Paths.get(Home, Constants.DVMPackagesDirectoryName).toFile()); //через пару версий заменить на clean. Utils.CheckDirectory(SapforPackagesDirectory = Paths.get(Home, "SapforPackages").toFile()); Utils.CheckDirectory(MachinesDirectory = Paths.get(Home, "Machines").toFile()); } public static void CheckServerDirectories() { Utils.CheckDirectory(ComponentsDirectory = Paths.get(Home, Constants.ComponentsDirectoryName).toFile()); Utils.CheckAndCleanDirectory(TempDirectory = Paths.get(Home, Constants.TempDirectoryName).toFile()); Utils.CheckDirectory(DataDirectory = Paths.get(Home, Constants.DataDirectoryName).toFile()); //- Utils.CheckDirectory(BugReportsDirectory = Paths.get(Home, Constants.BugsDirectoryName).toFile()); Utils.CheckDirectory(DataBackUpsDirectory = Paths.get(Home, Constants.DataBackUpsDirectoryName).toFile()); Utils.CheckDirectory(MachinesDirectory = Paths.get(Home, "Machines").toFile()); } public static void CheckTestingSystemDirectories() { Utils.CheckDirectory(ComponentsDirectory = Paths.get(Home, Constants.ComponentsDirectoryName).toFile()); Utils.CheckAndCleanDirectory(TempDirectory = Paths.get(Home, Constants.TempDirectoryName).toFile()); Utils.CheckDirectory(DataDirectory = Paths.get(Home, Constants.DataDirectoryName).toFile()); //- Utils.CheckDirectory(TestsDirectory = Paths.get(Home, Constants.TestsDirectoryName).toFile()); Utils.CheckDirectory(RepoDirectory = Paths.get(Home, Constants.RepoDirectoryName).toFile()); Utils.CheckDirectory(DVMPackagesDirectory = Paths.get(Home, Constants.DVMPackagesDirectoryName).toFile()); Utils.CheckDirectory(SapforsDirectory = Paths.get(Home, "Sapfors").toFile()); Utils.CheckDirectory(SapforPackagesDirectory = Paths.get(Home, "SapforPackages").toFile()); //CheclAndClean через неделю Utils.CheckDirectory(MachinesDirectory = Paths.get(Home, "Machines").toFile()); } public static void CreateLogAtComponentsPath() { Log = new Loggable() { @Override public String getLogHomePath() { return Paths.get(System.getProperty("user.dir"), "Components").toString(); } @Override public String getLogName() { return "VisualDVM"; } }; Log.ClearLog(); } public static void CreateLogAtHome() { Log = new Loggable() { @Override public String getLogHomePath() { return Home; } @Override public String getLogName() { return Current.mode.toString(); } }; Log.ClearLog(); } //- public static void FinishApplication() { try { if (db != null) 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 (Log != null) { Log.PrintException(ex); } else { ex.printStackTrace(); } } System.exit(0); } public static void ActivateDB() throws Exception { db = new GlobalDatabase(); db.Connect(); db.CreateAllTables(); db.prepareTablesStatements(); 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); } //возможно заменить settings на properties public static DBSetting getSetting(SettingName settingName) throws Exception { switch (Current.mode) { case Normal: return db.settings.get(settingName); default: return null; } } 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 : 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 { isWindows = System.getProperty("os.name").startsWith("Windows"); removeOldDatabases(); CheckVisualiserDirectories(); CreateLogAtComponentsPath(); //- visualizer_2 = new Visualizer_2(port); visualizer_2.Connect(); visualizer_2.refreshPid(); //если делать раньше, то не удастся убить сервер. if (CommonUtils.ContainsCyrillic(Global.Home)) { UI.Info("В пути к корневой папке " + CommonUtils.DQuotes(Global.Home) + "\n" + "Найдены русские буквы.\n" + "Визуализатор завершает работу."); // FinishApplication(); } messagesServer = new MessagesServer(); messagesServer.Start(); //создание списков служебных объектов Current.CreateAll(); UI.CreateAll(); Pass_2021.CreateAll(); Utils.init(); //единственное меню до остальных. CommonUI.menuBars.put(ComponentsSet.class, new ComponentsMenuBar()); Components = new ComponentsSet(); Current.set(Current.ProjectView, ProjectView.Files); Components.put(ComponentType.Visualiser, visualiser = new Visualiser()); Components.put(ComponentType.Sapfor_F, (Component) Current.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", "Common.UI.Themes.FortranSPFTokenMaker"); atmf.putMapping("text/FreeFortranSPF", "Common.UI.Themes.FreeFortranSPFTokenMaker"); // FoldParserManager.get().addFoldParserMapping("text/FortranSPF", new FortranFolder()); блоки кода. todo //-------->> //-------->> 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 (!UI.Question("Найдено " + bad_state + " некорректных необходимых компонент.Работа визуализатора невозможна.\n" + "Вернуться к окну компонент" )) { UI.Info("Визуализатор завершает работу."); FinishApplication(); } } } while (flag); } //--- ActivateDB(); //тут current getAccount; роль по умолчанию всегда неизвестна. ///-------------- Current.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 (db.settings.get(SettingName.AutoBugReportsLoad).toBoolean()) Pass_2021.passes.get(PassCode_2021.SynchronizeBugReports).Do(); //-- if (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 { isWindows = false; CheckServerDirectories(); CreateLogAtComponentsPath(); Utils.createEmptyFile("kek"); componentsServer = new ComponentsServer(); componentsServer.ActivateDB(); componentsServer.Start(); System.exit(0); } public static void TestingSystemMode() throws Exception { isWindows = false; CheckTestingSystemDirectories(); CreateLogAtComponentsPath(); testingServer = new TestingServer(); testingServer.ActivateDB(); // testingServer.PATCH(); testingServer.Start(); System.exit(0); } //режим запуска пакета Сапфор public static void PackageMode() throws Exception { isWindows = System.getProperty("os.name").startsWith("Windows"); 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.."); Home = System.getProperty("user.dir"); //если Linux, дает без слеша в конце !!! System.out.println("home directory is" + CommonUtils.Brackets(Home)); //--- SynschronizeProperties(); Current.mode = properties.Mode; System.out.println("mode is " + Current.mode); try { switch (Current.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 (Global.Log != null) Global.Log.PrintException(ex); FinishApplication(); } } }