package TestingSystem.Common; import Common.Constants; import Common.Database.SQLITE.SQLiteDatabase; import TestingSystem.Common.Group.GroupsDBTable; import TestingSystem.Common.Test.TestDBTable; import TestingSystem.Common.TestingPackageToKill.TestingPackagesToKillDBTable; import TestingSystem.DVM.Configuration.ConfigurationDBTable; import TestingSystem.DVM.DVMPackage.DVMPackage; import TestingSystem.DVM.DVMPackage.DVMPackageDBTable; import TestingSystem.DVM.DVMTasks.DVMRunTasksSet; import TestingSystem.SAPFOR.SapforConfiguration.SapforConfigurationDBTable; import TestingSystem.SAPFOR.SapforConfigurationCommand.SapforConfigurationCommandsDBTable; import TestingSystem.SAPFOR.SapforPackage.SapforPackage; import TestingSystem.SAPFOR.SapforPackage.SapforPackageDBTable; import TestingSystem.SAPFOR.ServerSapfor.ServerSapforsDBTable; import Visual_DVM_2021.Passes.PassCode_2021; import java.nio.file.Paths; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.Vector; public class TestsDatabase extends SQLiteDatabase { public ConfigurationDBTable configurations; public TestDBTable tests; public GroupsDBTable groups; public DVMPackageDBTable dvmPackages; public SapforPackageDBTable sapforPackages; //-- public TestingPackagesToKillDBTable testingPackagesToKill; //-- public SapforConfigurationDBTable sapforConfigurations; public SapforConfigurationCommandsDBTable sapforConfigurationCommands; //---- public ServerSapforsDBTable serverSapfors; //--- public DVMRunTasksSet dvmRunTasks = new DVMRunTasksSet(); //задачи текущего пакета тестирования DVM //-- public TestsDatabase() { super(Paths.get(System.getProperty("user.dir"), "Data", Constants.tests_db_name + ".sqlite").toFile()); } @Override protected void initAllTables() throws Exception { addTable(configurations = new ConfigurationDBTable()); addTable(groups = new GroupsDBTable()); addTable(tests = new TestDBTable()); addTable(dvmPackages = new DVMPackageDBTable()); addTable(sapforPackages = new SapforPackageDBTable()); addTable(testingPackagesToKill = new TestingPackagesToKillDBTable()); //- addTable(sapforConfigurations = new SapforConfigurationDBTable()); addTable(sapforConfigurationCommands = new SapforConfigurationCommandsDBTable()); addTable(serverSapfors = new ServerSapforsDBTable()); } @Override public PassCode_2021 getSynchronizePassCode() { return PassCode_2021.SynchronizeTests; } public Vector getFirstActiveSapforPackagesCopies() { Vector res = new Vector<>(); Vector packages = new Vector<>(); SapforPackage activePackage = null; //1. получить активные пакеты. for (SapforPackage p : sapforPackages.Data.values()) { switch (p.state) { case Done: case Aborted: case Draft: break; default: packages.add(p); break; } } //2. отсортировать по приоритету. packages.sort(new Comparator() { @Override public int compare(SapforPackage o1, SapforPackage o2) { return Integer.compare(o1.state.ordinal(), o2.state.ordinal()); } }); if (!packages.isEmpty()) { activePackage = packages.lastElement(); if (activePackage.state.equals(TasksPackageState.Queued)) { activePackage.state = TasksPackageState.TestsSynchronize; try { Update(activePackage); } catch (Exception ex) { ex.printStackTrace(); } } res.add(new SapforPackage(activePackage)); ; //копия чтобы не было конфликта доступа с нитью планировщика. } return res; } public Vector getFirstActiveDVMPackagesCopies() { Vector res = new Vector<>(); //-- LinkedHashMap> packagesByMachines = new LinkedHashMap<>(); //---- //1. Получить список активных пакетов по машинам. for (DVMPackage dvmPackage : dvmPackages.Data.values()) { switch (dvmPackage.state) { case Done: case Aborted: case Draft: break; default: //активен. Vector packages = null; //-- if (packagesByMachines.containsKey(dvmPackage.machine_address)) { packages = packagesByMachines.get(dvmPackage.machine_address); } else { packages = new Vector<>(); packagesByMachines.put(dvmPackage.machine_address, packages); } packages.add(dvmPackage); break; } } //2. Выбрать для каждой машины наиболее приоритетный пакет. for (String machine : packagesByMachines.keySet()) { Vector packages = packagesByMachines.get(machine); if (!packages.isEmpty()) { packages.sort(new Comparator() { @Override public int compare(DVMPackage o1, DVMPackage o2) { return Integer.compare(o1.state.ordinal(), o2.state.ordinal()); } }); //- DVMPackage activePackage = packages.lastElement(); if (activePackage.state.equals(TasksPackageState.Queued)) { activePackage.state = TasksPackageState.TestsSynchronize; try { Update(activePackage); } catch (Exception ex) { ex.printStackTrace(); } } res.add(new DVMPackage(activePackage)); //копия чтобы не было конфликта доступа с нитью планировщика. } } return res; } }