diff --git a/src/Repository/Component/Sapfor/Sapfor.java b/src/Repository/Component/Sapfor/Sapfor.java index 80c76dee..43675701 100644 --- a/src/Repository/Component/Sapfor/Sapfor.java +++ b/src/Repository/Component/Sapfor/Sapfor.java @@ -520,6 +520,10 @@ public abstract class Sapfor extends OSDComponent { } return true; } + //--- + public static Vector outputLines = null; + public static Vector 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 outputLines = new Vector<>(FileUtils.readLines(outputFile)); - Vector 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); diff --git a/src/Visual_DVM_2021/Passes/All/CreateTestFromFolder.java b/src/Visual_DVM_2021/Passes/All/CreateTestFromFolder.java index 0bab9f34..432a5678 100644 --- a/src/Visual_DVM_2021/Passes/All/CreateTestFromFolder.java +++ b/src/Visual_DVM_2021/Passes/All/CreateTestFromFolder.java @@ -29,23 +29,23 @@ public class CreateTestFromFolder extends Pass_2021 { } Group group = null; File dir = null; - boolean show_log; + boolean from_directory_chooser; Vector 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 { 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 { } //-- 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 { //-- получить размерность консольным сапфором. папка уже отправлена и чистить ее не нужно!! 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 { @Override protected void performDone() throws Exception { super.performDone(); - passes.get(PassCode_2021.PublishTest).Do(target); + if (from_directory_chooser) + passes.get(PassCode_2021.PublishTest).Do(target); } }