Доделал определение размерности консолью.
This commit is contained in:
@@ -520,6 +520,10 @@ public abstract class Sapfor extends OSDComponent {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//---
|
||||
public static Vector<String> outputLines = null;
|
||||
public static Vector<String> errorsLines = null;
|
||||
//---
|
||||
public static boolean performScript(String name, //имя скрипта
|
||||
File sapfor_drv, //путь к сапфору
|
||||
File workspace, //проект
|
||||
@@ -534,6 +538,8 @@ public abstract class Sapfor extends OSDComponent {
|
||||
Utils.CheckDirectory(data_workspace);
|
||||
File outputFile = new File(data_workspace, outName);
|
||||
File errorsFile = new File(data_workspace, errName);
|
||||
outputLines = null;
|
||||
errorsLines = null;
|
||||
Utils.delete_with_check(outputFile);
|
||||
Utils.delete_with_check(errorsFile);
|
||||
//---
|
||||
@@ -568,8 +574,8 @@ public abstract class Sapfor extends OSDComponent {
|
||||
while (!flag);
|
||||
process = null;
|
||||
//---
|
||||
Vector<String> outputLines = new Vector<>(FileUtils.readLines(outputFile));
|
||||
Vector<String> errorsLines = new Vector<>(FileUtils.readLines(errorsFile));
|
||||
outputLines = new Vector<>(FileUtils.readLines(outputFile));
|
||||
errorsLines = new Vector<>(FileUtils.readLines(errorsFile));
|
||||
return (exit_code == 0) &&
|
||||
checkLines(outputLines) &&
|
||||
checkLines(errorsLines);
|
||||
|
||||
@@ -29,23 +29,23 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
|
||||
}
|
||||
Group group = null;
|
||||
File dir = null;
|
||||
boolean show_log;
|
||||
boolean from_directory_chooser;
|
||||
Vector<ProjectFile> project_files = new Vector<>();
|
||||
@Override
|
||||
protected boolean canStart(Object... args) throws Exception {
|
||||
if (args.length == 0) {
|
||||
show_log = true;
|
||||
from_directory_chooser = true;
|
||||
if (!Current.Check(Log, Current.Group))
|
||||
return false;
|
||||
dir = directoryChooser.ShowDialog();
|
||||
group = Current.getGroup();
|
||||
} else {
|
||||
show_log = false;
|
||||
from_directory_chooser = false;
|
||||
dir = (File) args[0];
|
||||
group = (Group) args[1];
|
||||
}
|
||||
if (dir == null) {
|
||||
if (show_log) Log.Writeln_("Папка не выбрана.");
|
||||
if (from_directory_chooser) Log.Writeln_("Папка не выбрана.");
|
||||
return false;
|
||||
}
|
||||
//---
|
||||
@@ -58,18 +58,20 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
|
||||
int other_project_files = 0;
|
||||
//---
|
||||
if (dir.getName().equalsIgnoreCase(Constants.data)) {
|
||||
if (show_log) Log.Writeln_("Папка " + Utils.Brackets(dir) + " является служебной папкой визуализатора.");
|
||||
if (from_directory_chooser)
|
||||
Log.Writeln_("Папка " + Utils.Brackets(dir) + " является служебной папкой визуализатора.");
|
||||
return false;
|
||||
}
|
||||
//--
|
||||
if (files == null) {
|
||||
if (show_log) Log.Writeln_("Не удалось получить список файлов для папки " + Utils.Brackets(dir) + ".");
|
||||
if (from_directory_chooser)
|
||||
Log.Writeln_("Не удалось получить список файлов для папки " + Utils.Brackets(dir) + ".");
|
||||
return false;
|
||||
}
|
||||
//--
|
||||
for (File file : files) {
|
||||
if (!Utils.validateProjectFile(file, Log)) {
|
||||
if (show_log)
|
||||
if (from_directory_chooser)
|
||||
Log.Writeln_("Имя файла " + Utils.Brackets(file.getName()) + " содержит запрещённые символы " + Constants.all_forbidden_characters_string + ", или кириллицу.");
|
||||
bad++;
|
||||
}
|
||||
@@ -97,19 +99,19 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
|
||||
}
|
||||
//--
|
||||
if (subdirs > 0) {
|
||||
if (show_log) Log.Writeln_("Папка " + Utils.Brackets(dir) + " содержит вложенные подпапки.");
|
||||
if (from_directory_chooser) Log.Writeln_("Папка " + Utils.Brackets(dir) + " содержит вложенные подпапки.");
|
||||
return false;
|
||||
}
|
||||
if (bad > 0) {
|
||||
return false;
|
||||
}
|
||||
if (fortran_programs == 0) {
|
||||
if (show_log)
|
||||
if (from_directory_chooser)
|
||||
Log.Writeln_("Папка не содержит ни одной программы на языке " + group.language.getDescription() + ".");
|
||||
return false;
|
||||
}
|
||||
if (other_project_files > 0) {
|
||||
if (show_log)
|
||||
if (from_directory_chooser)
|
||||
Log.Writeln_("Папка содержит файлы, не являющиеся программами на языке FORTRAN, или заголовочными.");
|
||||
return false;
|
||||
}
|
||||
@@ -137,18 +139,24 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
|
||||
//-- получить размерность консольным сапфором. папка уже отправлена и чистить ее не нужно!!
|
||||
ShowMessage2("Синтаксический анализ");
|
||||
if (Sapfor.parse(Current.getSapfor().getFile(), project.Home, Current.getSapfor().getConsoleFlags())
|
||||
|
||||
){
|
||||
) {
|
||||
ShowMessage2("Определение размерности");
|
||||
if (Sapfor.analysis(Current.getSapfor().getFile(),project.Home,
|
||||
if (Sapfor.analysis(Current.getSapfor().getFile(), project.Home,
|
||||
PassCode_2021.SPF_GetMaxMinBlockDistribution,
|
||||
Current.getSapfor().getConsoleFlags())){
|
||||
|
||||
|
||||
|
||||
} else Log.Writeln_("Не удалось определить размерность.проекта "+Utils.Brackets(dir.getName()));
|
||||
}else {
|
||||
Log.Writeln_("Не удалось выполнить синтаксический анализ проекта "+Utils.Brackets(dir.getName()));
|
||||
Current.getSapfor().getConsoleFlags())) {
|
||||
for (String line: Sapfor.outputLines){
|
||||
String prefix = "GET_MIN_MAX_BLOCK_DIST: ";
|
||||
if (line.startsWith(prefix)){
|
||||
String s = line.substring(prefix.length());
|
||||
System.out.println(Utils.Brackets(s));
|
||||
String[] data = s.split(" ");
|
||||
target.min_dim = Integer.parseInt(data[0]);
|
||||
target.max_dim = Integer.parseInt(data[1]);
|
||||
}
|
||||
}
|
||||
} else Log.Writeln_("Не удалось определить размерность.проекта " + Utils.Brackets(dir.getName()));
|
||||
} else {
|
||||
Log.Writeln_("Не удалось выполнить синтаксический анализ проекта " + Utils.Brackets(dir.getName()));
|
||||
}
|
||||
//todo получить значение из файла вывода анализа.
|
||||
}
|
||||
@@ -159,6 +167,7 @@ public class CreateTestFromFolder extends Pass_2021<Test> {
|
||||
@Override
|
||||
protected void performDone() throws Exception {
|
||||
super.performDone();
|
||||
if (from_directory_chooser)
|
||||
passes.get(PassCode_2021.PublishTest).Do(target);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user