Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
667cac62
Commit
667cac62
authored
Dec 10, 2025
by
Matthias Betz
Browse files
write GUI check config in settings
parent
cf338d5b
Pipeline
#12278
passed with stage
in 2 minutes and 14 seconds
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java
View file @
667cac62
...
...
@@ -133,7 +133,7 @@ public class CityDoctorValidation {
config
=
ValidationConfiguration
.
loadStandardValidationConfig
();
config
.
setUseStreaming
(
true
);
}
else
{
config
=
ValidationConfiguration
.
loadValidationConfig
(
validationConfigFile
.
getAbsolutePath
());
config
=
ValidationConfiguration
.
loadValidationConfig
File
(
validationConfigFile
.
getAbsolutePath
());
}
String
xmlOutputPath
=
null
;
if
(
xmlOutput
!=
null
)
{
...
...
@@ -234,7 +234,7 @@ public class CityDoctorValidation {
logger
.
error
(
Localization
.
getText
(
"CityDoctorValidation.notExactlyOneConfigFile"
));
System
.
exit
(
4
);
}
return
ValidationConfiguration
.
loadValidationConfig
(
configFiles
.
get
(
0
));
return
ValidationConfiguration
.
loadValidationConfig
File
(
configFiles
.
get
(
0
));
}
else
{
if
(
optional
)
{
logger
.
warn
(
Localization
.
getText
(
"CityDoctorValidation.loadingDefaultConfig"
));
...
...
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidationCLI.java
View file @
667cac62
...
...
@@ -47,7 +47,7 @@ public class CityDoctorValidationCLI implements Runnable {
if
(
config
==
null
){
valConfig
=
ValidationConfiguration
.
loadStandardValidationConfig
();
}
else
{
valConfig
=
ValidationConfiguration
.
loadValidationConfig
(
config
.
getAbsolutePath
());
valConfig
=
ValidationConfiguration
.
loadValidationConfig
File
(
config
.
getAbsolutePath
());
}
CityDoctorValidation
.
startValidationProcess
(
input
,
xmlReport
,
pdfReport
,
valConfig
,
output
);
}
catch
(
CityDoctorWriteException
|
CityGmlParseException
|
IOException
|
InvalidGmlFileException
e
)
{
...
...
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/ValidationConfiguration.java
View file @
667cac62
...
...
@@ -53,7 +53,6 @@ public class ValidationConfiguration implements Serializable {
private
static
final
long
serialVersionUID
=
-
8020055032177740646L
;
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
ValidationConfiguration
.
class
);
private
Map
<
String
,
String
>
globalParameters
=
new
HashMap
<>();
private
boolean
xmlValidation
=
false
;
private
boolean
useStreaming
=
false
;
...
...
@@ -62,9 +61,16 @@ public class ValidationConfiguration implements Serializable {
private
ParserConfiguration
parserConfig
;
public
static
ValidationConfiguration
loadValidationConfig
(
String
validationFile
)
throws
FileNotFoundException
{
public
static
ValidationConfiguration
loadValidationConfig
File
(
String
validationFile
)
throws
FileNotFoundException
{
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
)
{
Yaml
yaml
=
new
Yaml
(
new
Constructor
(
ValidationConfiguration
.
class
,
new
LoaderOptions
()));
...
...
@@ -91,20 +97,30 @@ public class ValidationConfiguration implements Serializable {
config
.
setSchematronFilePathInGlobalParameters
(
CHECK_FOR_SOLID_XML
);
return
config
;
}
private
ValidationConfiguration
()
{
}
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
();
options
.
setDefaultFlowStyle
(
DumperOptions
.
FlowStyle
.
BLOCK
);
options
.
setPrettyFlow
(
true
);
Representer
rep
=
new
ValidationConfigurationRepresenter
(
options
);
rep
.
addClassTag
(
ValidationConfiguration
.
class
,
Tag
.
MAP
);
Yaml
yaml
=
new
Yaml
(
rep
);
try
(
BufferedWriter
bw
=
new
BufferedWriter
(
new
FileWriter
(
f
)))
{
yaml
.
dump
(
this
,
bw
);
}
return
yaml
;
}
public
boolean
isXmlValidation
()
{
...
...
@@ -141,7 +157,7 @@ public class ValidationConfiguration implements Serializable {
public
Map
<
String
,
String
>
getGlobalParameters
()
{
return
globalParameters
;
}
public
void
setGlobalParameters
(
Map
<
String
,
String
>
globalParameters
)
{
this
.
globalParameters
=
globalParameters
;
}
...
...
@@ -174,8 +190,7 @@ public class ValidationConfiguration implements Serializable {
});
}
globalParameters
.
putIfAbsent
(
GlobalParameters
.
MIN_VERTEX_DISTANCE
,
MIN_VERTEX_DISTANCE_DEFAULT
);
globalParameters
.
putIfAbsent
(
GlobalParameters
.
NUMBER_OF_ROUNDING_PLACES
,
NUMBER_OF_ROUNDING_PLACES_DEFAULT
);
globalParameters
.
putIfAbsent
(
GlobalParameters
.
NUMBER_OF_ROUNDING_PLACES
,
NUMBER_OF_ROUNDING_PLACES_DEFAULT
);
}
public
int
getNumberOfRoundingPlaces
()
{
...
...
@@ -220,7 +235,7 @@ public class ValidationConfiguration implements Serializable {
public
void
setSchematronFilePathInGlobalParameters
(
String
string
)
{
globalParameters
.
put
(
GlobalParameters
.
SCHEMATRON_PATH
,
string
);
}
public
void
setRequirements
(
Map
<
String
,
RequirementConfiguration
>
requirements
)
{
this
.
requirements
=
requirements
;
}
...
...
CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/check/FilterTest.java
View file @
667cac62
...
...
@@ -39,7 +39,7 @@ public class FilterTest {
@Test
public
void
testFilterExclude
()
throws
CityGmlParseException
,
IOException
,
InvalidGmlFileException
{
ValidationConfiguration
config
=
ValidationConfiguration
.
loadValidationConfig
(
"src/test/resources/testConfigWithExclude.yml"
);
.
loadValidationConfig
File
(
"src/test/resources/testConfigWithExclude.yml"
);
CityDoctorModel
model
=
CityGmlParser
.
parseCityGmlFile
(
"src/test/resources/testarea.gml"
,
new
ParserConfiguration
(
8
,
false
));
Checker
c
=
new
Checker
(
config
,
model
);
...
...
@@ -59,7 +59,7 @@ public class FilterTest {
@Test
public
void
testFilterInclude
()
throws
CityGmlParseException
,
IOException
,
InvalidGmlFileException
{
ValidationConfiguration
config
=
ValidationConfiguration
.
loadValidationConfig
(
"src/test/resources/testConfigWithInclude.yml"
);
.
loadValidationConfig
File
(
"src/test/resources/testConfigWithInclude.yml"
);
CityDoctorModel
model
=
CityGmlParser
.
parseCityGmlFile
(
"src/test/resources/testarea.gml"
,
new
ParserConfiguration
(
8
,
false
));
Checker
c
=
new
Checker
(
config
,
model
);
...
...
CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/check/ValidationConfigurationTest.java
View file @
667cac62
...
...
@@ -37,7 +37,7 @@ public class ValidationConfigurationTest {
@Test
public
void
testLoadingConfig
()
throws
FileNotFoundException
{
String
file
=
"src/test/resources/testConfig.yml"
;
ValidationConfiguration
config
=
ValidationConfiguration
.
loadValidationConfig
(
file
);
ValidationConfiguration
config
=
ValidationConfiguration
.
loadValidationConfig
File
(
file
);
assertEquals
(
8
,
config
.
getNumberOfRoundingPlaces
());
assertTrue
(
config
.
getRequirements
().
containsKey
(
RequirementId
.
R_GE_R_TOO_FEW_POINTS
.
toString
()));
assertFalse
(
config
.
getRequirements
().
get
(
RequirementId
.
R_GE_P_NON_PLANAR
.
toString
()).
isEnabled
());
...
...
@@ -47,7 +47,7 @@ public class ValidationConfigurationTest {
@Test
public
void
testLoadingConfigWithFilter
()
throws
FileNotFoundException
{
String
file
=
"src/test/resources/testConfigWithFilter.yml"
;
ValidationConfiguration
config
=
ValidationConfiguration
.
loadValidationConfig
(
file
);
ValidationConfiguration
config
=
ValidationConfiguration
.
loadValidationConfig
File
(
file
);
assertEquals
(
8
,
config
.
getNumberOfRoundingPlaces
());
assertTrue
(
config
.
getRequirements
().
containsKey
(
RequirementId
.
R_GE_R_TOO_FEW_POINTS
.
toString
()));
assertFalse
(
config
.
getRequirements
().
get
(
RequirementId
.
R_GE_P_NON_PLANAR
.
toString
()).
isEnabled
());
...
...
@@ -76,7 +76,7 @@ public class ValidationConfigurationTest {
String
file
=
"src/test/resources/testConfigVulnerability.yml"
;
ValidationConfiguration
config
=
null
;
try
{
config
=
ValidationConfiguration
.
loadValidationConfig
(
file
);
config
=
ValidationConfiguration
.
loadValidationConfig
File
(
file
);
assertNotNull
(
config
);
fail
(
"Config with Vulnerability should not be successfully loaded"
);
}
catch
(
FileNotFoundException
e
){
...
...
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CheckDialog.java
View file @
667cac62
...
...
@@ -3,7 +3,6 @@ package de.hft.stuttgart.citydoctor2.gui;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.nio.file.Path
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
...
...
@@ -11,14 +10,6 @@ import java.util.List;
import
java.util.Map
;
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.Logger
;
...
...
@@ -32,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.Unit;
import
de.hft.stuttgart.citydoctor2.check.ValidationConfiguration
;
import
de.hft.stuttgart.citydoctor2.checks.Checks
;
import
de.hft.stuttgart.citydoctor2.gui.tree.TreeRequirement
;
import
de.hft.stuttgart.citydoctor2.parser.ProgressListener
;
import
de.hft.stuttgart.citydoctor2.utils.Localization
;
import
javafx.application.Platform
;
import
javafx.event.Event
;
...
...
@@ -39,6 +31,7 @@ import javafx.fxml.FXML;
import
javafx.fxml.FXMLLoader
;
import
javafx.scene.Scene
;
import
javafx.scene.control.Button
;
import
javafx.scene.control.CheckBox
;
import
javafx.scene.control.Label
;
import
javafx.scene.control.ProgressBar
;
import
javafx.scene.control.ScrollPane
;
...
...
@@ -256,6 +249,15 @@ public class CheckDialog {
});
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
)
{
...
...
@@ -319,7 +321,7 @@ public class CheckDialog {
if
(
f
!=
null
)
{
Settings
.
set
(
Settings
.
LAST_OPEN_FOLDER
,
f
.
getParent
());
try
{
ValidationConfiguration
config
=
ValidationConfiguration
.
loadValidationConfig
(
f
.
getAbsolutePath
());
ValidationConfiguration
config
=
ValidationConfiguration
.
loadValidationConfig
File
(
f
.
getAbsolutePath
());
applyConfig
(
config
);
}
catch
(
IOException
e
)
{
window
.
showExceptionDialog
(
e
);
...
...
@@ -440,9 +442,15 @@ public class CheckDialog {
private
void
setupCheckButton
()
{
checkBtn
.
setOnAction
(
ea
->
{
ValidationConfiguration
config
=
createConfig
();
checkBtn
.
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
);
Thread
t
=
new
Thread
(()
->
{
...
...
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Settings.java
View file @
667cac62
...
...
@@ -6,6 +6,7 @@ import java.io.File;
import
java.io.FileReader
;
import
java.io.FileWriter
;
import
java.io.IOException
;
import
java.nio.charset.StandardCharsets
;
import
java.util.Properties
;
import
org.apache.logging.log4j.LogManager
;
...
...
@@ -22,6 +23,7 @@ public class Settings {
public
static
final
String
FRAME_X
=
"frameX"
;
public
static
final
String
FRAME_Y
=
"frameY"
;
public
static
final
String
LANGUAGE
=
"language"
;
public
static
final
String
CONFIG
=
"config"
;
private
static
Properties
props
;
...
...
@@ -30,14 +32,14 @@ public class Settings {
File
propFile
=
new
File
(
"GUISettings.properties"
);
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
);
}
catch
(
IOException
e
)
{
logger
.
error
(
"Failed to load settings"
,
e
);
}
}
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"
);
}
catch
(
IOException
e
)
{
logger
.
error
(
"Failed to save settings"
,
e
);
...
...
CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java
View file @
667cac62
...
...
@@ -156,7 +156,7 @@ public class Healer {
if
(
configFile
==
null
)
{
config
=
ValidationConfiguration
.
loadStandardValidationConfig
();
}
else
{
config
=
ValidationConfiguration
.
loadValidationConfig
(
configFile
.
getAbsolutePath
());
config
=
ValidationConfiguration
.
loadValidationConfig
File
(
configFile
.
getAbsolutePath
());
}
CityDoctorModel
model
=
CityGmlParser
.
parseCityGmlFile
(
in
.
getAbsolutePath
(),
config
.
getParserConfiguration
());
Checker
c
=
new
Checker
(
config
,
model
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment