2023-11-19 02:12:44 +03:00
|
|
|
|
package TestingSystem.Common;
|
2023-11-14 20:08:19 +03:00
|
|
|
|
import Common.Constants;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
import Common.Database.SQLITE.SQLiteDatabase;
|
2023-11-19 02:12:44 +03:00
|
|
|
|
import TestingSystem.Common.Group.GroupsDBTable;
|
|
|
|
|
|
import TestingSystem.Common.Test.TestDBTable;
|
2023-12-15 02:34:30 +03:00
|
|
|
|
import TestingSystem.Common.TestingPackageToKill.TestingPackagesToKillDBTable;
|
2023-12-14 02:30:56 +03:00
|
|
|
|
import TestingSystem.DVM.Configuration.ConfigurationDBTable;
|
|
|
|
|
|
import TestingSystem.DVM.DVMPackage.DVMPackage;
|
|
|
|
|
|
import TestingSystem.DVM.DVMPackage.DVMPackageDBTable;
|
2023-12-16 16:52:17 +03:00
|
|
|
|
import TestingSystem.DVM.DVMTasks.DVMRunTasksSet;
|
2023-12-14 02:30:56 +03:00
|
|
|
|
import TestingSystem.SAPFOR.SapforConfiguration.SapforConfigurationDBTable;
|
|
|
|
|
|
import TestingSystem.SAPFOR.SapforConfigurationCommand.SapforConfigurationCommandsDBTable;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
import TestingSystem.SAPFOR.SapforPackage.SapforPackage;
|
2023-12-15 18:38:05 +03:00
|
|
|
|
import TestingSystem.SAPFOR.SapforPackage.SapforPackageDBTable;
|
2023-12-14 02:30:56 +03:00
|
|
|
|
import TestingSystem.SAPFOR.ServerSapfor.ServerSapforsDBTable;
|
2023-11-19 02:12:44 +03:00
|
|
|
|
import Visual_DVM_2021.Passes.PassCode_2021;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
|
|
|
|
|
|
import java.nio.file.Paths;
|
2024-03-21 19:02:08 +03:00
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
|
import java.util.LinkedHashMap;
|
|
|
|
|
|
import java.util.Vector;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
public class TestsDatabase extends SQLiteDatabase {
|
|
|
|
|
|
public ConfigurationDBTable configurations;
|
|
|
|
|
|
public TestDBTable tests;
|
|
|
|
|
|
public GroupsDBTable groups;
|
2023-12-11 18:29:15 +03:00
|
|
|
|
public DVMPackageDBTable dvmPackages;
|
2023-12-15 18:38:05 +03:00
|
|
|
|
public SapforPackageDBTable sapforPackages;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
//--
|
2023-12-15 02:34:30 +03:00
|
|
|
|
public TestingPackagesToKillDBTable testingPackagesToKill;
|
|
|
|
|
|
//--
|
2023-09-17 22:13:42 +03:00
|
|
|
|
public SapforConfigurationDBTable sapforConfigurations;
|
|
|
|
|
|
public SapforConfigurationCommandsDBTable sapforConfigurationCommands;
|
2023-10-04 00:25:36 +03:00
|
|
|
|
//----
|
2023-10-03 15:07:17 +03:00
|
|
|
|
public ServerSapforsDBTable serverSapfors;
|
2023-12-16 15:34:29 +03:00
|
|
|
|
//---
|
|
|
|
|
|
public DVMRunTasksSet dvmRunTasks = new DVMRunTasksSet(); //задачи текущего пакета тестирования DVM
|
|
|
|
|
|
//--
|
2023-09-17 22:13:42 +03:00
|
|
|
|
public TestsDatabase() {
|
2023-11-14 20:08:19 +03:00
|
|
|
|
super(Paths.get(System.getProperty("user.dir"), "Data", Constants.tests_db_name + ".sqlite").toFile());
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void initAllTables() throws Exception {
|
|
|
|
|
|
addTable(configurations = new ConfigurationDBTable());
|
|
|
|
|
|
addTable(groups = new GroupsDBTable());
|
|
|
|
|
|
addTable(tests = new TestDBTable());
|
2023-12-11 18:29:15 +03:00
|
|
|
|
addTable(dvmPackages = new DVMPackageDBTable());
|
2023-12-15 18:38:05 +03:00
|
|
|
|
addTable(sapforPackages = new SapforPackageDBTable());
|
2023-12-15 02:34:30 +03:00
|
|
|
|
addTable(testingPackagesToKill = new TestingPackagesToKillDBTable());
|
2023-09-17 22:13:42 +03:00
|
|
|
|
//-
|
|
|
|
|
|
addTable(sapforConfigurations = new SapforConfigurationDBTable());
|
|
|
|
|
|
addTable(sapforConfigurationCommands = new SapforConfigurationCommandsDBTable());
|
2023-10-03 15:07:17 +03:00
|
|
|
|
addTable(serverSapfors = new ServerSapforsDBTable());
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
2023-11-16 16:20:20 +03:00
|
|
|
|
public PassCode_2021 getSynchronizePassCode() {
|
|
|
|
|
|
return PassCode_2021.SynchronizeTests;
|
|
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
public Vector<SapforPackage> getFirstActiveSapforPackagesCopies() {
|
|
|
|
|
|
Vector<SapforPackage> res = new Vector<>();
|
|
|
|
|
|
Vector<SapforPackage> 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<SapforPackage>() {
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public int compare(SapforPackage o1, SapforPackage o2) {
|
|
|
|
|
|
return Integer.compare(o1.state.ordinal(), o2.state.ordinal());
|
2023-12-14 02:30:56 +03:00
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
});
|
|
|
|
|
|
if (!packages.isEmpty()) {
|
|
|
|
|
|
activePackage = packages.lastElement();
|
|
|
|
|
|
if (activePackage.state.equals(TasksPackageState.Queued)) {
|
|
|
|
|
|
activePackage.state = TasksPackageState.TestsSynchronize;
|
2023-12-14 02:30:56 +03:00
|
|
|
|
try {
|
2024-03-21 19:02:08 +03:00
|
|
|
|
Update(activePackage);
|
2023-12-14 02:30:56 +03:00
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
res.add(new SapforPackage(activePackage));
|
|
|
|
|
|
; //копия чтобы не было конфликта доступа с нитью планировщика.
|
2023-12-14 02:30:56 +03:00
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
return res;
|
2023-12-14 02:30:56 +03:00
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
public Vector<DVMPackage> getFirstActiveDVMPackagesCopies() {
|
|
|
|
|
|
Vector<DVMPackage> res = new Vector<>();
|
|
|
|
|
|
//--
|
|
|
|
|
|
LinkedHashMap<String, Vector<DVMPackage>> packagesByMachines = new LinkedHashMap<>();
|
|
|
|
|
|
//----
|
|
|
|
|
|
//1. Получить список активных пакетов по машинам.
|
|
|
|
|
|
for (DVMPackage dvmPackage : dvmPackages.Data.values()) {
|
|
|
|
|
|
switch (dvmPackage.state) {
|
|
|
|
|
|
case Done:
|
|
|
|
|
|
case Aborted:
|
|
|
|
|
|
case Draft:
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
//активен.
|
|
|
|
|
|
Vector<DVMPackage> 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;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
}
|
|
|
|
|
|
//2. Выбрать для каждой машины наиболее приоритетный пакет.
|
|
|
|
|
|
for (String machine : packagesByMachines.keySet()) {
|
|
|
|
|
|
Vector<DVMPackage> packages = packagesByMachines.get(machine);
|
|
|
|
|
|
if (!packages.isEmpty()) {
|
|
|
|
|
|
packages.sort(new Comparator<DVMPackage>() {
|
|
|
|
|
|
@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();
|
|
|
|
|
|
}
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
res.add(new DVMPackage(activePackage)); //копия чтобы не было конфликта доступа с нитью планировщика.
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
return res;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|