diff --git a/.idea/workspace.xml b/.idea/workspace.xml index b02e6d61..8443a3c0 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -7,13 +7,13 @@ - - - - - - + + + + + + diff --git a/src/ProjectData/Project/db_project_info.java b/src/ProjectData/Project/db_project_info.java index f5d18bb3..ec4ecd8b 100644 --- a/src/ProjectData/Project/db_project_info.java +++ b/src/ProjectData/Project/db_project_info.java @@ -1063,7 +1063,6 @@ public class db_project_info extends DBObject { } else { if (//!file.state.equals(FileState.Excluded)&& (!file.fileType.equals(FileType.header) || migrate_headers)) { - File toCopy = Paths.get(target.Home.getAbsolutePath(), file.name).toFile(); if (!toCopy.exists()) Files.copy(file.file.toPath(), toCopy.toPath()); @@ -1558,4 +1557,15 @@ public class db_project_info extends DBObject { } return true; } + public void clearData() throws Exception { + File project_data = new File(Home, Constants.data); + File[] files = project_data.listFiles(); + if (files != null) { + for (File file : files) { + if (!file.getName().equalsIgnoreCase("new_project_base.sqlite")) { + FileUtils.forceDelete(file); + } + } + } + } } diff --git a/src/TestingSystem/Common/Test/Test.java b/src/TestingSystem/Common/Test/Test.java index 2d314e84..97c6ee0d 100644 --- a/src/TestingSystem/Common/Test/Test.java +++ b/src/TestingSystem/Common/Test/Test.java @@ -15,7 +15,6 @@ import com.sun.org.glassfish.gmbal.Description; import org.apache.commons.io.FileUtils; import java.io.File; -import java.nio.file.Paths; public class Test extends riDBObject { @Description("DEFAULT 1") public int min_dim = 1; //мин размерность теста. @@ -77,13 +76,16 @@ public class Test extends riDBObject { return new File(Global.TempDirectory, temp_project_name); } //-- + /* public void packProject(db_project_info project) throws Exception { + //если берем из текущего проекта. temp_project_name = Utils.getDateName("test"); //- File tempProject = getTempProject(); File tempArchive = getTempArchive(); //- FileUtils.forceMkdir(tempProject); + project.clearData(); project.Clone(tempProject, false); //-- FileUtils.copyFile(project.db.getFile(), @@ -93,6 +95,27 @@ public class Test extends riDBObject { if (zip.Do(tempProject.getAbsolutePath(), tempArchive.getAbsolutePath())) { project_archive_bytes = Utils.packFile(tempArchive); } else throw new PassException("Не удалось создать архив проекта"); + } + */ + public void packCode(File dir) throws Exception { + temp_project_name = Utils.getDateName("test"); + //- + File tempProject = getTempProject(); + File tempArchive = getTempArchive(); + //- создать бд. + db_project_info project = new db_project_info(dir); + project.Open(); + project.Close(); + //- + project.clearData(); + //- + FileUtils.forceMkdir(tempProject); + FileUtils.copyDirectory(dir, tempProject); + //-- + ZipFolderPass zip = new ZipFolderPass(); + if (zip.Do(tempProject.getAbsolutePath(), tempArchive.getAbsolutePath())) { + project_archive_bytes = Utils.packFile(tempArchive); + } else throw new PassException("Не удалось создать архив папки с кодом."); } public boolean unpackProjectOnServer() throws Exception { File tmpArchive = new File(Global.TempDirectory, temp_project_name + ".zip"); @@ -125,4 +148,7 @@ public class Test extends riDBObject { throw new RepositoryRefuseException("Не удалось переписать архив проекта"); return true; } + public String getFilesForTable(){ + return files.replace("\n", ";"); + } } diff --git a/src/TestingSystem/Common/Test/TestDBTable.java b/src/TestingSystem/Common/Test/TestDBTable.java index 4325e097..5ead9715 100644 --- a/src/TestingSystem/Common/Test/TestDBTable.java +++ b/src/TestingSystem/Common/Test/TestDBTable.java @@ -39,7 +39,7 @@ public class TestDBTable extends iDBTable { case 4: return object.max_dim; case 5: - return object.files; + return object.getFilesForTable(); default: return null; } diff --git a/src/Visual_DVM_2021/Passes/All/CreateGroupFromDirectory.java b/src/Visual_DVM_2021/Passes/All/CreateGroupFromDirectory.java index 88364036..8d646934 100644 --- a/src/Visual_DVM_2021/Passes/All/CreateGroupFromDirectory.java +++ b/src/Visual_DVM_2021/Passes/All/CreateGroupFromDirectory.java @@ -63,10 +63,12 @@ public class CreateGroupFromDirectory extends Pass_2021 { } @Override protected void body() throws Exception { + /* for (File file : files) { ShowMessage1("создание проекта: "+file.getName()); passes.get(PassCode_2021.CreateTestFromDirectory).Do(file, group_id); } + */ } @Override protected void performFinish() throws Exception { diff --git a/src/Visual_DVM_2021/Passes/All/CreateTestFromDirectory.java b/src/Visual_DVM_2021/Passes/All/CreateTestFromDirectory.java deleted file mode 100644 index 0f37e52a..00000000 --- a/src/Visual_DVM_2021/Passes/All/CreateTestFromDirectory.java +++ /dev/null @@ -1,76 +0,0 @@ -package Visual_DVM_2021.Passes.All; -import Common.Constants; -import Common.Current; -import Common.Utils.Files.VDirectoryChooser; -import Common.Utils.Utils; -import ProjectData.Project.db_project_info; -import TestingSystem.Common.Test.Test; -import Visual_DVM_2021.Passes.PassCode_2021; -import Visual_DVM_2021.Passes.Pass_2021; - -import java.io.File; -public class CreateTestFromDirectory extends Pass_2021 { - db_project_info project = null; - int group_id; - File dir; - VDirectoryChooser directoryChooser = new VDirectoryChooser("Выбор домашней папки теста"); - @Override - public String getIconPath() { - return "/icons/CreateProject.png"; - } - @Override - public String getButtonText() { - return ""; - } - @Override - protected boolean needsAnimation() { - return true; - } - @Override - protected boolean canStart(Object... args) throws Exception { - group_id = Constants.Nan; - project = null; - dir = null; - target = null; - //- - if (args.length == 0) { - if (!Current.Check(Log, Current.Group)) - return false; - group_id = Current.getGroup().id; - dir = directoryChooser.ShowDialog(); - } else { - dir = (File) args[0]; - group_id = (int) args[1]; - } - //- - if (dir == null) - return false; - //-- - if (!dir.isDirectory()) { - Log.Writeln_(Utils.Brackets(dir) + "\nне является папкой!"); - return false; - } - //- - if (dir.getName().equals(Constants.data)) { - Log.Writeln_(Utils.Brackets(dir) + "\nявляется служебной папкой визуализатора!"); - return false; - } - return Utils.validateProjectFolder(dir, Log) && Utils.containsSource(dir, true); - } - @Override - protected void performPreparation() throws Exception { - passes.get(PassCode_2021.CloseCurrentProject).Do(); - } - @Override - protected void body() throws Exception { - project = new db_project_info(dir); - project.CreateVersionsTree(); - project.Open(); - project.Close(); - } - @Override - protected void performDone() throws Exception { - super.performDone(); - passes.get(PassCode_2021.PublishTest).Do(project,group_id); - } -} diff --git a/src/Visual_DVM_2021/Passes/All/CreateTestFromFolder.java b/src/Visual_DVM_2021/Passes/All/CreateTestFromFolder.java index 5ceea3f5..d78a7a6b 100644 --- a/src/Visual_DVM_2021/Passes/All/CreateTestFromFolder.java +++ b/src/Visual_DVM_2021/Passes/All/CreateTestFromFolder.java @@ -4,8 +4,9 @@ import Common.Current; import Common.Utils.Files.VDirectoryChooser; import Common.Utils.Utils; import ProjectData.Files.ProjectFile; -import ProjectData.LanguageName; +import TestingSystem.Common.Group.Group; import TestingSystem.Common.Test.Test; +import Visual_DVM_2021.Passes.PassCode_2021; import Visual_DVM_2021.Passes.Pass_2021; import java.io.File; @@ -24,19 +25,25 @@ public class CreateTestFromFolder extends Pass_2021 { protected boolean needsAnimation() { return true; } + Group group = null; File dir = null; + boolean show_log; Vector project_files = new Vector<>(); @Override protected boolean canStart(Object... args) throws Exception { if (args.length == 0) { + show_log = true; if (!Current.Check(Log, Current.Group)) return false; dir = directoryChooser.ShowDialog(); + group = Current.getGroup(); } else { + show_log = false; dir = (File) args[0]; + group = (Group) args[1]; } - if (dir ==null) { - Log.Writeln_("Папка не выбрана."); + if (dir == null) { + if (show_log) Log.Writeln_("Папка не выбрана."); return false; } //--- @@ -49,20 +56,19 @@ public class CreateTestFromFolder extends Pass_2021 { int other_project_files = 0; //--- if (dir.getName().equalsIgnoreCase(Constants.data)) { - Log.Writeln_("Папка " + Utils.Brackets(dir) + " является служебной папкой визуализатора."); + if (show_log) Log.Writeln_("Папка " + Utils.Brackets(dir) + " является служебной папкой визуализатора."); return false; } //-- if (files == null) { - Log.Writeln_("Не удалось получить список файлов для папки " + Utils.Brackets(dir) + "."); + if (show_log) Log.Writeln_("Не удалось получить список файлов для папки " + Utils.Brackets(dir) + "."); return false; } //-- for (File file : files) { if (!Utils.validateProjectFile(file, Log)) { - Log.Writeln_("Имя файла " + Utils.Brackets(file.getName()) - + " содержит запрещённые символы " + Constants.all_forbidden_characters_string + ", или кириллицу." - ); + if (show_log) + Log.Writeln_("Имя файла " + Utils.Brackets(file.getName()) + " содержит запрещённые символы " + Constants.all_forbidden_characters_string + ", или кириллицу."); bad++; } if (file.isDirectory() && !file.getName().equalsIgnoreCase(Constants.data)) { @@ -73,7 +79,7 @@ public class CreateTestFromFolder extends Pass_2021 { project_files.add(projectFile); switch (projectFile.fileType) { case program: - if (projectFile.languageName.equals(LanguageName.fortran)) + if (projectFile.languageName.equals(group.language)) fortran_programs++; else other_project_files++; @@ -89,20 +95,32 @@ public class CreateTestFromFolder extends Pass_2021 { } //-- if (subdirs > 0) { - Log.Writeln_("Папка " + Utils.Brackets(dir) + " содержит вложенные подпапки."); + if (show_log) Log.Writeln_("Папка " + Utils.Brackets(dir) + " содержит вложенные подпапки."); return false; } if (bad > 0) { return false; } if (fortran_programs == 0) { - Log.Writeln_("Папка не содержит ни одной программы на языке FORTRAN."); + if (show_log) + Log.Writeln_("Папка не содержит ни одной программы на языке " + group.language.getDescription() + "."); return false; } if (other_project_files > 0) { - Log.Writeln_("Папка содержит файлы, не являющиеся программами на языке FORTRAN, или заголовочными."); + if (show_log) + Log.Writeln_("Папка содержит файлы, не являющиеся программами на языке FORTRAN, или заголовочными."); return false; } + //----- + target = new Test(); + target.sender_address = Current.getAccount().email; + target.sender_name = Current.getAccount().name; + target.group_id = group.id; + target.description = dir.getName(); + Vector filesNames = new Vector<>(); + for (ProjectFile projectFile : project_files) + filesNames.add(projectFile.file.getName()); + target.files = String.join("\n", filesNames); return true; } @Override @@ -113,5 +131,12 @@ public class CreateTestFromFolder extends Pass_2021 { } System.out.println("==================="); //-- + target.packCode(dir); //создание копии папки, и архивация. + //-- + } + @Override + protected void performDone() throws Exception { + super.performDone(); + passes.get(PassCode_2021.PublishTest).Do(target); } } diff --git a/src/Visual_DVM_2021/Passes/All/CreateTestsGroupFromSelectedVersions.java b/src/Visual_DVM_2021/Passes/All/CreateTestsGroupFromSelectedVersions.java index a0adf15d..8df69af4 100644 --- a/src/Visual_DVM_2021/Passes/All/CreateTestsGroupFromSelectedVersions.java +++ b/src/Visual_DVM_2021/Passes/All/CreateTestsGroupFromSelectedVersions.java @@ -71,12 +71,14 @@ public class CreateTestsGroupFromSelectedVersions extends Pass_2021 { - boolean from_current_project; - protected int group_id; - protected db_project_info project = null; public PublishTest() { super(Global.testingServer, Test.class); } @Override - public boolean fillObjectFields() throws Exception { - target.description = project.getLocalName(); - if (!project.description.isEmpty()) { - target.description += " " + project.description; - target.description = Utils.ReplaceForbiddenSymbols(target.description); - } - target.group_id = group_id; - //подпапок нет. имена совпадают с относительными. - Vector filesNames = new Vector<>(project.db.files.Data.keySet()); - target.files = String.join(";", filesNames); - //-- - if (from_current_project) { - // target.max_dim = project.testMaxDim; - return super.fillObjectFields(); - } else { - switch (project.languageName) { - case fortran: - target.max_dim = Current.getSapfor().getTextMaxDim(null, project); - break; - case c: - target.max_dim = Utils.getCProjectMaxDim(project); - break; - } - return true; - } - } - @Override - protected void performPreparation() throws Exception { - target.packProject(project); - } - @Override protected boolean canStart(Object... args) throws Exception { - group_id = Constants.Nan; - project = null; - if (args.length == 0) { - from_current_project = true; - if (Current.Check(Log, Current.Group, Current.Project) && UI.Question("Добавить текущий проект в глобальную базу тестов")) { - project = Current.getProject(); - group_id = Current.getGroup().id; - } - } else { - from_current_project = false; - project = (db_project_info) args[0]; - group_id = (int) args[1]; - } - //-- - if (project == null) - return false; - //-- - if (!project.checkSubdirectories(Log)) - return false; - //- - return super.canStart(args); - } - @Override - protected void performFinish() throws Exception { - if (from_current_project) - super.performFinish(); - else disconnect(); - } - @Override - protected void showDone() throws Exception { - if (from_current_project) - super.showDone(); + target = (Test) args[0]; + return true; } } diff --git a/src/Visual_DVM_2021/Passes/PassCode_2021.java b/src/Visual_DVM_2021/Passes/PassCode_2021.java index 9a982dc6..1a4969b0 100644 --- a/src/Visual_DVM_2021/Passes/PassCode_2021.java +++ b/src/Visual_DVM_2021/Passes/PassCode_2021.java @@ -297,7 +297,6 @@ public enum PassCode_2021 { DeleteConfiguration, AbortTaskPackage, //-- - CreateTestFromDirectory, CreateGroupFromDirectory, PublishTests, CreateTestFromFolder, @@ -315,8 +314,7 @@ public enum PassCode_2021 { return "Удаление Open MP директив"; case CreateGroupFromDirectory: return "Создать группу тестов из папки"; - case CreateTestFromDirectory: - return "Создать тест из папки"; + case AbortTaskPackage: return "Прерывать пакет тестирования DVM"; case DeleteConfiguration: