2024-03-04 20:29:05 +03:00
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 ;
2024-03-05 16:49:57 +03:00
import Repository.Server.ServerCode ;
import Repository.Server.ServerExchangeUnit_2021 ;
2024-03-04 20:29:05 +03:00
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 < Vector < Test > > {
VFileChooser fileChooser = new VFileChooser ( " Выберите файлы для замены тестов " ) ;
2024-03-05 16:49:57 +03:00
//--
Group group ;
LinkedHashMap < Integer , Test > oldTests ;
Vector < Test > newTests ;
//--
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 {
if ( ! Current . Check ( Log , Current . Group ) )
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 16:49:57 +03:00
LinkedHashMap < String , File > filesForReplace = new LinkedHashMap < > ( ) ; //выделенные файлы, сортированные по именам.
2024-03-04 20:29:05 +03:00
//--
if ( files . isEmpty ( ) ) {
Log . Writeln_ ( " Н е выбрано ни одного файла." ) ;
return false ;
}
//--
for ( File file : files ) {
String name = Utils . getNameWithoutExtension ( file . getName ( ) ) . toLowerCase ( ) ;
2024-03-05 16:49:57 +03:00
if ( ! filesForReplace . containsKey ( name ) ) {
filesForReplace . put ( name , file ) ;
2024-03-04 20:29:05 +03:00
}
}
//--
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 ;
}
//--
2024-03-05 16:49:57 +03:00
oldTests = new LinkedHashMap < > ( ) ;
2024-03-04 20:29:05 +03:00
Vector < String > testForReplaceNames = new Vector < > ( ) ;
for ( Test test : server . db . tests . Data . values ( ) ) {
2024-03-05 16:49:57 +03:00
if ( ( test . group_id = = group . id ) & & filesForReplace . containsKey ( test . description ) ) {
oldTests . put ( test . id , test ) ;
2024-03-04 20:29:05 +03:00
testForReplaceNames . add ( test . description ) ;
}
}
2024-03-05 16:49:57 +03:00
if ( oldTests . size ( ) = = 0 ) {
2024-03-04 20:29:05 +03:00
Log . Writeln_ ( " Н е найдено тестов на замену." ) ;
return false ;
}
//--
if ( UI . Question ( " Тесты " + String . join ( " \ n " , testForReplaceNames ) + " \ nб у ду т заменены. Продолжить " ) ) {
2024-03-05 16:49:57 +03:00
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 ;
}
}
2024-03-04 20:29:05 +03:00
return true ;
} ;
return false ;
}
//-
@Override
protected void ServerAction ( ) throws Exception {
2024-03-05 16:49:57 +03:00
Command ( new ServerExchangeUnit_2021 ( ServerCode . ReplaceTestsCodes , null , newTests ) ) ;
}
@Override
protected void performFinish ( ) throws Exception {
super . performFinish ( ) ;
passes . get ( PassCode_2021 . SynchronizeTests ) . Do ( ) ;
2024-03-04 20:29:05 +03:00
}
}