Commit 667cac62 authored by Matthias Betz's avatar Matthias Betz
Browse files

write GUI check config in settings

parent cf338d5b
Pipeline #12278 passed with stage
in 2 minutes and 14 seconds
...@@ -133,7 +133,7 @@ public class CityDoctorValidation { ...@@ -133,7 +133,7 @@ public class CityDoctorValidation {
config = ValidationConfiguration.loadStandardValidationConfig(); config = ValidationConfiguration.loadStandardValidationConfig();
config.setUseStreaming(true); config.setUseStreaming(true);
} else { } else {
config = ValidationConfiguration.loadValidationConfig(validationConfigFile.getAbsolutePath()); config = ValidationConfiguration.loadValidationConfigFile(validationConfigFile.getAbsolutePath());
} }
String xmlOutputPath = null; String xmlOutputPath = null;
if (xmlOutput != null) { if (xmlOutput != null) {
...@@ -234,7 +234,7 @@ public class CityDoctorValidation { ...@@ -234,7 +234,7 @@ public class CityDoctorValidation {
logger.error(Localization.getText("CityDoctorValidation.notExactlyOneConfigFile")); logger.error(Localization.getText("CityDoctorValidation.notExactlyOneConfigFile"));
System.exit(4); System.exit(4);
} }
return ValidationConfiguration.loadValidationConfig(configFiles.get(0)); return ValidationConfiguration.loadValidationConfigFile(configFiles.get(0));
} else { } else {
if (optional) { if (optional) {
logger.warn(Localization.getText("CityDoctorValidation.loadingDefaultConfig")); logger.warn(Localization.getText("CityDoctorValidation.loadingDefaultConfig"));
......
...@@ -47,7 +47,7 @@ public class CityDoctorValidationCLI implements Runnable { ...@@ -47,7 +47,7 @@ public class CityDoctorValidationCLI implements Runnable {
if(config == null){ if(config == null){
valConfig=ValidationConfiguration.loadStandardValidationConfig(); valConfig=ValidationConfiguration.loadStandardValidationConfig();
} else{ } else{
valConfig=ValidationConfiguration.loadValidationConfig(config.getAbsolutePath()); valConfig=ValidationConfiguration.loadValidationConfigFile(config.getAbsolutePath());
} }
CityDoctorValidation.startValidationProcess(input, xmlReport, pdfReport, valConfig,output); CityDoctorValidation.startValidationProcess(input, xmlReport, pdfReport, valConfig,output);
} catch (CityDoctorWriteException | CityGmlParseException | IOException | InvalidGmlFileException e) { } catch (CityDoctorWriteException | CityGmlParseException | IOException | InvalidGmlFileException e) {
......
...@@ -53,7 +53,6 @@ public class ValidationConfiguration implements Serializable { ...@@ -53,7 +53,6 @@ public class ValidationConfiguration implements Serializable {
private static final long serialVersionUID = -8020055032177740646L; private static final long serialVersionUID = -8020055032177740646L;
private static final Logger logger = LogManager.getLogger(ValidationConfiguration.class); private static final Logger logger = LogManager.getLogger(ValidationConfiguration.class);
private Map<String, String> globalParameters = new HashMap<>(); private Map<String, String> globalParameters = new HashMap<>();
private boolean xmlValidation = false; private boolean xmlValidation = false;
private boolean useStreaming = false; private boolean useStreaming = false;
...@@ -62,10 +61,17 @@ public class ValidationConfiguration implements Serializable { ...@@ -62,10 +61,17 @@ public class ValidationConfiguration implements Serializable {
private ParserConfiguration parserConfig; private ParserConfiguration parserConfig;
public static ValidationConfiguration loadValidationConfig(String validationFile) throws FileNotFoundException { public static ValidationConfiguration loadValidationConfigFile(String validationFile) throws FileNotFoundException {
return loadValidationConfig(new FileInputStream(validationFile)); return loadValidationConfig(new FileInputStream(validationFile));
} }
public static ValidationConfiguration loadValidationConfigFromString(String validationString) throws FileNotFoundException {
Yaml yaml = new Yaml(new Constructor(ValidationConfiguration.class, new LoaderOptions()));
ValidationConfiguration config = yaml.load(validationString);
config.validateConfiguration();
return config;
}
public static ValidationConfiguration loadValidationConfig(InputStream stream) { public static ValidationConfiguration loadValidationConfig(InputStream stream) {
Yaml yaml = new Yaml(new Constructor(ValidationConfiguration.class, new LoaderOptions())); Yaml yaml = new Yaml(new Constructor(ValidationConfiguration.class, new LoaderOptions()));
ValidationConfiguration config = yaml.load(stream); ValidationConfiguration config = yaml.load(stream);
...@@ -96,15 +102,25 @@ public class ValidationConfiguration implements Serializable { ...@@ -96,15 +102,25 @@ public class ValidationConfiguration implements Serializable {
} }
public void saveAs(File f) throws IOException { public void saveAs(File f) throws IOException {
Yaml yaml = prepareDumpingOfConfig();
try (BufferedWriter bw = new BufferedWriter(new FileWriter(f))) {
yaml.dump(this, bw);
}
}
public String saveAsString() throws IOException {
Yaml yaml = prepareDumpingOfConfig();
return yaml.dump(this);
}
private Yaml prepareDumpingOfConfig() {
DumperOptions options = new DumperOptions(); DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
options.setPrettyFlow(true); options.setPrettyFlow(true);
Representer rep = new ValidationConfigurationRepresenter(options); Representer rep = new ValidationConfigurationRepresenter(options);
rep.addClassTag(ValidationConfiguration.class, Tag.MAP); rep.addClassTag(ValidationConfiguration.class, Tag.MAP);
Yaml yaml = new Yaml(rep); Yaml yaml = new Yaml(rep);
try (BufferedWriter bw = new BufferedWriter(new FileWriter(f))) { return yaml;
yaml.dump(this, bw);
}
} }
public boolean isXmlValidation() { public boolean isXmlValidation() {
...@@ -174,8 +190,7 @@ public class ValidationConfiguration implements Serializable { ...@@ -174,8 +190,7 @@ public class ValidationConfiguration implements Serializable {
}); });
} }
globalParameters.putIfAbsent(GlobalParameters.MIN_VERTEX_DISTANCE, MIN_VERTEX_DISTANCE_DEFAULT); globalParameters.putIfAbsent(GlobalParameters.MIN_VERTEX_DISTANCE, MIN_VERTEX_DISTANCE_DEFAULT);
globalParameters.putIfAbsent(GlobalParameters.NUMBER_OF_ROUNDING_PLACES, globalParameters.putIfAbsent(GlobalParameters.NUMBER_OF_ROUNDING_PLACES, NUMBER_OF_ROUNDING_PLACES_DEFAULT);
NUMBER_OF_ROUNDING_PLACES_DEFAULT);
} }
public int getNumberOfRoundingPlaces() { public int getNumberOfRoundingPlaces() {
......
...@@ -39,7 +39,7 @@ public class FilterTest { ...@@ -39,7 +39,7 @@ public class FilterTest {
@Test @Test
public void testFilterExclude() throws CityGmlParseException, IOException, InvalidGmlFileException { public void testFilterExclude() throws CityGmlParseException, IOException, InvalidGmlFileException {
ValidationConfiguration config = ValidationConfiguration ValidationConfiguration config = ValidationConfiguration
.loadValidationConfig("src/test/resources/testConfigWithExclude.yml"); .loadValidationConfigFile("src/test/resources/testConfigWithExclude.yml");
CityDoctorModel model = CityGmlParser.parseCityGmlFile("src/test/resources/testarea.gml", CityDoctorModel model = CityGmlParser.parseCityGmlFile("src/test/resources/testarea.gml",
new ParserConfiguration(8, false)); new ParserConfiguration(8, false));
Checker c = new Checker(config, model); Checker c = new Checker(config, model);
...@@ -59,7 +59,7 @@ public class FilterTest { ...@@ -59,7 +59,7 @@ public class FilterTest {
@Test @Test
public void testFilterInclude() throws CityGmlParseException, IOException, InvalidGmlFileException { public void testFilterInclude() throws CityGmlParseException, IOException, InvalidGmlFileException {
ValidationConfiguration config = ValidationConfiguration ValidationConfiguration config = ValidationConfiguration
.loadValidationConfig("src/test/resources/testConfigWithInclude.yml"); .loadValidationConfigFile("src/test/resources/testConfigWithInclude.yml");
CityDoctorModel model = CityGmlParser.parseCityGmlFile("src/test/resources/testarea.gml", CityDoctorModel model = CityGmlParser.parseCityGmlFile("src/test/resources/testarea.gml",
new ParserConfiguration(8, false)); new ParserConfiguration(8, false));
Checker c = new Checker(config, model); Checker c = new Checker(config, model);
......
...@@ -37,7 +37,7 @@ public class ValidationConfigurationTest { ...@@ -37,7 +37,7 @@ public class ValidationConfigurationTest {
@Test @Test
public void testLoadingConfig() throws FileNotFoundException { public void testLoadingConfig() throws FileNotFoundException {
String file = "src/test/resources/testConfig.yml"; String file = "src/test/resources/testConfig.yml";
ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(file); ValidationConfiguration config = ValidationConfiguration.loadValidationConfigFile(file);
assertEquals(8, config.getNumberOfRoundingPlaces()); assertEquals(8, config.getNumberOfRoundingPlaces());
assertTrue(config.getRequirements().containsKey(RequirementId.R_GE_R_TOO_FEW_POINTS.toString())); assertTrue(config.getRequirements().containsKey(RequirementId.R_GE_R_TOO_FEW_POINTS.toString()));
assertFalse(config.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).isEnabled()); assertFalse(config.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).isEnabled());
...@@ -47,7 +47,7 @@ public class ValidationConfigurationTest { ...@@ -47,7 +47,7 @@ public class ValidationConfigurationTest {
@Test @Test
public void testLoadingConfigWithFilter() throws FileNotFoundException { public void testLoadingConfigWithFilter() throws FileNotFoundException {
String file = "src/test/resources/testConfigWithFilter.yml"; String file = "src/test/resources/testConfigWithFilter.yml";
ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(file); ValidationConfiguration config = ValidationConfiguration.loadValidationConfigFile(file);
assertEquals(8, config.getNumberOfRoundingPlaces()); assertEquals(8, config.getNumberOfRoundingPlaces());
assertTrue(config.getRequirements().containsKey(RequirementId.R_GE_R_TOO_FEW_POINTS.toString())); assertTrue(config.getRequirements().containsKey(RequirementId.R_GE_R_TOO_FEW_POINTS.toString()));
assertFalse(config.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).isEnabled()); assertFalse(config.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).isEnabled());
...@@ -76,7 +76,7 @@ public class ValidationConfigurationTest { ...@@ -76,7 +76,7 @@ public class ValidationConfigurationTest {
String file = "src/test/resources/testConfigVulnerability.yml"; String file = "src/test/resources/testConfigVulnerability.yml";
ValidationConfiguration config = null; ValidationConfiguration config = null;
try { try {
config = ValidationConfiguration.loadValidationConfig(file); config = ValidationConfiguration.loadValidationConfigFile(file);
assertNotNull(config); assertNotNull(config);
fail("Config with Vulnerability should not be successfully loaded"); fail("Config with Vulnerability should not be successfully loaded");
} catch (FileNotFoundException e){ } catch (FileNotFoundException e){
......
...@@ -3,7 +3,6 @@ package de.hft.stuttgart.citydoctor2.gui; ...@@ -3,7 +3,6 @@ package de.hft.stuttgart.citydoctor2.gui;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
...@@ -11,14 +10,6 @@ import java.util.List; ...@@ -11,14 +10,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import de.hft.stuttgart.citydoctor2.parser.ProgressListener;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.Alert;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.Tooltip;
import javafx.stage.DirectoryChooser;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
...@@ -32,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.Unit; ...@@ -32,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.Unit;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration; import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.checks.Checks; import de.hft.stuttgart.citydoctor2.checks.Checks;
import de.hft.stuttgart.citydoctor2.gui.tree.TreeRequirement; import de.hft.stuttgart.citydoctor2.gui.tree.TreeRequirement;
import de.hft.stuttgart.citydoctor2.parser.ProgressListener;
import de.hft.stuttgart.citydoctor2.utils.Localization; import de.hft.stuttgart.citydoctor2.utils.Localization;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.Event; import javafx.event.Event;
...@@ -39,6 +31,7 @@ import javafx.fxml.FXML; ...@@ -39,6 +31,7 @@ import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar; import javafx.scene.control.ProgressBar;
import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane;
...@@ -256,6 +249,15 @@ public class CheckDialog { ...@@ -256,6 +249,15 @@ public class CheckDialog {
}); });
schematronField.setText(ValidationConfiguration.CHECK_FOR_SOLID_XML); schematronField.setText(ValidationConfiguration.CHECK_FOR_SOLID_XML);
String configString = Settings.get(Settings.CONFIG);
if (configString != null) {
try {
applyConfig(ValidationConfiguration.loadValidationConfigFromString(configString));
} catch (IOException e) {
// failed to read config, ignore as default values are still available
}
}
} }
private void setupValueColumns(List<TableColumn<GlobalParameter, ?>> columns) { private void setupValueColumns(List<TableColumn<GlobalParameter, ?>> columns) {
...@@ -319,7 +321,7 @@ public class CheckDialog { ...@@ -319,7 +321,7 @@ public class CheckDialog {
if (f != null) { if (f != null) {
Settings.set(Settings.LAST_OPEN_FOLDER, f.getParent()); Settings.set(Settings.LAST_OPEN_FOLDER, f.getParent());
try { try {
ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(f.getAbsolutePath()); ValidationConfiguration config = ValidationConfiguration.loadValidationConfigFile(f.getAbsolutePath());
applyConfig(config); applyConfig(config);
} catch (IOException e) { } catch (IOException e) {
window.showExceptionDialog(e); window.showExceptionDialog(e);
...@@ -440,9 +442,15 @@ public class CheckDialog { ...@@ -440,9 +442,15 @@ public class CheckDialog {
private void setupCheckButton() { private void setupCheckButton() {
checkBtn.setOnAction(ea -> { checkBtn.setOnAction(ea -> {
ValidationConfiguration config = createConfig();
checkBtn.setDisable(true); checkBtn.setDisable(true);
cancelBtn.setDisable(true); cancelBtn.setDisable(true);
ValidationConfiguration config = createConfig();
try {
String configString = config.saveAsString();
Settings.set(Settings.CONFIG, configString);
} catch (IOException e) {
// failed to save config, ignore
}
stage.setOnCloseRequest(Event::consume); stage.setOnCloseRequest(Event::consume);
Thread t = new Thread(() -> { Thread t = new Thread(() -> {
......
...@@ -6,6 +6,7 @@ import java.io.File; ...@@ -6,6 +6,7 @@ import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Properties; import java.util.Properties;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
...@@ -22,6 +23,7 @@ public class Settings { ...@@ -22,6 +23,7 @@ public class Settings {
public static final String FRAME_X = "frameX"; public static final String FRAME_X = "frameX";
public static final String FRAME_Y = "frameY"; public static final String FRAME_Y = "frameY";
public static final String LANGUAGE = "language"; public static final String LANGUAGE = "language";
public static final String CONFIG = "config";
private static Properties props; private static Properties props;
...@@ -30,14 +32,14 @@ public class Settings { ...@@ -30,14 +32,14 @@ public class Settings {
File propFile = new File("GUISettings.properties"); File propFile = new File("GUISettings.properties");
if (propFile.exists()) { if (propFile.exists()) {
try (BufferedReader bis = new BufferedReader(new FileReader(propFile))) { try (BufferedReader bis = new BufferedReader(new FileReader(propFile, StandardCharsets.UTF_8))) {
props.load(bis); props.load(bis);
} catch (IOException e) { } catch (IOException e) {
logger.error("Failed to load settings", e); logger.error("Failed to load settings", e);
} }
} }
Runtime.getRuntime().addShutdownHook(new Thread(() -> { Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(propFile))) { try (BufferedWriter bw = new BufferedWriter(new FileWriter(propFile, StandardCharsets.UTF_8))) {
props.store(bw, "GUI configuration"); props.store(bw, "GUI configuration");
} catch (IOException e) { } catch (IOException e) {
logger.error("Failed to save settings", e); logger.error("Failed to save settings", e);
......
...@@ -156,7 +156,7 @@ public class Healer { ...@@ -156,7 +156,7 @@ public class Healer {
if (configFile == null) { if (configFile == null) {
config = ValidationConfiguration.loadStandardValidationConfig(); config = ValidationConfiguration.loadStandardValidationConfig();
} else { } else {
config = ValidationConfiguration.loadValidationConfig(configFile.getAbsolutePath()); config = ValidationConfiguration.loadValidationConfigFile(configFile.getAbsolutePath());
} }
CityDoctorModel model = CityGmlParser.parseCityGmlFile(in.getAbsolutePath(), config.getParserConfiguration()); CityDoctorModel model = CityGmlParser.parseCityGmlFile(in.getAbsolutePath(), config.getParserConfiguration());
Checker c = new Checker(config, model); Checker c = new Checker(config, model);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment