package Visual_DVM_2021.Passes.All; import Common.Constants; import Common.Current; import Common.Utils.Files.VDirectoryChooser; import Common.Utils.Utils; import ProjectData.Files.ProjectFile; import ProjectData.Project.db_project_info; import Repository.Component.Sapfor.Sapfor; 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; import java.util.Vector; public class CreateTestFromFolder extends Pass_2021 { VDirectoryChooser directoryChooser = new VDirectoryChooser("Выбор домашней папки теста"); @Override public String getIconPath() { return "/icons/OpenProject.png"; } @Override public String getButtonText() { return ""; } @Override 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) { if (show_log) Log.Writeln_("Папка не выбрана."); return false; } //--- File[] files = dir.listFiles(); project_files = new Vector<>(); int subdirs = 0; int bad = 0; int fortran_programs = 0; int headers = 0; int other_project_files = 0; //--- if (dir.getName().equalsIgnoreCase(Constants.data)) { if (show_log) Log.Writeln_("Папка " + Utils.Brackets(dir) + " является служебной папкой визуализатора."); return false; } //-- if (files == null) { if (show_log) Log.Writeln_("Не удалось получить список файлов для папки " + Utils.Brackets(dir) + "."); return false; } //-- for (File file : files) { if (!Utils.validateProjectFile(file, Log)) { if (show_log) Log.Writeln_("Имя файла " + Utils.Brackets(file.getName()) + " содержит запрещённые символы " + Constants.all_forbidden_characters_string + ", или кириллицу."); bad++; } if (file.isDirectory() && !file.getName().equalsIgnoreCase(Constants.data)) { subdirs++; } if (file.isFile()) { ProjectFile projectFile = new ProjectFile(file); project_files.add(projectFile); switch (projectFile.fileType) { case program: if (projectFile.languageName.equals(group.language)) fortran_programs++; else other_project_files++; break; case header: headers++; break; default: other_project_files++; break; } } } //-- if (subdirs > 0) { if (show_log) Log.Writeln_("Папка " + Utils.Brackets(dir) + " содержит вложенные подпапки."); return false; } if (bad > 0) { return false; } if (fortran_programs == 0) { if (show_log) Log.Writeln_("Папка не содержит ни одной программы на языке " + group.language.getDescription() + "."); return false; } if (other_project_files > 0) { 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 protected void body() throws Exception { System.out.println("found " + project_files.size()); for (ProjectFile projectFile : project_files) { System.out.println(projectFile.file.getAbsolutePath()); } System.out.println("==================="); //-- db_project_info project = target.packCode(dir); //создание копии папки, и архивация. //-- получить размерность консольным сапфором. папка уже отправлена и чистить ее не нужно!! if (Sapfor.parse(Current.getSapfor().getFile(), project.Home, Current.getSapfor().getConsoleFlags())){ Sapfor.analysis(Current.getSapfor().getFile(),project.Home, PassCode_2021.SPF_GetMaxMinBlockDistribution, Current.getSapfor().getConsoleFlags()); } //todo получить значение из файла вывода анализа. } @Override protected void performDone() throws Exception { super.performDone(); passes.get(PassCode_2021.PublishTest).Do(target); } }