промежуточный. часть большого рефакторинга, касательно проходов связанных с сервером. Обновлена публикация групп.

This commit is contained in:
2023-11-16 16:20:20 +03:00
parent 3f00d0f300
commit 4545cf2d26
80 changed files with 346 additions and 254 deletions

View File

@@ -1,14 +1,14 @@
package TestingSystem.Group;
import Common.Current;
import Common.Database.DBObject;
import Common.Database.rDBObject;
import Common.Database.riDBObject;
import Common.UI.UI;
import ProjectData.LanguageName;
import TestingSystem.Test.TestType;
import com.sun.org.glassfish.gmbal.Description;
import java.util.LinkedHashMap;
public class Group extends rDBObject {
public class Group extends riDBObject {
@Override
public boolean isVisible() {
return GroupInterface.isVisible(this);

View File

@@ -6,8 +6,6 @@ import ProjectData.Files.DBProjectFile;
import ProjectData.LanguageName;
import ProjectData.Project.db_project_info;
import java.io.File;
import java.nio.file.Paths;
import java.util.LinkedHashMap;
import java.util.Vector;
//dynamic cats возможен через рефлексию.
@@ -116,17 +114,7 @@ public class GroupInterface {
"\t" + Utils.MFVar("LINK_COMMAND") + " " + Utils.MFVar("LINK_FLAGS") + " " + String.join(" ", objects) + " -o " + binary,
String.join(" ", bodies));
}
//--
public static void CopyFields(Group src, Group dst) {
dst.description = src.description;
dst.type = src.type;
dst.language = src.language;
}
public static String getSummary(Group group) {
return group.description + " " + group.language.getDescription();
}
//для тестирования Сапфора на локальной машине.
public static File getLocalWorkspaceD(Group group){
return Paths.get(Global.visualiser.getWorkspace().getAbsolutePath(), group.id).toFile();
}
}

View File

@@ -19,7 +19,7 @@ public class TestCompilationTask extends TestTask {
Vector<String> res = new Vector<>();
res.add(String.valueOf(id)); //1
res.add(String.valueOf(maxtime)); //2
res.add(test_id); //3
res.add(String.valueOf(test_id)); //3
res.add(makefile_text.replace("\n", "|")); //4
//игнор аргумента. ядро всегда одно.
return res;

View File

@@ -7,12 +7,10 @@ import javafx.util.Pair;
import java.util.List;
public class TestRunTaskInterface {
public static String filterName = "";
public static boolean isVisible(TestRunTask object) {
return
Current.HasTasksPackage() &&
object.taskspackage_id.equals(Current.getTasksPackage().id) &&
object.test_id.contains(filterName) &&
Global.testingServer.account_db.testRunTasks.applyFilters(object);
}
public static String getEnvironments(TestRunTask object) {

View File

@@ -16,12 +16,12 @@ public class TestTask extends DBObject {
public long id = Constants.Nan;
@Description("DEFAULT ''")
public String taskspackage_id = "";
@Description("DEFAULT ''")
public String group_id = "";
@Description("DEFAULT -1")
public int group_id = Constants.Nan;
@Description("DEFAULT ''")
public String group_description = ""; //видимое имя группы для юзера
@Description("DEFAULT ''")
public String test_id = ""; //ключ - будет генерироваться автоматически.
@Description("DEFAULT -1")
public int test_id = Constants.Nan; //ключ - будет генерироваться автоматически.
@Description("DEFAULT ''")
public String test_description = ""; //видимое имя теста для юзера
@Description("DEFAULT ''")

View File

@@ -16,6 +16,7 @@ import TestingSystem.TasksPackage.TasksPackage;
import TestingSystem.TasksPackage.TasksPackageDBTable;
import TestingSystem.TasksPackage.TasksPackageState;
import TestingSystem.TasksPackageToKill.TasksPackageToKillDBTable;
import Visual_DVM_2021.Passes.PassCode_2021;
import javafx.util.Pair;
import java.io.File;
@@ -64,6 +65,10 @@ public class TasksDatabase extends SQLiteDatabase {
Insert(new TSetting(SettingName.Queue, 0));
}
@Override
public PassCode_2021 getSynchronizePassCode() {
return PassCode_2021.SynchronizeTestsTasks;
}
@Override
public void prepareTablesStatements() throws Exception {
super.prepareTablesStatements();
selectPackageRunTasks = conn.prepareStatement("SELECT * FROM TestRunTask WHERE taskspackage_id = ?");

View File

@@ -36,7 +36,7 @@ public class TasksPackage extends nDBObject {
public TasksPackageState state = TasksPackageState.Queued;
//--
//нужно только для публикации задач.
public LinkedHashMap<String, LinkedHashMap<String, Vector<TestCompilationTask>>> sorted_tasks = new LinkedHashMap<>();
public LinkedHashMap<Integer, LinkedHashMap<Integer, Vector<TestCompilationTask>>> sorted_tasks = new LinkedHashMap<>();
@Override
public void SynchronizeFields(DBObject src) {
super.SynchronizeFields(src);
@@ -62,10 +62,10 @@ public class TasksPackage extends nDBObject {
kernels = tasksPackage.kernels;
state = tasksPackage.state;
//-
for (String group_id : tasksPackage.sorted_tasks.keySet()) {
LinkedHashMap<String, Vector<TestCompilationTask>> src_groupTasks = tasksPackage.sorted_tasks.get(group_id);
LinkedHashMap<String, Vector<TestCompilationTask>> dst_groupTasks = new LinkedHashMap<>();
for (String test_id : src_groupTasks.keySet()) {
for (int group_id : tasksPackage.sorted_tasks.keySet()) {
LinkedHashMap<Integer, Vector<TestCompilationTask>> src_groupTasks = tasksPackage.sorted_tasks.get(group_id);
LinkedHashMap<Integer, Vector<TestCompilationTask>> dst_groupTasks = new LinkedHashMap<>();
for (int test_id : src_groupTasks.keySet()) {
Vector<TestCompilationTask> src_testTasks = src_groupTasks.get(test_id);
Vector<TestCompilationTask> dst_testTasks = new Vector<>();
for (TestCompilationTask src_testCompilationTask : src_testTasks)

View File

@@ -1,10 +1,11 @@
package TestingSystem.Test;
import Common.Constants;
import Common.Current;
import Common.Database.DBObject;
import Common.Database.rDBObject;
import Common.Database.riDBObject;
import Common.UI.UI;
import com.sun.org.glassfish.gmbal.Description;
public class Test extends rDBObject {
public class Test extends riDBObject {
@Override
public boolean isVisible() {
return TestInterface.isVisible(this);
@@ -13,14 +14,10 @@ public class Test extends rDBObject {
public int dim = 1; //размерность теста. для удобства пусть будет и внешним полем.
@Description("DEFAULT ''")
public String args = ""; //аргументы командной строки. на всякий случай поле зарезервирую. пусть будут.
@Description("DEFAULT ''")
public String group_id = "";
@Description("DEFAULT ''")
public String project_description = "";
@Description("DEFAULT -1")
public int group_id = Constants.Nan;
@Description("IGNORE")
public byte[] project_archive_bytes = null;
@Description("DEFAULT ''")
public String files_json = "";
@Override
public void SynchronizeFields(DBObject src) {
super.SynchronizeFields(src);

View File

@@ -35,8 +35,6 @@ public class TestDBTable extends DBTable<String, Test> {
switch (columnIndex) {
case 2:
return object.description;
// case 3:
// return object.project_description;
case 3:
return object.dim;
default:
@@ -74,15 +72,12 @@ public class TestDBTable extends DBTable<String, Test> {
public void fillFields() {
fields.tfName.setText(Result.description);
fields.sDim.setValue(Result.dim);
// fields.tfProjectDescription.setText(Result.project_description);
}
@Override
public void ProcessResult() {
Result.description = fields.tfName.getText();
Result.dim = (int) fields.sDim.getValue();
// Result.project_description = fields.tfProjectDescription.getText();
if (!edit) {
Result.genName();
Result.sender_name = Current.getAccount().name;
Result.sender_address = Current.getAccount().email;
}

View File

@@ -4,35 +4,18 @@ import Common.Global;
import java.io.File;
import java.nio.file.Paths;
import java.util.Date;
public class TestInterface {
public static String filterName = "";
public static String filterSenderName = "";
public static boolean filterMyOnly = false;
public static boolean isVisible(Test object) {
return Current.HasGroup() && (Current.getGroup().id.equals(object.group_id))
&&
object.id.toUpperCase().contains(filterName.toUpperCase()) &&
object.sender_name.toUpperCase().contains(filterSenderName.toUpperCase()) &&
(!filterMyOnly || object.sender_address.equalsIgnoreCase(Current.getAccount().email));
}
//-
public static Date getDate(Test object) {
return new Date(object.date);
}
public static void CopyFields(Test src, Test dst) {
dst.dim = src.dim;
dst.description = src.description;
dst.args = src.args;
return Current.HasGroup() && (Current.getGroup().id == object.group_id);
}
public static File getArchive(Test object) {
return Paths.get(System.getProperty("user.dir"), "Tests", object.id + ".zip").toFile();
}
public static File getServerPath(Test object) {
return Paths.get(System.getProperty("user.dir"), "Tests", object.id).toFile();
return Paths.get(System.getProperty("user.dir"), "Tests", String.valueOf(object.id)).toFile();
}
public static File getHomePath(Test object) {
return Paths.get(Global.visualiser.getWorkspace().getAbsolutePath(), object.id).toFile();
return Paths.get(Global.visualiser.getWorkspace().getAbsolutePath(), String.valueOf(object.id)).toFile();
}
public static String getSummary(Test test) {
return test.description;

View File

@@ -15,7 +15,7 @@ import TestingSystem.TasksPackage.TasksPackageState;
import TestingSystem.TestsSupervisor_2022.TestsSupervisor_2022;
import Visual_DVM_2021.Passes.PassException;
import Visual_DVM_2021.Passes.SSH.ConnectionPass;
import Visual_DVM_2021.Passes.TestingSystemPass;
import Visual_DVM_2021.Passes.Server.TestingSystemPass;
import javafx.util.Pair;
import java.io.File;

View File

@@ -78,11 +78,11 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
//объект уже вставлен.
TasksPackage tasksPackage = (TasksPackage) object;
//-
for (String group_id : tasksPackage.sorted_tasks.keySet()) {
for (int group_id : tasksPackage.sorted_tasks.keySet()) {
if (db.groups.containsKey(group_id)) {
Group group = db.groups.get(group_id);
LinkedHashMap<String, Vector<TestCompilationTask>> group_tasks = tasksPackage.sorted_tasks.get((group_id));
for (String test_id : group_tasks.keySet()) {
LinkedHashMap<Integer, Vector<TestCompilationTask>> group_tasks = tasksPackage.sorted_tasks.get((group_id));
for (int test_id : group_tasks.keySet()) {
if (db.tests.containsKey(test_id)) {
Test test = db.tests.get(test_id);
db_project_info project = new db_project_info(test);//Открытие бд проекта и ее синхронизация. неизбежно.
@@ -140,7 +140,7 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
Group group = (Group) object;
Vector<Test> tests = new Vector<>();
for (Test group_test : db.tests.Data.values()) {
if (group_test.group_id.equals(group.id)) // todo group_name -> group_id
if (group_test.group_id==group.id) // todo group_name -> group_id
tests.add(group_test);
}
for (Test group_test : tests) {
@@ -476,7 +476,7 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
response.object = Utils.packFile(account_db.getFile());
break;
case DeleteAccountObjectByPK:
Print("Удалить объект из базы пользователя " + request.arg);
Print("Удалить объект по ключу из базы пользователя " + request.arg);
SetCurrentAccountDB(request.arg);
Pair<Class, Object> to_delete = (Pair<Class, Object>) request.object;
DeleteAction(account_db.DeleteByPK(to_delete.getKey(), to_delete.getValue()));

View File

@@ -10,6 +10,7 @@ import TestingSystem.Group.GroupsDBTable;
import TestingSystem.TSetting.TSetting;
import TestingSystem.TSetting.TSettingsDBTable;
import TestingSystem.Test.TestDBTable;
import Visual_DVM_2021.Passes.PassCode_2021;
import java.nio.file.Paths;
public class TestsDatabase extends SQLiteDatabase {
@@ -43,6 +44,10 @@ public class TestsDatabase extends SQLiteDatabase {
if (!settings.containsKey(SettingName.SapforTaskMaxId))
Insert(new TSetting(SettingName.SapforTaskMaxId, 0));
}
@Override
public PassCode_2021 getSynchronizePassCode() {
return PassCode_2021.SynchronizeTests;
}
public long IncMaxTaskId() throws Exception {
TSetting setting = settings.get(SettingName.TaskMaxId);
long res = setting.value;

View File

@@ -99,7 +99,7 @@ public class TestsSupervisor_2022 {
Vector<String> test_ids = new Vector<>();
for (TestCompilationTask current_task : compilationTasks)
if (!test_ids.contains(current_task.test_id))
test_ids.add(current_task.test_id);
test_ids.add(String.valueOf(current_task.test_id));
//синхронизировать их.
for (String test_id : test_ids) {
File test_src = Paths.get(Global.TestsDirectory.getAbsolutePath(), test_id).toFile();