package _VisualDVM.Passes.All; import Common.Passes.Pass; import Common.Utils.Utils_; import Common.Visual.UI; import Common.Visual.Windows.Dialog.VFileChooser; import _VisualDVM.Constants; import _VisualDVM.Global; import _VisualDVM.Passes.PassCode; import _VisualDVM.Passes.Server.TestingSystemPass; import _VisualDVM.Repository.Server.ServerCode; import _VisualDVM.Repository.Server.ServerExchangeUnit_2021; import _VisualDVM.TestingSystem.Common.Group.Group; import _VisualDVM.TestingSystem.Common.Test.Test; import _VisualDVM.Utils; 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 replaceTests; Vector newTests; //-- @Override public String getIconPath() { return "/icons/Menu/Undo.png"; } //- @Override protected boolean canStart(Object... args) throws Exception { if (!Global.testingServer.db.groups.getUI().CheckCurrent(Log)) return false; group = Global.testingServer.db.groups.getUI().getCurrent(); //--->>> Utils.RestoreSelectedDirectory(fileChooser); Vector files = fileChooser.ShowMultiDialog(); //--------------------------------------------------------------- //-- File dir = fileChooser.getCurrentDirectory(); Global.mainModule.getPass(PassCode.UpdateProperty).Do("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()) + " содержит запрещённые символы " + Utils_.printAllForbiddenCharacters() + ", или кириллицу."); return false; } if (files.isEmpty()) { Log.Writeln_("Не выбрано ни одного файла."); return false; } //----------------------------------------- LinkedHashMap filesByNames = new LinkedHashMap<>(); //выделенные файлы, сортированные по именам. //-- for (File file : files) { String name = Utils_.getNameWithoutExtension(file.getName()).toLowerCase(); if (!filesByNames.containsKey(name)) { filesByNames.put(name, file); } } //-- oldTests = new LinkedHashMap<>(); Vector testForReplaceNames = new Vector<>(); Vector newTestsNames = new Vector<>(); //-- for (String name : filesByNames.keySet()) { boolean exists = false; for (Test test : server.db.tests.Data.values()) { if ((test.group_id == group.id) && test.description.equals(name)) { exists = true; //-- oldTests.put(test.id, test); testForReplaceNames.add(name); break; } } if (!exists) newTestsNames.add(name); } //-- if (oldTests.size() == 0) { Log.Writeln_("Не найдено тестов на замену."); return false; } //-- if (UI.Question( testForReplaceNames.size() + " тестов будет заменено,\n" + newTestsNames.size() + " тестов будет добавлено.\n" + "Продолжить" )) { replaceTests = new Vector<>(); Pass createTestPass = Global.mainModule.getPass(PassCode.CreateTestFromFile); for (Test old_test : oldTests.values()) { File file = filesByNames.get(old_test.description); if (createTestPass.Do(file, group)) { Test new_test = (Test) createTestPass.target; replaceTests.add(new_test); new_test.id = old_test.id; } } //-- newTests = new Vector<>(); for (String name : newTestsNames) { File file = filesByNames.get(name); if (createTestPass.Do(file, group)) { Test new_test = (Test) createTestPass.target; newTests.add(new_test); } } return true; } ; return false; } //- @Override protected void ServerAction() throws Exception { if (!replaceTests.isEmpty()) Command(new ServerExchangeUnit_2021(ServerCode.ReplaceTestsCodes, null, replaceTests)); if (!newTests.isEmpty()) Command(new ServerExchangeUnit_2021(ServerCode.PublishObjects, null, newTests)); } @Override protected void performFinish() throws Exception { super.performFinish(); Global.mainModule.getPass(PassCode.SynchronizeTests).Do(); } }