Files
VisualSapfor/src/TestingSystem/SAPFOR/SapforPackage/SapforPackage.java

184 lines
7.8 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 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<SapforPackage_json> {
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<SapforTask> getActualTestingSetTasks(SapforTestingSet_json testingSet) {
Vector<SapforTask> possible_tasks = testingSet.createTasks();
Vector<String> keys = package_json.getTasksKeys();
Vector<SapforTask> 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<SapforConfiguration> 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<String, Test> 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<SapforTask> 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<PassCode_2021> 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();
}
}
}