промежуточный. Рефакторинг публикации теста из текущего проекта.
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package TestingSystem.Common;
|
||||
import Common.Constants;
|
||||
import Common.Database.DBObject;
|
||||
import Common.Database.iDBObject;
|
||||
import Common.Global;
|
||||
import Common.Utils.Utils;
|
||||
import GlobalData.Account.Account;
|
||||
@@ -31,7 +30,6 @@ import TestingSystem.SAPFOR.SapforTasksPackage.SapforPackageData;
|
||||
import TestingSystem.SAPFOR.SapforTasksPackage.SapforTasksPackage;
|
||||
import TestingSystem.SAPFOR.ServerSapfor.ServerSapfor;
|
||||
import Visual_DVM_2021.Passes.All.DownloadRepository;
|
||||
import Visual_DVM_2021.Passes.All.UnzipFolderPass;
|
||||
import Visual_DVM_2021.Passes.All.ZipFolderPass;
|
||||
import Visual_DVM_2021.Passes.PassCode_2021;
|
||||
import Visual_DVM_2021.Passes.Pass_2021;
|
||||
@@ -40,6 +38,7 @@ import org.apache.commons.io.FileUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
@@ -77,55 +76,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void afterPublishAction(DBObject object) throws Exception {
|
||||
if (object instanceof TasksPackage) {
|
||||
//объект уже вставлен.
|
||||
TasksPackage tasksPackage = (TasksPackage) object;
|
||||
//-
|
||||
for (int group_id : tasksPackage.sorted_tasks.keySet()) {
|
||||
if (db.groups.containsKey(group_id)) {
|
||||
Group group = db.groups.get(group_id);
|
||||
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);//Открытие бд проекта и ее синхронизация. неизбежно.
|
||||
//---
|
||||
for (TestCompilationTask task : group_tasks.get(test_id)) {
|
||||
Print("принять задачу на компиляцию " + group_id + ":" + test_id + ":" + task.flags);
|
||||
//Теперь эту задачу надо поставить в очередь. и вернуть пользователю, уже с id
|
||||
task.state = TaskState.Waiting;
|
||||
task.id = db.IncKey(SettingName.TaskMaxId);
|
||||
task.taskspackage_id = tasksPackage.id;
|
||||
task.makefile_text = group.GenerateMakefile(project, tasksPackage.dvm_drv, task.flags);
|
||||
task.test_home = tasksPackage.user_workspace + "/projects/" + test_id;
|
||||
//-->>
|
||||
task.remote_workspace =
|
||||
new RemoteFile(
|
||||
tasksPackage.user_workspace + "/tests/" + tasksPackage.id,
|
||||
String.valueOf(task.id), true).full_name;
|
||||
account_db.Insert(task);
|
||||
if (task.runTasks != null) {
|
||||
for (TestRunTask rt : task.runTasks) {
|
||||
rt.id = db.IncKey(SettingName.TaskMaxId);
|
||||
rt.taskspackage_id = tasksPackage.id;
|
||||
rt.testcompilationtask_id = task.id;
|
||||
rt.remote_workspace =
|
||||
new RemoteFile(
|
||||
tasksPackage.user_workspace + "/tests/" + tasksPackage.id,
|
||||
String.valueOf(rt.id), true).full_name;
|
||||
rt.binary_name = "spf_" + rt.id + "_" + rt.matrix.replace(" ", "_");
|
||||
account_db.Insert(rt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void DeleteAction(DBObject object) throws Exception {
|
||||
if (object instanceof Test) {
|
||||
Test test = (Test) object;
|
||||
@@ -221,28 +171,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
||||
Test test;
|
||||
int test_id;
|
||||
switch (code) {
|
||||
case PublishTestProject:
|
||||
Print("Прикрепить проект к тесту " + request.arg);
|
||||
System.out.println("Прикрепить проект к тесту " + request.arg);
|
||||
test_id = Integer.parseInt(request.arg);
|
||||
if (db.tests.containsKey(test_id)) {
|
||||
test = db.tests.get(test_id);
|
||||
Utils.unpackFile((byte[]) request.object, test.getArchive());
|
||||
UnzipFolderPass unzipFolderPass = new UnzipFolderPass();
|
||||
if (!unzipFolderPass.Do(
|
||||
test.getArchive().getAbsolutePath(),
|
||||
Global.TestsDirectory.getAbsolutePath())) {
|
||||
db.Delete(test);
|
||||
throw new RepositoryRefuseException(
|
||||
"Не удалось прикрепить проект к тесту с id " + test.id
|
||||
+ "\nТест будет удален"
|
||||
);
|
||||
}
|
||||
} else {
|
||||
throw new RepositoryRefuseException("Не существует теста с ключом " + Utils.Brackets(request.arg));
|
||||
}
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
break;
|
||||
case EmailSapforAssembly:
|
||||
Print("Сообщить о сборке SAPFOR для пользователя " + request.arg);
|
||||
Vector<String> assembly_info = (Vector<String>) request.object;
|
||||
@@ -265,8 +193,7 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
||||
for (Object object : tasks) {
|
||||
SapforTask task = (SapforTask) object;
|
||||
task.id = db.IncKey(SettingName.SapforTaskMaxId);
|
||||
if (account_db.InsertWithCheck_(task) != null)
|
||||
afterPublishAction(task);
|
||||
account_db.Insert(task);
|
||||
}
|
||||
account_db.Commit();
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
@@ -329,17 +256,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = dbObject;
|
||||
break;
|
||||
case PublishAccountObjects:
|
||||
Print("Опубликовать объекты для пользователя " + request.arg);
|
||||
SetCurrentAccountDB(request.arg);
|
||||
Vector<Object> objects__ = (Vector<Object>) request.object;
|
||||
account_db.BeginTransaction();
|
||||
for (Object object : objects__)
|
||||
if (account_db.InsertWithCheck_((DBObject) object) != null)
|
||||
afterPublishAction((DBObject) object);
|
||||
account_db.Commit();
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
break;
|
||||
case CheckAccountObjectExistense:
|
||||
SetCurrentAccountDB(request.arg);
|
||||
p = (Pair<Class, Object>) request.object;
|
||||
@@ -482,7 +398,8 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
||||
}
|
||||
//->>
|
||||
//->>
|
||||
Pair<Group, Vector<File>> ConvertDirectoryToGroup(File src, LanguageName languageName, TestType testType, Account account) throws Exception {
|
||||
Pair<Group, Vector<File>> ConvertDirectoryToGroup(File src, LanguageName languageName, TestType
|
||||
testType, Account account) throws Exception {
|
||||
Group object = new Group();
|
||||
Vector<File> groupFiles = null; //транспорт.
|
||||
//->>
|
||||
@@ -584,19 +501,13 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
||||
}
|
||||
return res;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------->>>
|
||||
@Override
|
||||
public void PublishObject(DBObject dbObject) throws Exception {
|
||||
if (request.arg == null)
|
||||
super.PublishObject(dbObject);
|
||||
protected Serializable publishObject(DBObject object) throws Exception {
|
||||
if (request.arg == null) return super.publishObject(object);
|
||||
else {
|
||||
SetCurrentAccountDB(request.arg);
|
||||
if (dbObject instanceof iDBObject) {
|
||||
Print("Опубликовать объект для пользователя " + request.arg);
|
||||
account_db.Insert(dbObject);
|
||||
} else {
|
||||
Print("Опубликовать объект с автоинкрементным ключом " + request.arg);
|
||||
account_db.InsertWithCheck(dbObject); //проверка не нужна,АИ гарантирует что ключ уникален.
|
||||
}
|
||||
return (Serializable) account_db.InsertS(object).getPK();
|
||||
}
|
||||
}
|
||||
@Override
|
||||
@@ -604,10 +515,66 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
||||
if (object instanceof TasksPackage) {
|
||||
TasksPackage tasksPackage = (TasksPackage) object;
|
||||
tasksPackage.id = db.IncKey(SettingName.DVMPackageMaxId);
|
||||
} else {
|
||||
if (object instanceof SapforTasksPackage) {
|
||||
SapforTasksPackage sapforTasksPackage = (SapforTasksPackage) object;
|
||||
sapforTasksPackage.id = db.IncKey(SettingName.SAPFORPackageId);
|
||||
} else if (object instanceof SapforTasksPackage) {
|
||||
SapforTasksPackage sapforTasksPackage = (SapforTasksPackage) object;
|
||||
sapforTasksPackage.id = db.IncKey(SettingName.SAPFORPackageId);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void afterPublishAction(DBObject object) throws Exception {
|
||||
if (object instanceof TasksPackage) {
|
||||
//объект уже вставлен.
|
||||
TasksPackage tasksPackage = (TasksPackage) object;
|
||||
//-
|
||||
for (int group_id : tasksPackage.sorted_tasks.keySet()) {
|
||||
if (db.groups.containsKey(group_id)) {
|
||||
Group group = db.groups.get(group_id);
|
||||
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);//Открытие бд проекта и ее синхронизация. неизбежно.
|
||||
//---
|
||||
for (TestCompilationTask task : group_tasks.get(test_id)) {
|
||||
Print("принять задачу на компиляцию " + group_id + ":" + test_id + ":" + task.flags);
|
||||
//Теперь эту задачу надо поставить в очередь. и вернуть пользователю, уже с id
|
||||
task.state = TaskState.Waiting;
|
||||
task.id = db.IncKey(SettingName.TaskMaxId);
|
||||
task.taskspackage_id = tasksPackage.id;
|
||||
task.makefile_text = group.GenerateMakefile(project, tasksPackage.dvm_drv, task.flags);
|
||||
task.test_home = tasksPackage.user_workspace + "/projects/" + test_id;
|
||||
//-->>
|
||||
task.remote_workspace =
|
||||
new RemoteFile(
|
||||
tasksPackage.user_workspace + "/tests/" + tasksPackage.id,
|
||||
String.valueOf(task.id), true).full_name;
|
||||
account_db.Insert(task);
|
||||
if (task.runTasks != null) {
|
||||
for (TestRunTask rt : task.runTasks) {
|
||||
rt.id = db.IncKey(SettingName.TaskMaxId);
|
||||
rt.taskspackage_id = tasksPackage.id;
|
||||
rt.testcompilationtask_id = task.id;
|
||||
rt.remote_workspace =
|
||||
new RemoteFile(
|
||||
tasksPackage.user_workspace + "/tests/" + tasksPackage.id,
|
||||
String.valueOf(rt.id), true).full_name;
|
||||
rt.binary_name = "spf_" + rt.id + "_" + rt.matrix.replace(" ", "_");
|
||||
account_db.Insert(rt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (object instanceof Test) {
|
||||
Test test = (Test) object;
|
||||
if (!test.unpackProjectOnServer()) {
|
||||
db.Delete(test);
|
||||
throw new RepositoryRefuseException(
|
||||
"Не удалось прикрепить проект к тесту с id " + test.id
|
||||
+ "\nТест будет удален"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user