2023-11-23 20:38:57 +03:00
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 ;
2023-11-24 00:23:12 +03:00
import ProjectData.Project.db_project_info ;
2023-11-23 22:38:21 +03:00
import TestingSystem.Common.Group.Group ;
2023-11-23 20:38:57 +03:00
import TestingSystem.Common.Test.Test ;
2023-11-23 22:38:21 +03:00
import Visual_DVM_2021.Passes.PassCode_2021 ;
2023-11-23 20:38:57 +03:00
import Visual_DVM_2021.Passes.Pass_2021 ;
import java.io.File ;
import java.util.Vector ;
public class CreateTestFromFolder extends Pass_2021 < Test > {
VDirectoryChooser directoryChooser = new VDirectoryChooser ( " Выбор домашней папки теста " ) ;
@Override
public String getIconPath ( ) {
return " /icons/OpenProject.png " ;
}
@Override
public String getButtonText ( ) {
return " " ;
}
@Override
protected boolean needsAnimation ( ) {
return true ;
}
2023-11-23 22:38:21 +03:00
Group group = null ;
2023-11-23 20:38:57 +03:00
File dir = null ;
2023-11-23 22:38:21 +03:00
boolean show_log ;
2023-11-23 20:38:57 +03:00
Vector < ProjectFile > project_files = new Vector < > ( ) ;
@Override
protected boolean canStart ( Object . . . args ) throws Exception {
if ( args . length = = 0 ) {
2023-11-23 22:38:21 +03:00
show_log = true ;
2023-11-23 20:38:57 +03:00
if ( ! Current . Check ( Log , Current . Group ) )
return false ;
dir = directoryChooser . ShowDialog ( ) ;
2023-11-23 22:38:21 +03:00
group = Current . getGroup ( ) ;
2023-11-23 20:38:57 +03:00
} else {
2023-11-23 22:38:21 +03:00
show_log = false ;
2023-11-23 20:38:57 +03:00
dir = ( File ) args [ 0 ] ;
2023-11-23 22:38:21 +03:00
group = ( Group ) args [ 1 ] ;
2023-11-23 20:38:57 +03:00
}
2023-11-23 22:38:21 +03:00
if ( dir = = null ) {
if ( show_log ) Log . Writeln_ ( " Папка не выбрана. " ) ;
2023-11-23 20:38:57 +03:00
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 ) ) {
2023-11-23 22:38:21 +03:00
if ( show_log ) Log . Writeln_ ( " Папка " + Utils . Brackets ( dir ) + " является служебной папкой визуализатора. " ) ;
2023-11-23 20:38:57 +03:00
return false ;
}
//--
if ( files = = null ) {
2023-11-23 22:38:21 +03:00
if ( show_log ) Log . Writeln_ ( " Н е удалось получить список файлов для папки " + Utils . Brackets ( dir ) + " . " ) ;
2023-11-23 20:38:57 +03:00
return false ;
}
//--
for ( File file : files ) {
if ( ! Utils . validateProjectFile ( file , Log ) ) {
2023-11-23 22:38:21 +03:00
if ( show_log )
Log . Writeln_ ( " Имя файла " + Utils . Brackets ( file . getName ( ) ) + " содержит запрещённые символы " + Constants . all_forbidden_characters_string + " , или кириллицу. " ) ;
2023-11-23 20:38:57 +03:00
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 :
2023-11-23 22:38:21 +03:00
if ( projectFile . languageName . equals ( group . language ) )
2023-11-23 20:38:57 +03:00
fortran_programs + + ;
else
other_project_files + + ;
break ;
case header :
headers + + ;
break ;
default :
other_project_files + + ;
break ;
}
}
}
//--
if ( subdirs > 0 ) {
2023-11-23 22:38:21 +03:00
if ( show_log ) Log . Writeln_ ( " Папка " + Utils . Brackets ( dir ) + " содержит вложенные подпапки. " ) ;
2023-11-23 20:38:57 +03:00
return false ;
}
if ( bad > 0 ) {
return false ;
}
if ( fortran_programs = = 0 ) {
2023-11-23 22:38:21 +03:00
if ( show_log )
Log . Writeln_ ( " Папка не содержит ни одной программы на языке " + group . language . getDescription ( ) + " . " ) ;
2023-11-23 20:38:57 +03:00
return false ;
}
if ( other_project_files > 0 ) {
2023-11-23 22:38:21 +03:00
if ( show_log )
Log . Writeln_ ( " Папка содержит файлы, не являющиеся программами на языке FORTRAN, или заголовочными. " ) ;
2023-11-23 20:38:57 +03:00
return false ;
}
2023-11-23 22:38:21 +03:00
//-----
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 < String > filesNames = new Vector < > ( ) ;
for ( ProjectFile projectFile : project_files )
filesNames . add ( projectFile . file . getName ( ) ) ;
target . files = String . join ( " \ n " , filesNames ) ;
2023-11-23 20:38:57 +03:00
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 ( " =================== " ) ;
//--
2023-11-24 00:23:12 +03:00
db_project_info project = target . packCode ( dir ) ; //создание копии папки, и архивация.
//-- получить размерность консольным сапфором.
2023-11-23 22:38:21 +03:00
}
@Override
protected void performDone ( ) throws Exception {
super . performDone ( ) ;
passes . get ( PassCode_2021 . PublishTest ) . Do ( target ) ;
2023-11-23 20:38:57 +03:00
}
}