package Visual_DVM_2021.Passes.All; import Common.Constants; import Common.Current; import Common.UI.UI; import Common.Utils.Files.VFileChooser; import Common.Utils.Utils; import GlobalData.Settings.SettingName; import Repository.Server.ServerCode; import Repository.Server.ServerExchangeUnit_2021; 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 Visual_DVM_2021.Passes.Server.TestingSystemPass; import java.io.File; import java.util.LinkedHashMap; import java.util.Vector; public class ReplaceTestsFromFiles extends TestingSystemPass> { VFileChooser fileChooser = new VFileChooser("Выберите файлы для замены тестов"); //-- Group group; LinkedHashMap oldTests; Vector newTests; //-- @Override public String getIconPath() { return "/icons/Menu/Undo.png"; } //- @Override protected boolean canStart(Object... args) throws Exception { if (!Current.Check(Log, Current.Group)) return false; group = Current.getGroup(); //--->>> Utils.RestoreSelectedDirectory(fileChooser); Vector files = fileChooser.ShowMultiDialog(); LinkedHashMap filesForReplace = new LinkedHashMap<>(); //выделенные файлы, сортированные по именам. //-- if (files.isEmpty()) { Log.Writeln_("Не выбрано ни одного файла."); return false; } //-- for (File file : files) { String name = Utils.getNameWithoutExtension(file.getName()).toLowerCase(); if (!filesForReplace.containsKey(name)) { filesForReplace.put(name, file); } } //-- File dir = fileChooser.getCurrentDirectory(); Pass_2021.passes.get(PassCode_2021.UpdateSetting).Do(SettingName.ProjectsSearchDirectory, dir); //--------------- if (dir.getName().equals(Constants.data)) { Log.Writeln_(Utils.Brackets(dir) + "\nявляется служебной папкой визуализатора!"); return false; } if (!Utils.validateProjectFile(dir, Log)) { Log.Writeln_("Имя папки " + Utils.Brackets(dir.getName()) + " содержит запрещённые символы " + Constants.all_forbidden_characters_string + ", или кириллицу."); return false; } //-- oldTests = new LinkedHashMap<>(); Vector testForReplaceNames = new Vector<>(); for (Test test : server.db.tests.Data.values()) { if ((test.group_id == group.id)&&filesForReplace.containsKey(test.description)) { oldTests.put(test.id, test); testForReplaceNames.add(test.description); } } if (oldTests.size()==0){ Log.Writeln_("Не найдено тестов на замену."); return false; } //-- if (UI.Question("Тесты\n"+String.join("\n", testForReplaceNames)+"\nбудут заменены. Продолжить")){ newTests = new Vector<>(); Pass_2021 createTestPass = passes.get(PassCode_2021.CreateTestFromFile); for (Test old_test: oldTests.values()){ File file= filesForReplace.get(old_test.description); if (createTestPass.Do(file, group)){ Test new_test = (Test) createTestPass.target; newTests.add(new_test); new_test.id = old_test.id; } } return true; }; return false; } //- @Override protected void ServerAction() throws Exception { Command(new ServerExchangeUnit_2021(ServerCode.ReplaceTestsCodes, null, newTests)); } @Override protected void performFinish() throws Exception { super.performFinish(); passes.get(PassCode_2021.SynchronizeTests).Do(); } }