Files
VisualSapfor/src/_VisualDVM/TestingSystem/Common/TestsDatabase.java
02090095 0b5f8c6ec7 ++
рефакторинг бд файлов тестов.
2025-03-20 17:48:18 +03:00

387 lines
16 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package _VisualDVM.TestingSystem.Common;
import Common.CommonConstants;
import Common.Database.SQLITE.SQLiteDatabase;
import Common.Utils.Utils_;
import _VisualDVM.ComponentsServer.Component.Sapfor.Sapfor;
import _VisualDVM.ComponentsServer.UserAccount.UserAccount;
import _VisualDVM.Constants;
import _VisualDVM.Global;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.ServerObjectsCache.VisualCaches;
import _VisualDVM.TestingSystem.Common.Group.Group;
import _VisualDVM.TestingSystem.Common.Group.GroupsDBTable;
import _VisualDVM.TestingSystem.Common.Test.Json.TestFileJson;
import _VisualDVM.TestingSystem.Common.Test.Json.TestFilesJson;
import _VisualDVM.TestingSystem.Common.Test.Test;
import _VisualDVM.TestingSystem.Common.Test.TestDBTable;
import _VisualDVM.TestingSystem.Common.TestFile.TestFile;
import _VisualDVM.TestingSystem.Common.TestFile.TestFilesDBTable;
import _VisualDVM.TestingSystem.Common.TestingPackageToKill.TestingPackagesToKillDBTable;
import _VisualDVM.TestingSystem.DVM.DVMConfiguration.DVMConfiguration;
import _VisualDVM.TestingSystem.DVM.DVMConfiguration.DVMConfigurationDBTable;
import _VisualDVM.TestingSystem.DVM.DVMPackage.DVMPackage;
import _VisualDVM.TestingSystem.DVM.DVMPackage.DVMPackageDBTable;
import _VisualDVM.TestingSystem.DVM.DVMSettings.DVMSettingsDBTable;
import _VisualDVM.TestingSystem.DVM.DVMTasks.DVMRunTasksSet;
import _VisualDVM.TestingSystem.SAPFOR.SapforConfiguration.SapforConfiguration;
import _VisualDVM.TestingSystem.SAPFOR.SapforConfiguration.SapforConfigurationDBTable;
import _VisualDVM.TestingSystem.SAPFOR.SapforPackage.SapforPackage;
import _VisualDVM.TestingSystem.SAPFOR.SapforPackage.SapforPackageDBTable;
import _VisualDVM.TestingSystem.SAPFOR.SapforSettings.SapforSettingsDBTable;
import _VisualDVM.TestingSystem.SAPFOR.SapforSettingsCommand.SapforSettingsCommandsDBTable;
import _VisualDVM.TestingSystem.SAPFOR.ServerSapfor.ServerSapfor;
import _VisualDVM.TestingSystem.SAPFOR.ServerSapfor.ServerSapforState;
import _VisualDVM.TestingSystem.SAPFOR.ServerSapfor.ServerSapforsDBTable;
import javafx.util.Pair;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.nio.file.Paths;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Vector;
public class TestsDatabase extends SQLiteDatabase {
public DVMConfigurationDBTable dvmConfigurations;
public TestDBTable tests;
public TestFilesDBTable testsFiles;
public GroupsDBTable groups;
public DVMPackageDBTable dvmPackages;
public SapforPackageDBTable sapforPackages;
//--
public TestingPackagesToKillDBTable testingPackagesToKill;
//--
public SapforConfigurationDBTable sapforConfigurations;
//----
public ServerSapforsDBTable serverSapfors;
//---
public DVMRunTasksSet dvmRunTasks = new DVMRunTasksSet(); //задачи текущего пакета тестирования DVM
public SapforSettingsDBTable sapforSettings;
public SapforSettingsCommandsDBTable sapforSettingsCommands;
//--
public DVMSettingsDBTable dvmSettings;
public TestsDatabase() {
super(Paths.get(System.getProperty("user.dir"), "Data", Constants.tests_db_name + ".sqlite").toFile());
}
@Override
protected void initAllTables() throws Exception {
addTable(dvmConfigurations = new DVMConfigurationDBTable());
addTable(groups = new GroupsDBTable());
addTable(tests = new TestDBTable());
addTable(testsFiles = new TestFilesDBTable());
addTable(dvmPackages = new DVMPackageDBTable());
addTable(sapforPackages = new SapforPackageDBTable());
addTable(testingPackagesToKill = new TestingPackagesToKillDBTable());
//-
addTable(sapforConfigurations = new SapforConfigurationDBTable());
addTable(serverSapfors = new ServerSapforsDBTable());
addTable(sapforSettings = new SapforSettingsDBTable());
addTable(sapforSettingsCommands = new SapforSettingsCommandsDBTable());
addTable(dvmSettings = new DVMSettingsDBTable());
}
@Override
public PassCode getSynchronizePassCode() {
return PassCode.SynchronizeTests;
}
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:
case ConnectionError:
case DoneWithErrors:
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());
}
});
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<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 DoneWithErrors:
case Aborted:
case Draft:
case ConnectionError:
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;
}
}
//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();
}
}
res.add(new DVMPackage(activePackage)); //копия чтобы не было конфликта доступа с нитью планировщика.
}
}
return res;
}
//--
public void DetectTestMinMaxDim(ServerSapfor serverSapfor, Group group, Test test) throws Exception {
switch (group.language) {
case fortran:
if (serverSapfor != null) {
Sapfor.getTestMinMaxDim_F(new File(serverSapfor.call_command), test);
Update(test);
}
break;
case c:
Sapfor.getTestMinMaxDime_C(test);
Update(test);
break;
}
}
public void importTestFile(Test test, File file) throws Exception {
File testDirectory = new File(Global.TestsDirectory, String.valueOf(test.id));
Utils_.CheckAndCleanDirectory(testDirectory);
File dst = Paths.get(testDirectory.getAbsolutePath(), file.getName()).toFile();
FileUtils.copyFile(file, dst);
}
public void CreateTestFromSingleFile(UserAccount account, ServerSapfor sapfor, Group group, File file, String testDescription) throws Exception {
Test test = new Test();
test.description = testDescription;
test.sender_name = account.name;
test.sender_address = account.email;
test.group_id = group.id;
Insert(test);
//->>
importTestFile(test, file);
TestFile testFile = new TestFile(test,file);
Insert(testFile);
//--
DetectTestMinMaxDim(sapfor, group, test);
}
public void RefreshGroup(UserAccount account, ServerSapfor sapfor, Pair<Group, Vector<File>> groupData) throws Exception {
Group group = groupData.getKey();
Vector<File> files = groupData.getValue();
//--
Group oldGroup = groups.getGroupByDescription(group.language, group.description);
if (oldGroup == null) {
Insert(group);
for (File file : files) {
String testDescription = Utils_.getNameWithoutExtension(file.getName()) + "_" + group.language.getDVMCompile();
CreateTestFromSingleFile(account, sapfor, group, file, testDescription);
}
} else {
for (File file : files) {
String testDescription = Utils_.getNameWithoutExtension(file.getName()) + "_" + group.language.getDVMCompile();
Test oldTest = tests.getStandardTestByDescription(oldGroup.id, testDescription);
if (oldTest == null) {
CreateTestFromSingleFile(account, sapfor, oldGroup, file, testDescription);
} else {
importTestFile(oldTest, file);
}
}
}
}
public Vector<DVMPackage> getFirstActiveDVMPackageCopyForMachineURL(String arg) {
Vector<DVMPackage> res = new Vector<>();
Vector<DVMPackage> machinePackages = new Vector<>();
//--
//1. Получить список активных пакетов для машины.
for (DVMPackage dvmPackage : dvmPackages.Data.values()) {
switch (dvmPackage.state) {
case Done:
case DoneWithErrors:
case Aborted:
case Draft:
case ConnectionError:
break;
default:
if (dvmPackage.getMachineURL().equals(arg))
machinePackages.add(dvmPackage);
break;
}
}
if (!machinePackages.isEmpty()) {
machinePackages.sort(new Comparator<DVMPackage>() {
@Override
public int compare(DVMPackage o1, DVMPackage o2) {
return Integer.compare(o1.state.ordinal(), o2.state.ordinal());
}
});
//-
DVMPackage activePackage = machinePackages.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;
}
public ServerSapfor getSapforCopyForCompilation() {
for (ServerSapfor serverSapfor : serverSapfors.Data.values()) {
if (serverSapfor.state.equals(ServerSapforState.Queued)) {
return new ServerSapfor(serverSapfor);
}
}
return null;
}
public ServerSapfor getSapforForVersion(String version_in) {
for (ServerSapfor serverSapfor : serverSapfors.Data.values()) {
if (serverSapfor.version.equals(version_in))
return serverSapfor;
}
return null;
}
public Integer getInstalledSapforMaxVersion() {
int max_version = CommonConstants.Nan;
for (ServerSapfor sapfor : serverSapfors.Data.values()) {
if (sapfor.state.equals(ServerSapforState.Done)) {
int version = CommonConstants.Nan;
try {
version = Integer.parseInt(sapfor.version);
} catch (Exception ex) {
ex.printStackTrace();
}
if (version > max_version) max_version = version;
}
}
return max_version;
}
public boolean hasActiveSapfors() {
for (ServerSapfor serverSapfor : serverSapfors.Data.values()) {
if (serverSapfor.state.isActive())
return true;
}
return false;
}
public void UnselectAllGTC() {
groups.getUI().SelectAll(false);
tests.getUI().SelectAll(false);
dvmConfigurations.getUI().SelectAll(false);
}
//todo возможно рассмотреть вариант с синхроннизацией тестов для пакетов через команду серверу а не в нити
//во избежание конфликта доступа,или удалением тестов во время копирования(?)
@Override
public void DropUI() {
super.DropUI();
dvmConfigurations.ClearUI();
groups.ClearUI();
sapforConfigurations.ClearUI();
serverSapfors.ClearUI();
dvmPackages.ClearUI();
sapforPackages.ClearUI();
sapforSettings.ClearUI();
dvmSettings.ClearUI();
}
@Override
public void ResetUI() {
VisualCaches.ClearDataForClass(DVMConfiguration.class);
VisualCaches.ClearDataForClass(SapforConfiguration.class);
VisualCaches.ClearDataForClass(DVMPackage.class);
VisualCaches.ClearDataForClass(SapforPackage.class);
//server.db.machines
dvmConfigurations.ShowUI();
groups.ShowUI();
sapforConfigurations.ShowUI();
serverSapfors.ShowUI();
dvmPackages.ShowUI();
sapforPackages.ShowUI();
sapforSettings.ShowUI();
dvmSettings.ShowUI();
super.ResetUI();
}
public void saveTestFiles(Test test) throws Exception{
for (TestFile file : test.files) {
file.test_id = test.id;
Insert(file);
}
test.files = null;
}
public void DeleteTestFiles(Test test) throws Exception {
Vector<TestFile> files = getVectorByFK(test, TestFile.class);
for (TestFile file : files)
Delete(file);
}
public void Patch() throws Exception{
//файлы тестов.
/*
Vector<TestFile> testFiles = new Vector<>();
for (Test test:tests.Data.values()){
TestFilesJson json = Utils_.gson.fromJson(test.packedFilesJson, TestFilesJson.class);
for (TestFileJson testFileJson: json.values){
TestFile testFile = new TestFile();
//-
testFile.test_id = test.id;
testFile.name = testFileJson.name;
testFile.style = testFileJson.style;
testFile.languageName = testFileJson.language;
testFile.fileType= testFileJson.type;
//--
testFiles.add(testFile);
}
}
BeginTransaction();
for (TestFile testFile: testFiles){
Insert(testFile);
}
Commit();
*/
}
}