2023-11-30 01:25:26 +03:00
package Visual_DVM_2021.Passes.All ;
2023-12-01 22:42:40 +03:00
import Common.Constants ;
import Common.Current ;
import Common.Utils.Files.VFileChooser ;
import Common.Utils.Utils ;
import GlobalData.Settings.SettingName ;
import ProjectData.Files.FileType ;
import ProjectData.Files.ProjectFile ;
import ProjectData.LanguageName ;
import Repository.Component.Sapfor.Sapfor ;
import TestingSystem.Common.Group.Group ;
2023-12-01 19:31:31 +03:00
import TestingSystem.Common.Test.Test ;
2023-12-01 22:42:40 +03:00
import Visual_DVM_2021.Passes.PassCode_2021 ;
import Visual_DVM_2021.Passes.PassException ;
2023-11-30 01:25:26 +03:00
import Visual_DVM_2021.Passes.Pass_2021 ;
2023-12-01 22:42:40 +03:00
import org.apache.commons.io.FileUtils ;
import java.io.File ;
2023-12-01 19:31:31 +03:00
public class CreateTestFromFile extends Pass_2021 < Test > {
2023-12-01 22:42:40 +03:00
VFileChooser fileChooser = new VFileChooser ( " Выберите файл для создания теста " ) ;
//---
File file ;
Group group ;
boolean from_file_chooser = false ;
ProjectFile projectFile ;
//---
@Override
public String getIconPath ( ) {
return " /icons/AddFile.png " ;
}
@Override
public String getButtonText ( ) {
return " " ;
}
@Override
protected boolean canStart ( Object . . . args ) throws Exception {
projectFile = null ;
if ( args . length = = 0 ) {
from_file_chooser = true ;
if ( ! Current . Check ( Log , Current . Group ) )
return false ;
group = Current . getGroup ( ) ;
Utils . RestoreSelectedDirectory ( fileChooser ) ;
file = fileChooser . ShowDialog ( ) ;
if ( file = = null ) {
Log . Writeln_ ( " Файл не выбран " ) ;
return false ;
} else {
Pass_2021 . passes . get ( PassCode_2021 . UpdateSetting ) . Do ( SettingName . ProjectsSearchDirectory , file . getParent ( ) ) ;
}
} else {
from_file_chooser = false ;
file = ( File ) args [ 0 ] ;
group = ( Group ) args [ 1 ] ;
}
if ( Utils . ContainsCyrillic ( file . getName ( ) ) | | Utils . ContainsForbiddenName ( file . getName ( ) ) ) {
Log . Writeln_ ( " Имя файла " + Utils . Brackets ( file . getName ( ) ) + " содержит запрещённые символы " + Constants . all_forbidden_characters_string + " , или кириллицу. " ) ;
return false ;
}
//если файл. все недопустимые файлы просто игнорируются.
projectFile = new ProjectFile ( file ) ;
if ( ! projectFile . fileType . equals ( FileType . program ) | | ! projectFile . languageName . equals ( group . language ) ) {
Log . Writeln_ ( " Н е удалось распознать файл как программу на языке " + group . language . getDescription ( ) ) ;
return false ;
}
//-----
target = new Test ( ) ;
target . sender_address = Current . getAccount ( ) . email ;
target . sender_name = Current . getAccount ( ) . name ;
target . group_id = group . id ;
target . description = Utils . getNameWithoutExtension ( file . getName ( ) ) ;
target . files = file . getName ( ) ;
return true ;
}
public File packTestCode ( ) throws Exception {
target . temp_project_name = Utils . getDateName ( " test " ) ;
//-
File tempProject = target . getTempProject ( ) ;
File tempArchive = target . getTempArchive ( ) ;
//- создать бд.
FileUtils . forceMkdir ( tempProject ) ;
//--
File dst = new File ( tempProject , projectFile . file . getName ( ) ) ;
FileUtils . copyFile ( projectFile . file , dst ) ;
//---
Utils . ClearProjectData ( tempProject ) ;
//--
ZipFolderPass zip = new ZipFolderPass ( ) ;
if ( zip . Do ( tempProject . getAbsolutePath ( ) , tempArchive . getAbsolutePath ( ) ) ) {
target . project_archive_bytes = Utils . packFile ( tempArchive ) ;
} else throw new PassException ( " Н е удалось создать архив папки с кодом." ) ;
return tempProject ;
}
@Override
protected void body ( ) throws Exception {
ShowMessage1 ( file . getName ( ) ) ;
//--
File tempProject = packTestCode ( ) ; //создание копии папки, и архивация.
//-- получить размерность консольным сапфором. папка уже отправлена и чистить е е не нужно!!
ShowMessage2 ( " Синтаксический анализ и определение размерности " ) ;
if ( group . language = = LanguageName . fortran ) { //если не определит, будут нули.
Sapfor . getMinMaxDim ( Sapfor . getTempCopy ( Current . getSapfor ( ) . getFile ( ) ) , tempProject , target ) ;
}
}
@Override
protected boolean validate ( ) {
return Log . isEmpty ( ) ;
}
@Override
protected void performDone ( ) throws Exception {
super . performDone ( ) ;
if ( from_file_chooser )
passes . get ( PassCode_2021 . PublishTest ) . Do ( target ) ;
}
2023-11-30 01:25:26 +03:00
}