2024-03-04 20:29:05 +03:00
|
|
|
|
package Visual_DVM_2021.Passes.All;
|
2024-10-09 23:37:58 +03:00
|
|
|
|
import Common.Current_;
|
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.Constants;
|
|
|
|
|
|
import _VisualDVM.Current;
|
2024-10-08 23:45:06 +03:00
|
|
|
|
import Common.Visual.Windows.Dialog.VFileChooser;
|
2024-10-09 22:01:19 +03:00
|
|
|
|
import _VisualDVM.Utils;
|
2024-10-09 22:21:57 +03:00
|
|
|
|
import _VisualDVM.GlobalData.Settings.SettingName;
|
|
|
|
|
|
import _VisualDVM.Repository.Server.ServerCode;
|
|
|
|
|
|
import _VisualDVM.Repository.Server.ServerExchangeUnit_2021;
|
|
|
|
|
|
import _VisualDVM.TestingSystem.Common.Group.Group;
|
|
|
|
|
|
import _VisualDVM.TestingSystem.Common.Test.Test;
|
2024-10-09 23:37:58 +03:00
|
|
|
|
import Visual_DVM_2021.Passes.PassCode;
|
2024-10-10 23:57:36 +03:00
|
|
|
|
import Common.Passes.Pass;
|
2024-03-04 20:29:05 +03:00
|
|
|
|
import Visual_DVM_2021.Passes.Server.TestingSystemPass;
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
import java.util.LinkedHashMap;
|
|
|
|
|
|
import java.util.Vector;
|
|
|
|
|
|
public class ReplaceTestsFromFiles extends TestingSystemPass<Vector<Test>> {
|
|
|
|
|
|
VFileChooser fileChooser = new VFileChooser("Выберите файлы для замены тестов");
|
2024-03-05 16:49:57 +03:00
|
|
|
|
//--
|
|
|
|
|
|
Group group;
|
|
|
|
|
|
LinkedHashMap<Integer, Test> oldTests;
|
2024-03-05 19:21:42 +03:00
|
|
|
|
Vector<Test> replaceTests;
|
2024-03-05 19:52:49 +03:00
|
|
|
|
Vector<Test> newTests;
|
2024-03-05 16:49:57 +03:00
|
|
|
|
//--
|
2024-03-04 20:29:05 +03:00
|
|
|
|
@Override
|
|
|
|
|
|
public String getIconPath() {
|
|
|
|
|
|
return "/icons/Menu/Undo.png";
|
|
|
|
|
|
}
|
|
|
|
|
|
//-
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected boolean canStart(Object... args) throws Exception {
|
2024-10-09 23:37:58 +03:00
|
|
|
|
if (!Current_.Check(Log, Current.Group))
|
2024-03-04 20:29:05 +03:00
|
|
|
|
return false;
|
|
|
|
|
|
group = Current.getGroup();
|
2024-03-05 16:49:57 +03:00
|
|
|
|
//--->>>
|
2024-03-04 20:29:05 +03:00
|
|
|
|
Utils.RestoreSelectedDirectory(fileChooser);
|
|
|
|
|
|
Vector<File> files = fileChooser.ShowMultiDialog();
|
2024-03-05 19:21:42 +03:00
|
|
|
|
//---------------------------------------------------------------
|
2024-03-04 20:29:05 +03:00
|
|
|
|
//--
|
|
|
|
|
|
File dir = fileChooser.getCurrentDirectory();
|
2024-10-09 23:37:58 +03:00
|
|
|
|
Pass.passes.get(PassCode.UpdateSetting).Do(SettingName.ProjectsSearchDirectory, dir);
|
2024-03-04 20:29:05 +03:00
|
|
|
|
//---------------
|
|
|
|
|
|
if (dir.getName().equals(Constants.data)) {
|
2024-10-11 00:00:30 +03:00
|
|
|
|
Log.Writeln_(Utils_.Brackets(dir) + "\nявляется служебной папкой визуализатора!");
|
2024-03-04 20:29:05 +03:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!Utils.validateProjectFile(dir, Log)) {
|
2024-10-11 00:00:30 +03:00
|
|
|
|
Log.Writeln_("Имя папки " + Utils_.Brackets(dir.getName()) + " содержит запрещённые символы "
|
|
|
|
|
|
+ Utils_.printAllForbiddenCharacters()
|
2024-10-07 22:04:09 +03:00
|
|
|
|
+ ", или кириллицу.");
|
2024-03-04 20:29:05 +03:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2024-03-05 19:21:42 +03:00
|
|
|
|
if (files.isEmpty()) {
|
|
|
|
|
|
Log.Writeln_("Не выбрано ни одного файла.");
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------
|
|
|
|
|
|
LinkedHashMap<String, File> filesByNames = new LinkedHashMap<>(); //выделенные файлы, сортированные по именам.
|
|
|
|
|
|
//--
|
|
|
|
|
|
for (File file : files) {
|
2024-10-11 00:00:30 +03:00
|
|
|
|
String name = Utils_.getNameWithoutExtension(file.getName()).toLowerCase();
|
2024-03-05 19:21:42 +03:00
|
|
|
|
if (!filesByNames.containsKey(name)) {
|
|
|
|
|
|
filesByNames.put(name, file);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-03-04 20:29:05 +03:00
|
|
|
|
//--
|
2024-03-05 16:49:57 +03:00
|
|
|
|
oldTests = new LinkedHashMap<>();
|
2024-03-04 20:29:05 +03:00
|
|
|
|
Vector<String> testForReplaceNames = new Vector<>();
|
2024-03-05 19:52:49 +03:00
|
|
|
|
Vector<String> newTestsNames = new Vector<>();
|
2024-03-05 19:21:42 +03:00
|
|
|
|
//--
|
2024-03-05 19:52:49 +03:00
|
|
|
|
for (String name : filesByNames.keySet()) {
|
2024-03-05 19:21:42 +03:00
|
|
|
|
boolean exists = false;
|
2024-03-05 19:52:49 +03:00
|
|
|
|
for (Test test : server.db.tests.Data.values()) {
|
|
|
|
|
|
if ((test.group_id == group.id) && test.description.equals(name)) {
|
|
|
|
|
|
exists = true;
|
2024-03-05 19:21:42 +03:00
|
|
|
|
//--
|
|
|
|
|
|
oldTests.put(test.id, test);
|
|
|
|
|
|
testForReplaceNames.add(name);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-03-05 19:52:49 +03:00
|
|
|
|
if (!exists)
|
|
|
|
|
|
newTestsNames.add(name);
|
2024-03-04 20:29:05 +03:00
|
|
|
|
}
|
2024-03-05 19:21:42 +03:00
|
|
|
|
//--
|
2024-03-05 19:52:49 +03:00
|
|
|
|
if (oldTests.size() == 0) {
|
2024-03-04 20:29:05 +03:00
|
|
|
|
Log.Writeln_("Не найдено тестов на замену.");
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
//--
|
2024-10-11 00:00:30 +03:00
|
|
|
|
if (UI_.Question(
|
2024-03-05 19:52:49 +03:00
|
|
|
|
testForReplaceNames.size() + " тестов будет заменено,\n" +
|
|
|
|
|
|
newTestsNames.size() + " тестов будет добавлено.\n" +
|
|
|
|
|
|
"Продолжить"
|
|
|
|
|
|
)) {
|
2024-03-05 19:21:42 +03:00
|
|
|
|
replaceTests = new Vector<>();
|
2024-10-09 23:37:58 +03:00
|
|
|
|
Pass createTestPass = passes.get(PassCode.CreateTestFromFile);
|
2024-03-05 19:52:49 +03:00
|
|
|
|
for (Test old_test : oldTests.values()) {
|
|
|
|
|
|
File file = filesByNames.get(old_test.description);
|
|
|
|
|
|
if (createTestPass.Do(file, group)) {
|
2024-03-05 16:49:57 +03:00
|
|
|
|
Test new_test = (Test) createTestPass.target;
|
2024-03-05 19:21:42 +03:00
|
|
|
|
replaceTests.add(new_test);
|
2024-03-05 16:49:57 +03:00
|
|
|
|
new_test.id = old_test.id;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-03-05 19:52:49 +03:00
|
|
|
|
//--
|
|
|
|
|
|
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-03-04 20:29:05 +03:00
|
|
|
|
return true;
|
2024-03-05 19:52:49 +03:00
|
|
|
|
}
|
|
|
|
|
|
;
|
2024-03-04 20:29:05 +03:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
//-
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void ServerAction() throws Exception {
|
2024-03-05 19:52:49 +03:00
|
|
|
|
if (!replaceTests.isEmpty())
|
|
|
|
|
|
Command(new ServerExchangeUnit_2021(ServerCode.ReplaceTestsCodes, null, replaceTests));
|
|
|
|
|
|
if (!newTests.isEmpty())
|
|
|
|
|
|
Command(new ServerExchangeUnit_2021(ServerCode.PublishObjects, null, newTests));
|
2024-03-05 16:49:57 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void performFinish() throws Exception {
|
|
|
|
|
|
super.performFinish();
|
2024-10-09 23:37:58 +03:00
|
|
|
|
passes.get(PassCode.SynchronizeTests).Do();
|
2024-03-04 20:29:05 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|