Files
VisualSapfor/src/_VisualDVM/TestingSystem/Common/Test/Test.java

135 lines
5.1 KiB
Java
Raw Normal View History

2024-10-09 22:21:57 +03:00
package _VisualDVM.TestingSystem.Common.Test;
2024-10-07 14:22:52 +03:00
import Common.CommonConstants;
2024-10-14 15:19:13 +03:00
import Common.Database.Objects.DBObject;
import Common.Database.Objects.riDBObject;
2024-10-11 00:00:30 +03:00
import Common.Utils.Utils_;
import Common.Visual.UI;
2024-10-09 22:01:19 +03:00
import _VisualDVM.Current;
import _VisualDVM.Global;
2024-10-14 15:19:13 +03:00
import _VisualDVM.Passes.All.UnzipFolderPass;
import _VisualDVM.Passes.All.ZipFolderPass;
2024-10-09 22:21:57 +03:00
import _VisualDVM.ProjectData.Files.FileState;
import _VisualDVM.ProjectData.Files.FileType;
import _VisualDVM.ProjectData.Files.ProjectFile;
import _VisualDVM.ProjectData.LanguageName;
import _VisualDVM.Repository.RepositoryRefuseException;
2023-09-17 22:13:42 +03:00
import com.sun.org.glassfish.gmbal.Description;
import org.apache.commons.io.FileUtils;
2023-11-17 00:04:21 +03:00
import java.io.File;
import java.util.LinkedHashMap;
import java.util.Vector;
public class Test extends riDBObject {
@Description("DEFAULT 0")
public int min_dim = 0; //мин размерность теста.
@Description("DEFAULT 0")
public int max_dim = 0; //макс размерность теста.
2023-09-17 22:13:42 +03:00
@Description("DEFAULT ''")
public String args = ""; //аргументы командной строки. на всякий случай поле зарезервирую. пусть будут.
@Description("DEFAULT -1")
2024-10-07 14:22:52 +03:00
public int group_id = CommonConstants.Nan;
@Description("DEFAULT ''")
public String files = ""; //файлы теста
//--------------------------------------------->>>
@Description("IGNORE")
public String temp_project_name = "";
@Description("IGNORE")
public byte[] project_archive_bytes = null;
//--------------------------------------------->>>
2023-09-17 22:13:42 +03:00
public Test(Test test) {
this.SynchronizeFields(test);
}
public Test() {
}
@Override
2024-10-14 15:19:13 +03:00
public void SynchronizeFields(DBObject src) {
super.SynchronizeFields(src);
Test t = (Test) src;
min_dim = t.min_dim;
max_dim = t.max_dim;
args = t.args;
group_id = t.group_id;
}
@Override
2023-09-17 22:13:42 +03:00
public void select(boolean flag) {
super.select(flag);
if (UI.isActive())
Global.mainModule.getUI().getMainWindow().ShowCheckedTestsCount();
2023-09-17 22:13:42 +03:00
}
2023-11-17 00:04:21 +03:00
//---
@Override
public boolean isVisible() {
2024-10-14 15:19:13 +03:00
return Global.mainModule.matchCurrentID(Current.Group, group_id);
2023-11-17 00:04:21 +03:00
}
//-
public File getArchive() {
return new File(Global.TestsDirectory, id + ".zip");
}
//-
public File getServerPath() {
return new File(Global.TestsDirectory, String.valueOf(id));
}
public File getHomePath() {
return new File(Global.visualiser.getWorkspace(), String.valueOf(id));
}
//--
public File getTempArchive() {
return new File(Global.TempDirectory, temp_project_name + ".zip");
}
public File getTempProject() {
return new File(Global.TempDirectory, temp_project_name);
}
public boolean unpackProjectOnServer() throws Exception {
File tmpArchive = new File(Global.TempDirectory, temp_project_name + ".zip");
File tmpProject = new File(Global.TempDirectory, temp_project_name);
File testProject = new File(Global.TestsDirectory, String.valueOf(id));
File testArchive = new File(Global.TestsDirectory, id + ".zip");
//--
if (tmpArchive.exists())
FileUtils.forceDelete(tmpArchive);
if (tmpProject.exists())
FileUtils.forceDelete(tmpProject);
if (testProject.exists())
FileUtils.forceDelete(testProject);
if (testArchive.exists())
FileUtils.forceDelete(testArchive);
//--
2024-10-11 00:00:30 +03:00
Utils_.bytesToFile(project_archive_bytes, tmpArchive); // распаковка байтов.
//--
UnzipFolderPass unzipFolderPass = new UnzipFolderPass();
if (!unzipFolderPass.Do(
tmpArchive.getAbsolutePath(),
Global.TempDirectory.getAbsolutePath())) {
return false;
}
//--
FileUtils.moveDirectory(tmpProject, testProject);
//--
ZipFolderPass zip = new ZipFolderPass();
if (!zip.Do(testProject.getAbsolutePath(), testArchive.getAbsolutePath()))
throw new RepositoryRefuseException("Не удалось переписать архив проекта");
return true;
}
public String getFilesForTable() {
2023-11-23 22:38:21 +03:00
return files.replace("\n", ";");
}
public LinkedHashMap<LanguageName, Vector<ProjectFile>> getPrograms() {
LinkedHashMap<LanguageName, Vector<ProjectFile>> res = new LinkedHashMap<>();
//--
res.put(LanguageName.fortran, new Vector<>());
res.put(LanguageName.c, new Vector<>());
res.put(LanguageName.cpp, new Vector<>());
//--
String[] files_names = files.split("\n");
for (String file_name : files_names) {
ProjectFile file = new ProjectFile(new File(file_name));
//--
if (!file.state.equals(FileState.Excluded) &&
file.fileType.equals(FileType.program) &&
(!file.languageName.equals(LanguageName.n)))
res.get(file.languageName).add(file);
}
return res;
}
2023-09-17 22:13:42 +03:00
}