package TestingSystem.SAPFOR.SapforPackage; import Common.Constants; import Common.Current; import Common.Database.DBObject; import Common.Global; import Common.UI.VisualCache.ConfigurationCache; import Common.UI.VisualCache.VisualCaches; import Common.Utils.TextLog; import Common.Utils.Utils; import GlobalData.Account.Account; import TestingSystem.Common.TasksPackageState; import TestingSystem.Common.Test.Test; import TestingSystem.Common.TestingPackage.TestingPackage; import TestingSystem.SAPFOR.Json.SapforConfiguration_json; import TestingSystem.SAPFOR.Json.SapforPackage_json; import TestingSystem.SAPFOR.Json.SapforTest_json; import TestingSystem.SAPFOR.Json.SapforTestingSet_json; import TestingSystem.SAPFOR.SapforConfiguration.SapforConfiguration; import TestingSystem.SAPFOR.SapforTask.SapforTask; import TestingSystem.SAPFOR.ServerSapfor.ServerSapfor; import Visual_DVM_2021.Passes.PassCode_2021; import java.io.File; import java.util.LinkedHashMap; import java.util.Vector; public class SapforPackage extends TestingPackage { public int sapforId = Constants.Nan; // так как сапфор на машине. //-------------- public SapforPackage() { } public SapforPackage(SapforPackage sapforPackage) { SynchronizeFields(sapforPackage); } public SapforPackage(Account account, ServerSapfor serverSapfor, int kernels_in) { id = Constants.Nan; //- sender_name = account.name; sender_address = account.email; //- sapforId = serverSapfor.id; //- drv = serverSapfor.call_command; version = serverSapfor.version; kernels = kernels_in;//Global.properties.TestingKernels; needsEmail = Global.properties.EmailOnTestingProgress ? 1 : 0; ///------------------------------- package_json = new SapforPackage_json(); package_json.kernels = kernels; package_json.sapfor_drv = serverSapfor.call_command; //- state = TasksPackageState.Queued; //- } @Override public void SynchronizeFields(DBObject src) { super.SynchronizeFields(src); SapforPackage p = (SapforPackage) src; sapforId = p.sapforId; } @Override public Class getJsonClass() { return SapforPackage_json.class; } @Override public File getHomeDirectory() { return Global.SapforPackagesDirectory; } //-- public void init() throws Exception { for (SapforTask task : package_json.tasks) task.sapfortaskspackage_id = id; Utils.CheckAndCleanDirectory(getLocalWorkspace()); saveJson(); package_json = null; // объект больше не нужен. } //-проверка, какие задачи из набора, не пересекаются с уже имеющимися в пакете. public Vector getActualTestingSetTasks(SapforTestingSet_json testingSet) { Vector possible_tasks = testingSet.createTasks(); Vector keys = package_json.getTasksKeys(); Vector new_tasks = new Vector<>(); //---- for (SapforTask task : possible_tasks) { String key = task.getUniqueKey(); if (!keys.contains(key)) { keys.add(key); new_tasks.add(task); } } return new_tasks; } @Override public boolean isVisible() { return (!SapforPackageDBTable.filterMyOnly || Current.getAccount().email.equals(sender_address)) && (!SapforPackageDBTable.filterActive || state.isActive()) ; } //--------- //конструктор. если 0 задач по итогу,значит пакет не запускаем вообще, и смотрим журнал. //Запрещено выполнять на нитях, так как прямой доступ к бд. public SapforPackage(Account account, ServerSapfor serverSapfor, Vector configurations, int neeedsEmail_in, TextLog Log) throws Exception{ id = Constants.Nan; sender_name = account.name; sender_address = account.email; //- sapforId = serverSapfor.id; //- drv = serverSapfor.call_command; version = serverSapfor.version; ///------------------------------- needsEmail = neeedsEmail_in; package_json = new SapforPackage_json(); package_json.sapfor_drv = serverSapfor.call_command; //- state = TasksPackageState.Queued; //-- boolean valid = true; //проверка исходных данных тестов и групп LinkedHashMap testsByDescriptions =new LinkedHashMap<>(); //-- kernels=1; for (SapforConfiguration configuration : configurations) { kernels = Math.max(configuration.kernels, kernels); configuration.validate(Log); //- ConfigurationCache cache = (ConfigurationCache) VisualCaches.GetCache(configuration); //-- for (Test test : cache.getTests()) { String l_description = test.description.toLowerCase(); if (testsByDescriptions.containsKey(l_description)) { Log.Writeln_("В пакет не могут входить тесты с одинаковыми именами (без учета регистра):" + test.description.toLowerCase()); valid=false; } else { testsByDescriptions.put(l_description, test); } } } valid= Log.isEmpty(); //формирование задач. if (valid){ //-- tasksCount=0; package_json.kernels = kernels; //-- SapforTestingSet_json testingSet = new SapforTestingSet_json(); Vector new_tasks = new Vector<>(); //-- testingSet.id = package_json.getMaxSetId(); for (Test test : testsByDescriptions.values()) { SapforTest_json test_json = new SapforTest_json(); test_json.id = test.id; test_json.description = test.description; test_json.group_description = Global.testingServer.db.groups.get(test.group_id).description; testingSet.tests.add(test_json); } for (SapforConfiguration configuration : configurations) { //-- SapforConfiguration_json configuration_json = new SapforConfiguration_json(); configuration_json.id = configuration.id; configuration_json.name = configuration.description; configuration_json.flags = configuration.getFlags(); Vector codes = configuration.getPassCodes(); //--- коррекцию кода нельзя вызвать если инклуды есть. в общем случае. if (!codes.firstElement().equals(PassCode_2021.SPF_InsertIncludesPass)) configuration_json.codes.add(PassCode_2021.SPF_CorrectCodeStylePass); //всегда добавляется. //-- configuration_json.codes.addAll(codes); //--->> testingSet.configurations.add(configuration_json); //-->> } new_tasks = getActualTestingSetTasks(testingSet); saveConfigurationsAsJson(configurations); package_json.testingSets.add(testingSet); for (SapforTask task : new_tasks) { task.id = package_json.getMaxTaskId(); package_json.tasks.add(task); } tasksCount += new_tasks.size(); } } }