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