Commit 81be0b1d authored by Riegel's avatar Riegel
Browse files

Merge branch 'dev_GUI' into 'dev'

Open source release of CityDoctorGUI and other extensions.

See merge request !6
parents 12d96d95 5a4d0a74
Pipeline #10056 passed with stage
in 1 minute and 6 seconds
......@@ -85,54 +85,39 @@ public class QualityADEUtils {
}
public static de.hft.stuttgart.quality.model.enums.ErrorId mapErrorIdToAdeId(ErrorId key) {
switch (key.getIdString()) {
case "GE_R_NOT_CLOSED":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_R_NOT_CLOSED;
case "GE_R_TOO_FEW_POINTS":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_R_TOO_FEW_POINTS;
case "GE_R_CONSECUTIVE_POINTS_SAME":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_R_CONSECUTIVE_POINTS_SAME;
case "GE_R_SELF_INTERSECTION":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_R_SELF_INTERSECTION;
case "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION;
case "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE;
case "GE_P_INTERIOR_DISCONNECTED":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_INTERIOR_DISCONNECTED;
case "GE_P_INTERSECTING_RINGS":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_INTERSECTING_RINGS;
case "GE_P_HOLE_OUTSIDE":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_HOLE_OUTSIDE;
case "GE_P_ORIENTATION_RINGS_SAME":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_ORIENTATION_RINGS_SAME;
case "GE_P_INNER_RINGS_NESTED":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_INNER_RINGS_NESTED;
case "GE_S_TOO_FEW_POLYGONS":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_TOO_FEW_POLYGONS;
case "GE_S_NOT_CLOSED":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_NOT_CLOSED;
case "GE_S_NON_MANIFOLD_EDGE":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_NON_MANIFOLD_EDGE;
case "GE_S_POLYGON_WRONG_ORIENTATION":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_POLYGON_WRONG_ORIENTATION;
case "GE_S_ALL_POLYGONS_WRONG_ORIENTATION":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_ALL_POLYGONS_WRONG_ORIENTATION;
case "GE_S_NON_MANIFOLD_VERTEX":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_NON_MANIFOLD_VERTEX;
case "GE_S_SELF_INTERSECTION":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_SELF_INTERSECTION;
case "GE_S_MULTIPLE_CONNECTED_COMPONENTS":
return de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_MULTIPLE_CONNECTED_COMPONENTS;
case "SE_ATTRIBUTE_WRONG_VALUE":
return de.hft.stuttgart.quality.model.enums.ErrorId.SE_ATTRIBUTE_WRONG_VALUE;
case "SE_ATTRIBUTE_MISSING":
return de.hft.stuttgart.quality.model.enums.ErrorId.SE_ATTRIBUTE_MISSING;
case "SE_ATTRIBUTE_INVALID":
return de.hft.stuttgart.quality.model.enums.ErrorId.SE_ATTRIBUTE_INVALID;
default:
return null;
}
return switch (key.getIdString()) {
case "GE_R_NOT_CLOSED" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_R_NOT_CLOSED;
case "GE_R_TOO_FEW_POINTS" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_R_TOO_FEW_POINTS;
case "GE_R_CONSECUTIVE_POINTS_SAME" ->
de.hft.stuttgart.quality.model.enums.ErrorId.GE_R_CONSECUTIVE_POINTS_SAME;
case "GE_R_SELF_INTERSECTION" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_R_SELF_INTERSECTION;
case "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION" ->
de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION;
case "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE" ->
de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE;
case "GE_P_INTERIOR_DISCONNECTED" ->
de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_INTERIOR_DISCONNECTED;
case "GE_P_INTERSECTING_RINGS" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_INTERSECTING_RINGS;
case "GE_P_HOLE_OUTSIDE" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_HOLE_OUTSIDE;
case "GE_P_ORIENTATION_RINGS_SAME" ->
de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_ORIENTATION_RINGS_SAME;
case "GE_P_INNER_RINGS_NESTED" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_P_INNER_RINGS_NESTED;
case "GE_S_TOO_FEW_POLYGONS" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_TOO_FEW_POLYGONS;
case "GE_S_NOT_CLOSED" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_NOT_CLOSED;
case "GE_S_NON_MANIFOLD_EDGE" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_NON_MANIFOLD_EDGE;
case "GE_S_POLYGON_WRONG_ORIENTATION" ->
de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_POLYGON_WRONG_ORIENTATION;
case "GE_S_ALL_POLYGONS_WRONG_ORIENTATION" ->
de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_ALL_POLYGONS_WRONG_ORIENTATION;
case "GE_S_NON_MANIFOLD_VERTEX" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_NON_MANIFOLD_VERTEX;
case "GE_S_SELF_INTERSECTION" -> de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_SELF_INTERSECTION;
case "GE_S_MULTIPLE_CONNECTED_COMPONENTS" ->
de.hft.stuttgart.quality.model.enums.ErrorId.GE_S_MULTIPLE_CONNECTED_COMPONENTS;
case "SE_ATTRIBUTE_WRONG_VALUE" -> de.hft.stuttgart.quality.model.enums.ErrorId.SE_ATTRIBUTE_WRONG_VALUE;
case "SE_ATTRIBUTE_MISSING" -> de.hft.stuttgart.quality.model.enums.ErrorId.SE_ATTRIBUTE_MISSING;
case "SE_ATTRIBUTE_INVALID" -> de.hft.stuttgart.quality.model.enums.ErrorId.SE_ATTRIBUTE_INVALID;
default -> null;
};
}
}
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.utils;
import java.io.Serial;
import java.io.Serializable;
/**
......@@ -30,10 +31,11 @@ import java.io.Serializable;
*/
public class SerializablePair<A extends Serializable, B extends Serializable> implements Serializable {
@Serial
private static final long serialVersionUID = -5307944001963352647L;
private A a;
private B b;
private final A a;
private final B b;
public SerializablePair(A a, B b) {
this.a = a;
......@@ -82,13 +84,8 @@ public class SerializablePair<A extends Serializable, B extends Serializable> im
return false;
}
if (b == null) {
if (other.b != null) {
return false;
}
} else if (!b.equals(other.b)) {
return false;
}
return true;
return other.b == null;
} else return b.equals(other.b);
}
@Override
......
<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<parent>
<groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId>
......@@ -65,6 +64,10 @@
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
</dependencies>
<build>
<resources>
......
......@@ -43,7 +43,6 @@ import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
......@@ -105,8 +104,8 @@ public class Checker {
private List<Filter> includeFilters;
private List<Filter> excludeFilters;
private Checks checkConfig;
private CityDoctorModel model;
private final Checks checkConfig;
private final CityDoctorModel model;
public Checker(CityDoctorModel model) {
this(ValidationConfiguration.loadStandardValidationConfig(), model);
......@@ -131,7 +130,6 @@ public class Checker {
* given or this checker has not validated anything, nothing is done.
*
* @param xmlOutput the output file location for the XML report. Can be null.
* @param model the model for which the report is written.
*/
public void writeXmlReport(String xmlOutput) {
if (!model.isValidated() || xmlOutput == null) {
......@@ -316,8 +314,7 @@ public class Checker {
handleInputFilter(filter);
if (excludeFilters != null) {
for (Filter f : excludeFilters) {
if (f instanceof TypeFilter) {
TypeFilter tf = (TypeFilter) f;
if (f instanceof TypeFilter tf) {
FeatureType type = tf.getType();
TopLevelFeatureType tlft = mapToTopLevelFeatureType(type);
if (tlft == null) {
......@@ -392,22 +389,15 @@ public class Checker {
}
private TopLevelFeatureType mapToTopLevelFeatureType(FeatureType type) {
switch (type) {
case BRIDGE:
return TopLevelFeatureType.BRIDGE;
case BUILDING:
return TopLevelFeatureType.BUILDING;
case LAND:
return TopLevelFeatureType.LAND;
case TRANSPORTATION:
return TopLevelFeatureType.TRANSPORTATION;
case VEGETATION:
return TopLevelFeatureType.VEGETATION;
case WATER:
return TopLevelFeatureType.WATER;
default:
return null;
}
return switch (type) {
case BRIDGE -> TopLevelFeatureType.BRIDGE;
case BUILDING -> TopLevelFeatureType.BUILDING;
case LAND -> TopLevelFeatureType.LAND;
case TRANSPORTATION -> TopLevelFeatureType.TRANSPORTATION;
case VEGETATION -> TopLevelFeatureType.VEGETATION;
case WATER -> TopLevelFeatureType.WATER;
default -> null;
};
}
private RequirementId mapToRequirement(String requirementName) {
......@@ -445,13 +435,7 @@ public class Checker {
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
transformerFactory.setURIResolver(new URIResolver() {
@Override
public Source resolve(String href, String base) throws TransformerException {
return new StreamSource(Checker.class.getResourceAsStream(href));
}
});
transformerFactory.setURIResolver((href, base) -> new StreamSource(Checker.class.getResourceAsStream(href)));
Source dsdlXslSource = new StreamSource(Checker.class.getResourceAsStream("iso_dsdl_include.xsl"));
Transformer dsdlXslTransformer = transformerFactory.newTransformer(dsdlXslSource);
......@@ -706,8 +690,8 @@ public class Checker {
if (logger.isDebugEnabled()) {
logger.debug(Localization.getText("Checker.checkFeature"), co);
}
for (int i = 0; i < execLayers.size(); i++) {
for (Check check : execLayers.get(i)) {
for (List<Check> execLayer : execLayers) {
for (Check check : execLayer) {
if (logger.isTraceEnabled()) {
logger.trace(Localization.getText("Checker.executeCheck"), check.getCheckId());
}
......
......@@ -30,7 +30,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
*/
public class EqualsIgnoreCaseFilter implements Filter {
private String id;
private final String id;
public EqualsIgnoreCaseFilter(String id) {
Objects.requireNonNull(id);
......
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.check;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
......@@ -26,6 +27,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.FeatureType;
public class ExcludeFilterConfiguration implements Serializable {
@Serial
private static final long serialVersionUID = 5308380997654048837L;
private List<FeatureType> types;
......
......@@ -27,6 +27,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
* @author Matthias Betz
*
*/
@FunctionalInterface
public interface Filter {
/**
......
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.check;
import java.io.Serial;
import java.io.Serializable;
/**
......@@ -29,6 +30,7 @@ import java.io.Serializable;
*/
public class FilterConfiguration implements Serializable {
@Serial
private static final long serialVersionUID = 3344890310114546998L;
private ExcludeFilterConfiguration exclude;
......
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.check;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
......@@ -34,6 +35,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.FeatureType;
*/
public class IncludeFilterConfiguration implements Serializable {
@Serial
private static final long serialVersionUID = 1840264505629236113L;
private List<FeatureType> types;
......
......@@ -24,7 +24,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
public class PatternFilter implements Filter {
private Pattern pattern;
private final Pattern pattern;
public PatternFilter(String patternString) {
pattern = Pattern.compile(patternString);
......
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.check;
import java.io.Serial;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
......@@ -31,6 +32,7 @@ import java.util.Map;
*/
public class RequirementConfiguration implements Serializable {
@Serial
private static final long serialVersionUID = -1258195428669813888L;
private boolean enabled;
......
......@@ -63,22 +63,22 @@ public class StreamCityGmlConsumer implements CityGmlConsumer {
private static final Logger logger = LogManager.getLogger(StreamCityGmlConsumer.class);
private Checker c;
private XmlStreamReporter xmlReporter;
private PdfStreamReporter pdfReporter;
private SvrlContentHandler handler;
private Map<ErrorId, AtomicInteger> errorCount;
private GeometryFactory gmlFactory;
private ValidationConfiguration config;
private Statistics statistics;
private FeatureStatistics buildingStatistics;
private FeatureStatistics bridgeStatistics;
private FeatureStatistics transportationStatistics;
private FeatureStatistics vegetationStatistics;
private FeatureStatistics landStatistics;
private FeatureStatistics waterStatistics;
private Validation val;
private FeatureCheckedListener l;
private final Checker c;
private final XmlStreamReporter xmlReporter;
private final PdfStreamReporter pdfReporter;
private final SvrlContentHandler handler;
private final Map<ErrorId, AtomicInteger> errorCount;
private final GeometryFactory gmlFactory;
private final ValidationConfiguration config;
private final Statistics statistics;
private final FeatureStatistics buildingStatistics;
private final FeatureStatistics bridgeStatistics;
private final FeatureStatistics transportationStatistics;
private final FeatureStatistics vegetationStatistics;
private final FeatureStatistics landStatistics;
private final FeatureStatistics waterStatistics;
private final Validation val;
private final FeatureCheckedListener l;
public StreamCityGmlConsumer(Checker c, XmlStreamReporter xmlReporter, PdfStreamReporter pdfReporter,
SvrlContentHandler handler, ValidationConfiguration config, FeatureCheckedListener l) {
......@@ -92,7 +92,7 @@ public class StreamCityGmlConsumer implements CityGmlConsumer {
gmlFactory = GeometryFactory.newInstance();
val = new Validation();
val.setId("CD" + UUID.randomUUID().toString());
val.setId("CD" + UUID.randomUUID());
val.setValidationDate(ZonedDateTime.now());
val.setValidationSoftware("CityDoctor " + Localization.getText(Localization.VERSION));
statistics = new Statistics();
......@@ -182,7 +182,7 @@ public class StreamCityGmlConsumer implements CityGmlConsumer {
}
val.setStatistics(new StatisticsProperty(statistics));
ValidationPlan validationPlan = c.createValidationPlan();
validationPlan.setId("CD_PLAN_" + UUID.randomUUID().toString());
validationPlan.setId("CD_PLAN_" + UUID.randomUUID());
cm.getFeatureMembers().add(new AbstractFeatureProperty(validationPlan));
val.setValidationPlan(new Reference(validationPlan));
......
......@@ -21,27 +21,28 @@ package de.hft.stuttgart.citydoctor2.check;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.datastructure.FeatureType;
/**
* Filters the feature type of features
*
* @author Matthias Betz
*
*/
public class TypeFilter implements Filter {
private FeatureType type;
private final FeatureType type;
public TypeFilter(FeatureType type) {
this.type = type;
}
public FeatureType getType() {
return type;
}
@Override
public boolean matches(CityObject co) {
return co.getFeatureType() == type;
}
public FeatureType getType() {
return type;
}
}
......@@ -18,14 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.check;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
......@@ -33,6 +26,7 @@ import java.util.Map.Entry;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import org.yaml.snakeyaml.nodes.Tag;
......@@ -55,6 +49,7 @@ public class ValidationConfiguration implements Serializable {
public static final String CHECK_FOR_SOLID_XML = "checkForSolid.xml";
private static final String NUMBER_OF_ROUNDING_PLACES_DEFAULT = "8";
private static final String MIN_VERTEX_DISTANCE_DEFAULT = "0.0001";
@Serial
private static final long serialVersionUID = -8020055032177740646L;
private static final Logger logger = LogManager.getLogger(ValidationConfiguration.class);
......@@ -72,7 +67,7 @@ public class ValidationConfiguration implements Serializable {
}
public static ValidationConfiguration loadValidationConfig(InputStream stream) {
Yaml yaml = new Yaml(new Constructor(ValidationConfiguration.class));
Yaml yaml = new Yaml(new Constructor(ValidationConfiguration.class, new LoaderOptions()));
ValidationConfiguration config = yaml.load(stream);
config.validateConfiguration();
return config;
......@@ -104,9 +99,9 @@ public class ValidationConfiguration implements Serializable {
DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
options.setPrettyFlow(true);
Representer rep = new ValidationConfigurationRepresenter();
Representer rep = new ValidationConfigurationRepresenter(options);
rep.addClassTag(ValidationConfiguration.class, Tag.MAP);
Yaml yaml = new Yaml(rep, options);
Yaml yaml = new Yaml(rep);
try (BufferedWriter bw = new BufferedWriter(new FileWriter(f))) {
yaml.dump(this, bw);
}
......@@ -178,9 +173,9 @@ public class ValidationConfiguration implements Serializable {
return cConfig;
});
}
globalParameters.computeIfAbsent(GlobalParameters.MIN_VERTEX_DISTANCE, k -> MIN_VERTEX_DISTANCE_DEFAULT);
globalParameters.computeIfAbsent(GlobalParameters.NUMBER_OF_ROUNDING_PLACES,
k -> NUMBER_OF_ROUNDING_PLACES_DEFAULT);
globalParameters.putIfAbsent(GlobalParameters.MIN_VERTEX_DISTANCE, MIN_VERTEX_DISTANCE_DEFAULT);
globalParameters.putIfAbsent(GlobalParameters.NUMBER_OF_ROUNDING_PLACES,
NUMBER_OF_ROUNDING_PLACES_DEFAULT);
}
public int getNumberOfRoundingPlaces() {
......
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.check;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.introspector.Property;
import org.yaml.snakeyaml.nodes.CollectionNode;
import org.yaml.snakeyaml.nodes.MappingNode;
......@@ -36,6 +37,10 @@ import org.yaml.snakeyaml.representer.Representer;
*/
public class ValidationConfigurationRepresenter extends Representer {
public ValidationConfigurationRepresenter(DumperOptions options) {
super(options);
}
@Override
protected NodeTuple representJavaBeanProperty(Object javaBean, Property property, Object propertyValue,
Tag customTag) {
......
......@@ -38,7 +38,7 @@ import de.hft.stuttgart.citydoctor2.check.RequirementType;
*/
public class CheckPrototype {
private Check c;
private final Check c;
public CheckPrototype(Check c) {
this.c = c;
......
......@@ -69,12 +69,12 @@ public class Checks {
private static final Logger logger = LogManager.getLogger(Checks.class);
private static List<CheckPrototype> checkPrototypes;
private static Map<CheckId, CheckPrototype> prototypeMap;
private static final List<CheckPrototype> checkPrototypes;
private static final Map<CheckId, CheckPrototype> prototypeMap;
private static Map<String, Requirement> availableRequirements;
private Map<CheckId, Check> checkMap;
private final Map<CheckId, Check> checkMap;
static {
checkPrototypes = new ArrayList<>();
......
......@@ -45,8 +45,8 @@ public class SvrlContentHandler implements ContentHandler {
private StringBuilder buffer;
private Map<String, List<SchematronError>> featureErrors;
private List<SchematronError> generalErrors;
private final Map<String, List<SchematronError>> featureErrors;
private final List<SchematronError> generalErrors;
public SvrlContentHandler() {
featureErrors = new HashMap<>();
......@@ -65,22 +65,23 @@ public class SvrlContentHandler implements ContentHandler {
public void setDocumentLocator(Locator locator) {
// not needed
}
@SuppressWarnings("RedundantThrows")
@Override
public void startDocument() throws SAXException {
// not needed
}
@SuppressWarnings("RedundantThrows")
@Override
public void endDocument() throws SAXException {
// not needed
}
@SuppressWarnings("RedundantThrows")
@Override
public void startPrefixMapping(String prefix, String uri) throws SAXException {
// not needed
}
@SuppressWarnings("RedundantThrows")
@Override
public void endPrefixMapping(String prefix) throws SAXException {
// not needed
......@@ -132,17 +133,17 @@ public class SvrlContentHandler implements ContentHandler {
buffer.append(ch, start, length);
}
}
@SuppressWarnings("RedundantThrows")
@Override
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
// not needed
}
@SuppressWarnings("RedundantThrows")
@Override
public void processingInstruction(String target, String data) throws SAXException {
// not needed
}
@SuppressWarnings("RedundantThrows")
@Override
public void skippedEntity(String name) throws SAXException {
// not needed
......
......@@ -124,9 +124,9 @@ public class RingSelfIntCheck extends Check {
Segment3d s1 = new Segment3d(e1.getFrom(), e1.getTo());
Segment3d s2 = new Segment3d(e2.getFrom(), e2.getTo());
DistanceResult dr = s1.getDistanceResult(s2);
if (dr.getDistance() < epsilon) {
if (dr.distance() < epsilon) {
// intersection
CheckError err = new RingEdgeIntersectionError(lr, e1, e2, dr.getPoint1());
CheckError err = new RingEdgeIntersectionError(lr, e1, e2, dr.point1());
CheckResult cr = new CheckResult(this, ResultStatus.ERROR, err);
lr.addCheckResult(cr);
return;
......
......@@ -34,12 +34,9 @@ import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.checks.util.SelfIntersectionUtil;
import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.math.Segment3d;
import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection;
import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection.IntersectionType;
/**
* Check for self intersecting solids
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment