Commit 3610be70 authored by Matthias Betz's avatar Matthias Betz
Browse files

more translation

parent 2d43c43b
Pipeline #1077 passed with stage
in 2 minutes and 18 seconds
......@@ -21,7 +21,7 @@ package de.hft.stuttgart.citydoctor2.check;
import de.hft.stuttgart.citydoctor2.check.error.AllPolygonsWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
import de.hft.stuttgart.citydoctor2.check.error.DistanceError;
import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonDistancePlaneError;
import de.hft.stuttgart.citydoctor2.check.error.DuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.EdgeIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.HoleOutsideError;
......@@ -37,7 +37,7 @@ import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntError;
......@@ -96,9 +96,9 @@ public interface ErrorVisitor {
public void visit(NormalDeviationError err);
public void visit(DistanceError err);
public void visit(NonPlanarPolygonDistancePlaneError err);
public void visit(PolygonSelfIntError err);
public void visit(PolygonIntersectingRingsError err);
public void visit(SolidSelfIntError err);
......
......@@ -21,7 +21,7 @@ package de.hft.stuttgart.citydoctor2.check;
import de.hft.stuttgart.citydoctor2.check.error.AllPolygonsWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
import de.hft.stuttgart.citydoctor2.check.error.DistanceError;
import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonDistancePlaneError;
import de.hft.stuttgart.citydoctor2.check.error.DuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.EdgeIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.HoleOutsideError;
......@@ -37,7 +37,7 @@ import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntError;
......@@ -85,7 +85,7 @@ public interface HealingMethod {
return false;
}
default boolean visit(DistanceError err, ModificationListener l) {
default boolean visit(NonPlanarPolygonDistancePlaneError err, ModificationListener l) {
return false;
}
......@@ -125,7 +125,7 @@ public interface HealingMethod {
return false;
}
default boolean visit(PolygonSelfIntError err, ModificationListener l) {
default boolean visit(PolygonIntersectingRingsError err, ModificationListener l) {
return false;
}
......
......@@ -37,7 +37,7 @@ import de.hft.stuttgart.citydoctor2.utils.Localization;
* @author Matthias Betz
*
*/
public class DistanceError extends CheckError {
public class NonPlanarPolygonDistancePlaneError extends CheckError {
private static final long serialVersionUID = -3504364055236383519L;
......@@ -46,7 +46,7 @@ public class DistanceError extends CheckError {
private Vertex v;
private Plane plane;
public DistanceError(Polygon p, double distance, Vertex v, Plane plane) {
public NonPlanarPolygonDistancePlaneError(Polygon p, double distance, Vertex v, Plane plane) {
super(ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, ErrorType.ERROR, p);
this.p = p;
this.distance = distance;
......
......@@ -36,14 +36,14 @@ import de.hft.stuttgart.citydoctor2.utils.SerializablePair;
* @author Matthias Betz
*
*/
public class PolygonSelfIntError extends CheckError {
public class PolygonIntersectingRingsError extends CheckError {
private static final long serialVersionUID = -7043521697085991901L;
private Polygon p;
private SerializablePair<LinearRing, LinearRing> intersectingRings;
public PolygonSelfIntError(Polygon p, SerializablePair<LinearRing, LinearRing> intersectingRings) {
public PolygonIntersectingRingsError(Polygon p, SerializablePair<LinearRing, LinearRing> intersectingRings) {
super(ErrorId.GE_P_INTERSECTING_RINGS, ErrorType.ERROR, p);
this.p = p;
this.intersectingRings = intersectingRings;
......
......@@ -3,6 +3,7 @@ DistanceError.distanceFromPlane=distance from plane
AboutDialog.developedBy=Developed by
AboutDialog.contact=Contact
AboutDialog.title=CityDoctor 3 - About
AboutDialog.closeBtn=Close
CheckDialog.title=Check Configuration
CheckDialog.schematronFiles=Schematron Files
CheckDialog.schematronChooserTitle=Choose schematron file..
......@@ -53,5 +54,28 @@ MainWindow.showLabel=Show:
MainWindow.searchLabel=Search:
MainWindow.searchBtn=Search
MainWindow.clearBtn=Clear
MainWindow.errorsTab=Errors
MainWindow.polygonsTab=Polygons
MainWindow.edgesTab=Edges
MainWindow.verticesTab=Vertices
MainWindow.logTab=Log
MainWindow.globalErrorsTab=Global Errors
OpenFileDialog.fileLabel=File:
OpenFileDialog.selectBtn=Select
\ No newline at end of file
OpenFileDialog.selectBtn=Select
OpenFileDialog.loadBtn=Load
OpenFileDialog.settingsPane=Parser Preferences
OpenFileDialog.roundingPlacesLabel=NumberOfRoundingPlaces
OpenFileDialog.xmlValidationLabel=Use XML Validation
Checker.failXml=Failed to write XML Error Report.
Checker.failPdf=Failed to write PDF Report.
Checker.checksFinished=Finished executing checks
Checker.schematronValidation=Starting Schematron validation
Checker.finishedSchematron=Finished Schematron validation
Checker.failReports=Failed to write reports.
Checker.checkFeature=Checking feature: {}
Checker.executeCheck=Executing check: {}
ValidationConfiguration.reenable={} has been disabled but {} depends on it, reenabling
ValidationConfiguration.missingSchematron={} is not an existing file, disabling schematron check
CheckContainer.error=Unexpected exception while executing check: {}
Checks.missingCheck=Could not find check for id: {}
OpenFileDialog.cancelBtn=Cancel
\ No newline at end of file
DistanceError.distanceFromPlane=Abstand von der Ebene
AboutDialog.developedBy=Entwickelt von
AboutDialog.contact=Kontakt
AboutDialog.title=CityDoctor 3 - ber
CheckDialog.title=Prfungskonfiguration
AboutDialog.title=CityDoctor 3 - \u00DCber
AboutDialog.closeBtn=Schlie\u00DFen
CheckDialog.title=Pr\u00fcfungskonfiguration
CheckDialog.schematronFiles=Schematron Dateien
CheckDialog.schematronChooserTitle=Whle Schematron Datei..
CheckDialog.schematronChooserTitle=W\u00e4hle Schematron Datei..
CheckDialog.validationConfiguration=Validierungs Konfiguration
CheckDialog.startingChecks=Starte Prfung
CheckDialog.checksDone=Prfung abgeschlossen
CheckDialog.failedChecks=Konnte Prfungen nicht ausfhren
CheckDialog.startingChecks=Starte Pr\u00fcfung
CheckDialog.checksDone=Pr\u00fcfung abgeschlossen
CheckDialog.failedChecks=Konnte Pr\u00fcfungen nicht ausf\u00fchren
CheckDialog.schematronFileNotExisting=Schematron Datei existiert nicht, ignoriere
CheckDialog.checkEnabled=Aktiv
CheckDialog.parameterValue=Wert
CheckDialog.parameterUnit=Einheit
CityDoctorController.noDatamodel=Datenmodell ist null, keine Prfungen konnten ausgefhrt werden
CityDoctorController.noSourceFile=Quelldatei ist null, keine Prfungen konnten ausgefhrt werden
CityDoctorController.noDatamodel=Datenmodell ist null, keine Pr\u00fcfungen konnten ausgef\u00fchrt werden
CityDoctorController.noSourceFile=Quelldatei ist null, keine Pr\u00fcfungen konnten ausgef\u00fchrt werden
ExceptionDialog.stacktrace=Der Stacktrace des Fehlers war:
FilterPane.buildings=Gebude
FilterPane.bridges=Brcken
FilterPane.buildings=Geb\u00e4ude
FilterPane.bridges=Br\u00fccken
FilterPane.landUse=Landnutzung
FilterPane.transportation=Transport
FilterPane.vegetation=Vegetation
FilterPane.water=Wasser
MainToolBar.wireframe=Zeige/Verstecke Gitternetz
MainToolBar.culling=Aktiviere/Deaktiviere Entfernen der Rckseiten
MainToolBar.culling=Aktiviere/Deaktiviere Entfernen der R\u00fcckseiten
MainToolBar.writeReports=Schreibe Reports
MainToolBar.executeChecks=Fhre Prfungen aus
MainToolBar.executeChecks=F\u00fchre Pr\u00fcfungen aus
MainWindow.missingConfig=Konnte Konfigurationsdatei nicht finden.
MainWindow.loadGivenFile=Lade vorhandene Datei, bitte warten
MainWindow.finishedLoading=Fertig geladen
MainWindow.checking=Prfe, bitte warten
MainWindow.checking=Pr\u00fcfe, bitte warten
MainWindow.writeXml=Schreibe Xml Report
MainWindow.finishedXml=Xml Report abgeschlossen
MainWindow.writePdf=Schreibe Pdf Report
......@@ -38,18 +39,41 @@ MainWindow.loadFailed=Konnte GML-Datei nicht laden: {}
MainWindow.all=Alle
MainWindow.withErrors=Mit Fehlern
MainWindow.export=Exportieren
OpenFileDialog.select=Whle CityGML Datei aus
MainWindow.languageChange=Um die Spracheinstellung zu bernehmen muss CityDoctor2 neugestartet werden.
MainWindow.buildingsTab=Gebude
OpenFileDialog.select=W\u00e4hle CityGML Datei aus
MainWindow.languageChange=Um die Spracheinstellung zu \u00fcbernehmen muss CityDoctor2 neugestartet werden.
MainWindow.buildingsTab=Geb\u00e4ude
MainWindow.vegetationTab=Vegetation
MainWindow.transportationTab=Verkehrsobjekte
MainWindow.bridgeTab=Brcken
MainWindow.waterTab=Gewsser
MainWindow.terrainTab=Gelnde
MainWindow.bridgeTab=Br\u00fccken
MainWindow.waterTab=Gew\u00e4sser
MainWindow.terrainTab=Gel\u00e4nde
MainWindow.viewLabel=Ansicht
MainWindow.showLabel=Zeige:
MainWindow.searchLabel=Suche:
MainWindow.searchBtn=Suche
MainWindow.clearBtn=Leeren
MainWindow.errorsTab=Fehler
MainWindow.polygonsTab=Polygone
MainWindow.edgesTab=Kanten
MainWindow.verticesTab=Punkte
MainWindow.logTab=Log
MainWindow.globalErrorsTab=Globale Fehler
OpenFileDialog.fileLabel=Datei:
OpenFileDialog.selectBtn=Auswhlen
\ No newline at end of file
OpenFileDialog.selectBtn=Ausw\u00e4hlen
OpenFileDialog.loadBtn=Laden
OpenFileDialog.settingsPane=Parser Einstellungen
OpenFileDialog.roundingPlacesLabel=NumberOfRoundingPlaces
OpenFileDialog.xmlValidationLabel=F\u00fchre XML-Validierung aus
Checker.failXml=Konnte XML Fehlerbericht nicht schreiben.
Checker.failPdf=Konnte PDF Fehlerbericht nicht schreiben.
Checker.checksFinished=Pr\u00fcfungen beendet
Checker.schematronValidation=Starte Schematron Pr\u00fcfung
Checker.finishedSchematron=Schematron Pr\u00fcfung abgeschlossen
Checker.failReports=Konnte Pr\u00fcfberichte nicht schreiben.
Checker.checkFeature=Pr\u00fcfe Feature: {}
Checker.executeCheck=F\u00fchre Pr\u00fcfung aus: {}
ValidationConfiguration.reenable={} ist deaktiviert wird aber von {} ben\u00f6tigt, reaktiviere
ValidationConfiguration.missingSchematron={} existiert nicht, deaktiviere Schematron Pr\u00fcfung
CheckContainer.error=Unerwarteter Fehler bei der Ausf\u00fchrung von Pr\u00fcfung: {}
Checks.missingCheck=Konnte keine Pr\u00fcfung f\u00fcr id {} finden
OpenFileDialog.cancelBtn=Abbrechen
\ No newline at end of file
......@@ -27,9 +27,11 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Stream;
import javax.xml.XMLConstants;
......@@ -47,7 +49,7 @@ import org.w3c.dom.Document;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.checkresult.utility.CheckReportWriteException;
import de.hft.stuttgart.citydoctor2.checks.CheckContainer;
import de.hft.stuttgart.citydoctor2.checks.CheckPrototype;
import de.hft.stuttgart.citydoctor2.checks.Checks;
import de.hft.stuttgart.citydoctor2.checks.SvrlContentHandler;
import de.hft.stuttgart.citydoctor2.checks.util.FeatureCheckedListener;
......@@ -65,6 +67,7 @@ import de.hft.stuttgart.citydoctor2.reporting.XmlStreamReporter;
import de.hft.stuttgart.citydoctor2.reporting.XmlValidationReporter;
import de.hft.stuttgart.citydoctor2.reporting.pdf.PdfReporter;
import de.hft.stuttgart.citydoctor2.reporting.pdf.PdfStreamReporter;
import de.hft.stuttgart.citydoctor2.utils.Localization;
import net.sf.saxon.s9api.DOMDestination;
import net.sf.saxon.s9api.Destination;
import net.sf.saxon.s9api.Processor;
......@@ -133,7 +136,7 @@ public class Checker {
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(xmlFile.getAbsolutePath()))) {
reporter.writeReport(checkConfig, bos, model, config);
} catch (CheckReportWriteException | IOException e) {
logger.error("Failed to write XML Error Report.", e);
logger.error(Localization.getText("Checker.failXml"), e);
}
}
......@@ -149,7 +152,7 @@ public class Checker {
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(pdfFile.getAbsolutePath()))) {
reporter.writeReport(checkConfig, bos, model, config);
} catch (IOException | CheckReportWriteException e) {
logger.error("Failed to write PDF Report.", e);
logger.error(Localization.getText("Checker.failPdf"), e);
}
}
......@@ -179,7 +182,7 @@ public class Checker {
config = ValidationConfiguration.loadStandardValidationConfig();
}
checkCityModel(model, l);
logger.info("Finished executing checks");
logger.info(Localization.getText("Checker.checksFinished"));
SvrlContentHandler handler = executeSchematronValidationIfAvailable(config, model.getFile());
if (handler != null) {
model.addGlobalErrors(handler.getGeneralErrors());
......@@ -210,7 +213,7 @@ public class Checker {
private static SvrlContentHandler executeSchematronValidationIfAvailable(ValidationConfiguration config,
File file) {
if (config.getSchematronFilePath() != null && !config.getSchematronFilePath().isEmpty()) {
logger.info("Starting Schematron validation");
logger.info(Localization.getText("Checker.schematronValidation"));
Processor processor = new Processor(false);
XsltCompiler xsltCompiler = processor.newXsltCompiler();
xsltCompiler.setURIResolver(new URIResolver() {
......@@ -252,7 +255,7 @@ public class Checker {
Destination dest = new SAXDestination(handler);
schematronTransformer.setDestination(dest);
schematronTransformer.transform();
logger.info("Finished Schematron validation");
logger.info(Localization.getText("Checker.finishedSchematron"));
return handler;
} catch (SaxonApiException | ParserConfigurationException e) {
logger.catching(e);
......@@ -329,7 +332,6 @@ public class Checker {
ParserConfiguration parserConfig = config.getParserConfiguration();
List<Check> checks = collectEnabledChecksAndInit(parserConfig, config);
execLayers = buildExecutionLayers(checks);
// model has not been validated against the new configuration
}
private List<Check> collectEnabledChecksAndInit(ParserConfiguration parserConfig, ValidationConfiguration config) {
......@@ -409,46 +411,56 @@ public class Checker {
public void executeChecksForCheckable(Checkable co) {
// throw away old results
co.clearAllContainedCheckResults();
logger.debug("Checking feature: {}", co);
if (logger.isDebugEnabled()) {
logger.debug(Localization.getText("Checker.checkFeature"), co);
}
for (int i = 0; i < execLayers.size(); i++) {
for (Check check : execLayers.get(i)) {
logger.trace("Executing check: {}", check.getCheckId());
if (logger.isTraceEnabled()) {
logger.trace(Localization.getText("Checker.executeCheck"), check.getCheckId());
}
co.accept(check);
}
}
}
private List<List<Check>> buildExecutionLayers(List<Check> checks) {
public static List<List<Check>> buildExecutionLayers(List<Check> checks) {
List<List<Check>> result = new ArrayList<>();
for (Check c : checks) {
int layer = getLayerDepthForCheck(c);
while (layer >= result.size()) {
result.add(new ArrayList<Check>());
Set<Check> availableChecks = new HashSet<>(checks);
Set<CheckId> usedChecks = new HashSet<>();
while (!availableChecks.isEmpty()) {
List<Check> layer = new ArrayList<>();
Iterator<Check> iterator = availableChecks.iterator();
while (iterator.hasNext()) {
Check c = iterator.next();
boolean hasUnusedDependency = searchForUnusedDependency(usedChecks, c);
if (!hasUnusedDependency) {
iterator.remove();
layer.add(c);
}
}
if (layer.isEmpty()) {
throw new IllegalStateException("There are checks that have dependencies that are not executed or are unknown");
}
result.add(layer);
for (Check c : layer) {
usedChecks.add(c.getCheckId());
}
List<Check> checkLayer = result.get(layer);
checkLayer.add(new CheckContainer(c));
}
return result;
}
private int getLayerDepthForCheck(Check c) {
if (c.getDependencies().isEmpty()) {
return 0;
}
HashSet<CheckId> checkedChecks = new HashSet<>();
return getLayerDepthForCheck(c, checkedChecks);
}
private int getLayerDepthForCheck(Check c, HashSet<CheckId> checkedChecks) {
checkedChecks.add(c.getCheckId());
if (c.getDependencies().isEmpty()) {
return 0;
}
int maxDepth = 0;
for (CheckId dependency : c.getDependencies()) {
maxDepth = Math.max(maxDepth, getLayerDepthForCheck(checkConfig.getCheckForId(dependency), checkedChecks));
private static boolean searchForUnusedDependency(Set<CheckId> usedChecks, Check c) {
boolean hasUnusedDependency = false;
for (CheckId id : c.getDependencies()) {
if (!usedChecks.contains(id)) {
hasUnusedDependency = true;
break;
}
}
return maxDepth + 1;
return hasUnusedDependency;
}
public static void streamCheck(FeatureStream stream, String xmlOutput, String pdfOutput,
......@@ -481,7 +493,7 @@ public class Checker {
writeReport(xmlReporter, handler);
writeReport(pdfReporter, handler);
} catch (CheckReportWriteException e) {
logger.error("Failed to write reports.", e);
logger.error(Localization.getText("Checker.failReports"), e);
}
}
......@@ -509,7 +521,9 @@ public class Checker {
}
private void checkFeature(XmlStreamReporter xmlReporter, PdfStreamReporter pdfReporter, CityObject co) {
logger.debug("Checking feature: {}", co);
if (logger.isDebugEnabled()) {
logger.debug(Localization.getText("Checker.checkFeature"), co);
}
executeChecksForCityObject(co);
if (xmlReporter != null) {
xmlReporter.report(co);
......
......@@ -39,6 +39,7 @@ import org.yaml.snakeyaml.constructor.Constructor;
import de.hft.stuttgart.citydoctor2.checks.CheckPrototype;
import de.hft.stuttgart.citydoctor2.checks.Checks;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.Localization;
/**
* The validation configuration class represented in the yaml configuration
......@@ -52,7 +53,7 @@ public class ValidationConfiguration implements Serializable {
private static final long serialVersionUID = -8020055032177740646L;
private static Logger logger = LogManager.getLogger(ValidationConfiguration.class);
private static final Logger logger = LogManager.getLogger(ValidationConfiguration.class);
private int numberOfRoundingPlaces = 8;
private String schematronFilePath = null;
......@@ -163,7 +164,7 @@ public class ValidationConfiguration implements Serializable {
CheckConfiguration checkConfig = checks.get(dep);
if (!checkConfig.isEnabled()) {
checkConfig.setEnabled(true);
logger.warn("{} has been disabled but {} depends on it, reenabling", dep, c.getCheckId());
logger.warn(Localization.getText("ValidationConfiguration.reenable"), dep, c.getCheckId());
}
}
insertMissingParametersWithDefaultParameters(e, c);
......@@ -172,7 +173,7 @@ public class ValidationConfiguration implements Serializable {
File f = new File(schematronFilePath);
if (!f.exists() || !f.isFile()) {
schematronFilePath = null;
logger.warn("{} is not an existing file, disabling schematron check", f.getAbsolutePath());
logger.warn(Localization.getText("ValidationConfiguration.missingSchematron"), f.getAbsolutePath());
}
}
}
......
......@@ -49,6 +49,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.Localization;
/**
* A check according to the decorator pattern for handling unexpected exceptions
......@@ -60,7 +61,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
*/
public class CheckContainer extends Check {
private static Logger logger = LogManager.getLogger(CheckContainer.class);
private static final Logger logger = LogManager.getLogger(CheckContainer.class);
private final Check check;
......@@ -88,9 +89,9 @@ public class CheckContainer extends Check {
public boolean canExecute(Checkable c) {
return check.canExecute(c);
}
private void handleException(Exception e, Checkable c) {
logger.error("Unexpected exception while executing check: " + check.getCheckId(), e);
logger.error(Localization.getText("CheckContainer.error"), check.getCheckId(), e);
CheckError err = new UnknownCheckError(c, e, this);
CheckResult cr = new CheckResult(check.getCheckId(), ResultStatus.ERROR, err);
c.addCheckResult(cr);
......
......@@ -28,20 +28,20 @@ import org.apache.logging.log4j.Logger;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.checks.geometry.CloseCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.ConCompCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.RingNotClosedCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.MultipleConnectedComponentCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.DuplicatePointsCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.FaceOrientCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.PolygonWrongOrientationCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.FaceOutCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.HoleOutsideCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.InteriorDisconnectedCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.ManifoldVertexCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.NestedRingsCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.NumPointsCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.OverUsedEdgeCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.NonManifoldEdgeCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.PlanarCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.PolygonSameOrientationCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.PolygonSelfIntCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.PolygonIntersectingRingsCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.RingSelfIntCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.SolidNotClosedCheck;
import de.hft.stuttgart.citydoctor2.checks.geometry.SolidSelfIntCheck;
......@@ -51,6 +51,7 @@ import de.hft.stuttgart.citydoctor2.checks.semantics.IsFloorCheck;
import de.hft.stuttgart.citydoctor2.checks.semantics.IsGroundCheck;
import de.hft.stuttgart.citydoctor2.checks.semantics.IsWallCheck;
import de.hft.stuttgart.citydoctor2.checks.semantics.RoofSurfaceUnfragmentedCheck;
import de.hft.stuttgart.citydoctor2.utils.Localization;
/**
* Container class for all checks. If new checks are added, they need to be
......@@ -61,7 +62,7 @@ import de.hft.stuttgart.citydoctor2.checks.semantics.RoofSurfaceUnfragmentedChec
*/
public class Checks {
private static Logger logger = LogManager.getLogger(Checks.class);
private static final Logger logger = LogManager.getLogger(Checks.class);
private static List<CheckPrototype> checkPrototypes;
private static Map<CheckId, CheckPrototype> prototypeMap;
......@@ -74,19 +75,19 @@ public class Checks {
// add new checks here
publish(new NumPointsCheck());
publish(new CloseCheck());
publish(new RingNotClosedCheck());
publish(new DuplicatePointsCheck());
publish(new RingSelfIntCheck());
publish(new PlanarCheck());
publish(new PolygonSameOrientationCheck());
publish(new HoleOutsideCheck());
publish(new NestedRingsCheck());
publish(new PolygonSelfIntCheck());
publish(new PolygonIntersectingRingsCheck());
publish(new InteriorDisconnectedCheck());
publish(new ConCompCheck());
publish(new MultipleConnectedComponentCheck());
publish(new SolidNotClosedCheck());
publish(new OverUsedEdgeCheck());
publish(new FaceOrientCheck());
publish(new NonManifoldEdgeCheck());
publish(new PolygonWrongOrientationCheck());
publish(new FaceOutCheck());
publish(new TooFewPolygonsCheck());
publish(new ManifoldVertexCheck());
......@@ -144,7 +145,7 @@ public class Checks {
public Check getCheckForId(CheckId id) {
Check c = checkMap.get(id);
if (c == null) {
logger.warn("Could not find check for id: {}", id);
logger.warn(Localization.getText("Checks.missingCheck"), id);
}
return c;
}
......
......@@ -42,7 +42,7 @@ import de.hft.stuttgart.citydoctor2.math.graph.PolygonGraph;
* @author Matthias Betz - 12bema1bif@hft-stuttgart.de
*
*/
public class ConCompCheck extends Check {
public class MultipleConnectedComponentCheck extends Check {
private static final List<CheckId> dependencies;
private static final List<Class<? extends Checkable>> applicableToClasses;
......@@ -65,7 +65,7 @@ public class ConCompCheck extends Check {
applicableToClasses = Collections.unmodifiableList(classes);
}
public ConCompCheck() {
public MultipleConnectedComponentCheck() {
super(CheckId.C_GE_S_MULTIPLE_CONNECTED_COMPONENTS);
}
......@@ -109,6 +109,6 @@ public class ConCompCheck extends Check {
@Override
public Check createNewInstance() {
return new ConCompCheck();
return new MultipleConnectedComponentCheck();
}
}
......@@ -41,7 +41,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
* @author dwagner, alam
*/
public class OverUsedEdgeCheck extends Check {
public class NonManifoldEdgeCheck extends Check {
private static final List<CheckId> dependencies;
private static final List<Class<? extends Checkable>> applicableToClasses;
......@@ -63,7 +63,7 @@ public class OverUsedEdgeCheck extends Check {
applicableToClasses = Collections.unmodifiableList(classes);
}
public OverUsedEdgeCheck() {
public NonManifoldEdgeCheck() {
super(CheckId.C_GE_S_NON_MANIFOLD_EDGE);
}
......@@ -108,6 +108,6 @@ public class OverUsedEdgeCheck extends Check {
@Override
public Check createNewInstance() {
return new OverUsedEdgeCheck();
return new NonManifoldEdgeCheck();
}
}
......@@ -33,7 +33,7 @@ import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.check.DefaultParameter;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.Unit;
import de.hft.stuttgart.citydoctor2.check.error.DistanceError;
import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonDistancePlaneError;
import de.hft.stuttgart.citydoctor2.check.error.NormalDeviationError;
import de.hft.stuttgart.citydoctor2.check.error.TinyEdgeError;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
......@@ -210,7 +210,7 @@ public class PlanarCheck extends Check {
for (Vertex v : vertices) {
double distance = plane.getDistance(v);
if (distance > delta) {
CheckError err = new DistanceError(p, distance, v, plane);
CheckError err = new NonPlanarPolygonDistancePlaneError(p, distance, v, plane);
p.addCheckResult(new CheckResult(this, ResultStatus.ERROR, err));
return;
}
......
......@@ -29,7 +29,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.PolygonSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.math.Polygon2d;
......@@ -39,7 +39,7 @@ import de.hft.stuttgart.citydoctor2.math.Vector2d;
import de.hft.stuttgart.citydoctor2.utils.Pair;
import de.hft.stuttgart.citydoctor2.utils.SerializablePair;
public class PolygonSelfIntCheck extends Check {
public class PolygonIntersectingRingsCheck extends Check {
private static final List<CheckId> dependencies;
......@@ -61,7 +61,7 @@ public class PolygonSelfIntCheck extends Check {
applicableToClasses = Collections.unmodifiableList(classes);
}
public PolygonSelfIntCheck() {
public PolygonIntersectingRingsCheck() {
super(CheckId.C_GE_P_INTERSECTING_RINGS);
}
......@@ -76,7 +76,7 @@ public class PolygonSelfIntCheck extends Check {
CheckResult cr;
SerializablePair<LinearRing, LinearRing> intersectingRings = interiorRingsIntersectWithExterior(p);
if (intersectingRings != null) {
CheckError err = new PolygonSelfIntError(p, intersectingRings);
CheckError err = new PolygonIntersectingRingsError(p, intersectingRings);
cr = new CheckResult(this, ResultStatus.ERROR, err);
} else {
cr = new CheckResult(this, ResultStatus.OK, null);
......@@ -145,6 +145,6 @@ public class PolygonSelfIntCheck extends Check {
@Override
public Check createNewInstance() {
return new PolygonSelfIntCheck();
return new PolygonIntersectingRingsCheck();
}
}
......@@ -39,7 +39,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
* @author Matthias Betz - 12bema1bif@hft-stuttgart.de
*
*/
public class FaceOrientCheck extends Check {
public class PolygonWrongOrientationCheck extends Check {
private static final List<CheckId> dependencies;
......@@ -64,7 +64,7 @@ public class FaceOrientCheck extends Check {
applicableToClasses = Collections.unmodifiableList(classes);
}
public FaceOrientCheck() {
public PolygonWrongOrientationCheck() {
super(CheckId.C_GE_S_POLYGON_WRONG_ORIENTATION);
}
......@@ -108,6 +108,6 @@ public class FaceOrientCheck extends Check {
@Override
public Check createNewInstance() {
return new FaceOrientCheck();
return new PolygonWrongOrientationCheck();
}
}
\ No newline at end of file
......@@ -40,7 +40,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
* @author Matthias Betz - 12bema1bif@hft-stuttgart.de
*
*/
public class CloseCheck extends Check {
public class RingNotClosedCheck extends Check {
private static final List<CheckId> dependencies;
private static final List<Class<? extends Checkable>> applicableToClasses;
......@@ -54,7 +54,7 @@ public class CloseCheck extends Check {
applicableToClasses = Collections.unmodifiableList(classes);
}
public CloseCheck() {
public RingNotClosedCheck() {
super(CheckId.C_GE_R_NOT_CLOSED);
}
......@@ -90,6 +90,6 @@ public class CloseCheck extends Check {
@Override
public Check createNewInstance() {
return new CloseCheck();
return new RingNotClosedCheck();
}
}
......@@ -33,21 +33,6 @@ public final class RingOrientationUtil {
}
/**
* Calculates whether a point is left, right or on the line
*
* @param v1 first point of the line
* @param v2 second point of the line
* @param v3 checking point
* @return > 0: left of the line<br>
* = 0: on the line<br>
* < 0: right of the line
*/
@SuppressWarnings("unused")
private static double calcPointLineOrientation(Vector2d v1, Vector2d v2, Vector2d v3) {
return ((v2.getX() - v1.getX()) * (v3.getY() - v1.getY()) - (v3.getX() - v1.getX()) * (v2.getY() - v1.getY()));
}
public static Orientation calculateOrientation(Ring2d ring) {
double sum = 0;
for (int i = 0; i < ring.getVertices().size() - 1; i++) {
......
......@@ -84,7 +84,7 @@ public class PolygonSelfIntCheckTest {
interior.addVertex(v7);
interior.addVertex(v4);
PolygonSelfIntCheck c = new PolygonSelfIntCheck();
PolygonIntersectingRingsCheck c = new PolygonIntersectingRingsCheck();
c.check(poly);
......@@ -134,7 +134,7 @@ public class PolygonSelfIntCheckTest {
interior.addVertex(v7);
interior.addVertex(v4);
PolygonSelfIntCheck c = new PolygonSelfIntCheck();
PolygonIntersectingRingsCheck c = new PolygonIntersectingRingsCheck();
c.check(poly);
......@@ -200,7 +200,7 @@ public class PolygonSelfIntCheckTest {
interior2.addVertex(v11);
interior2.addVertex(v8);
PolygonSelfIntCheck c = new PolygonSelfIntCheck();
PolygonIntersectingRingsCheck c = new PolygonIntersectingRingsCheck();
c.check(poly);
......@@ -265,7 +265,7 @@ public class PolygonSelfIntCheckTest {
interior2.addVertex(v11);
interior2.addVertex(v8);
PolygonSelfIntCheck c = new PolygonSelfIntCheck();
PolygonIntersectingRingsCheck c = new PolygonIntersectingRingsCheck();
c.check(poly);
......
Markdown is supported
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