Commit 97a65114 authored by Riegel's avatar Riegel
Browse files

Merge branch 'dev' into 'master'

Version 3.15.0

See merge request !8
parents 99c8f6a8 5950ea5f
Pipeline #10106 passed with stage
in 3 minutes and 15 seconds
......@@ -18,6 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.parser;
import java.io.Serial;
/**
* Used when an invalid CityGML file is found.
*
......@@ -26,6 +28,7 @@ package de.hft.stuttgart.citydoctor2.parser;
*/
public class InvalidGmlFileException extends Exception {
@Serial
private static final long serialVersionUID = 5490585939707730933L;
public InvalidGmlFileException() {
......
......@@ -37,10 +37,10 @@ import java.util.ArrayList;
public class ObservedInputStream extends FilterInputStream {
/** List of registered progress listeners. */
private ArrayList<InputStreamListener> listeners = new ArrayList<>();
private final ArrayList<InputStreamListener> listeners = new ArrayList<>();
/** The number of bytes of the file to be read. */
private long fileLength;
private final long fileLength;
/** The number of bytes read so far. */
private long location;
......
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.parser;
import java.io.Serial;
import java.io.Serializable;
import org.locationtech.proj4j.BasicCoordinateTransform;
......@@ -33,13 +34,14 @@ import org.locationtech.proj4j.CoordinateReferenceSystem;
*/
public class ParserConfiguration implements Serializable {
@Serial
private static final long serialVersionUID = 6209047092991074661L;
private static final CRSFactory CRS_FACTORY = new CRSFactory();
private int roundingPlaces = 8;
private final int roundingPlaces ;
private boolean validate = false;
private final boolean validate;
private transient BasicCoordinateTransform targetTransform = null;
private transient BasicCoordinateTransform originalTransform = null;
......@@ -89,8 +91,8 @@ public class ParserConfiguration implements Serializable {
}
private void createCoordinateTransforms() {
CoordinateReferenceSystem tgtCrs = null;
CoordinateReferenceSystem crs = null;
CoordinateReferenceSystem tgtCrs ;
CoordinateReferenceSystem crs;
synchronized (CRS_FACTORY) {
tgtCrs = CRS_FACTORY.createFromParameters("Target", targetTransformString);
crs = CRS_FACTORY.createFromParameters("Original", originalTransformString);
......
......@@ -36,7 +36,7 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d;
*/
public class Primitive {
private static Logger logger = LogManager.getLogger(Primitive.class);
private static final Logger logger = LogManager.getLogger(Primitive.class);
private static final double AREA_EPSILON = 0.00001;
......
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.tesselation;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
......@@ -35,10 +36,11 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d;
*/
public class TesselatedPolygon implements Serializable {
@Serial
private static final long serialVersionUID = 3117655580899570369L;
private List<Triangle3d> triangles;
private Polygon original;
private final List<Triangle3d> triangles;
private final Polygon original;
public TesselatedPolygon(List<Triangle3d> triangles, Polygon original) {
this.triangles = triangles;
......@@ -54,7 +56,7 @@ public class TesselatedPolygon implements Serializable {
}
triangles = new ArrayList<>();
for (int i = 0; i < indices.size(); i = i + 3) {
Vector3d v1 = vertices.get(indices.get(i + 0));
Vector3d v1 = vertices.get(indices.get(i));
Vector3d v2 = vertices.get(indices.get(i + 1));
Vector3d v3 = vertices.get(indices.get(i + 2));
triangles.add(new Triangle3d(v1, v2, v3, this));
......
......@@ -34,8 +34,8 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d;
*/
public class TesselatedRing {
private List<Triangle3d> triangles;
private LinearRing ring;
private final List<Triangle3d> triangles;
private final LinearRing ring;
public TesselatedRing(List<Triangle3d> triangles, LinearRing ring) {
this.ring = ring;
......@@ -48,7 +48,7 @@ public class TesselatedRing {
}
triangles = new ArrayList<>();
for (int i = 0; i < indices.size(); i = i + 3) {
Vector3d v1 = vertices.get(indices.get(i + 0));
Vector3d v1 = vertices.get(indices.get(i));
Vector3d v2 = vertices.get(indices.get(i + 1));
Vector3d v3 = vertices.get(indices.get(i + 2));
triangles.add(new Triangle3d(v1, v2, v3));
......
......@@ -18,6 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.tesselation;
import java.io.Serial;
/**
* Thrown when something went wrong with the tesselation process.
*
......@@ -43,6 +45,7 @@ public class TesselationException extends RuntimeException {
super(cause);
}
@Serial
private static final long serialVersionUID = -2010522579830781136L;
public TesselationException(String message) {
......
......@@ -18,6 +18,10 @@
*/
package de.hft.stuttgart.citydoctor2.utils;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
......@@ -26,6 +30,8 @@ import java.io.ObjectOutputStream;
public class Copy {
private static final Logger logger = LogManager.getLogger(Copy.class);
private Copy() {
}
......@@ -41,16 +47,11 @@ public class Copy {
ByteArrayInputStream in = new ByteArrayInputStream(byteArray);
ObjectInputStream ois = new ObjectInputStream(in);
return (T) ois.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException | ClassNotFoundException e) {
logger.log(Level.ERROR, e.getMessage(), e);
}
throw new IllegalStateException();
// CopyHandler handler = new CopyHandler();
// return handler.copy(original);
}
}
......@@ -29,8 +29,8 @@ import java.util.Set;
public class CopyHandler {
private Set<Copyable> toBeDoneInstances = new HashSet<>();
private Map<Copyable, Copyable> finishedInstances = new IdentityHashMap<>();
private final Set<Copyable> toBeDoneInstances = new HashSet<>();
private final Map<Copyable, Copyable> finishedInstances = new IdentityHashMap<>();
@SuppressWarnings("unchecked")
public <T extends Copyable> T copy(T original) {
......
......@@ -30,7 +30,7 @@ public class Localization {
public static final String VERSION = "CityDoctorValidation.Version";
private static ResourceBundle bundle;
private static final ResourceBundle bundle;
static {
bundle = ResourceBundle.getBundle("CityDoctorLocalization");
......
......@@ -28,8 +28,8 @@ package de.hft.stuttgart.citydoctor2.utils;
*/
public class Pair<A, B> {
private A a;
private B b;
private final A a;
private final B b;
public Pair(A a, B b) {
this.a = a;
......@@ -78,14 +78,9 @@ public class Pair<A, B> {
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
public String toString() {
......
......@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.utils;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
......@@ -33,13 +34,14 @@ import de.hft.stuttgart.citydoctor2.math.Segment3d;
*/
public class PolygonIntersection implements Serializable {
@Serial
private static final long serialVersionUID = -6301963226688351725L;
public enum IntersectionType {
NONE, LINE, POLYGON
}
private IntersectionType type;
private final IntersectionType type;
private List<Segment3d> lines;
private ConcretePolygon polygon;
......
......@@ -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,14 +84,9 @@ 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
public String toString() {
......
<?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>
<version>3.14.1</version>
<version>3.15.0</version>
</parent>
<artifactId>CityDoctorValidation</artifactId>
<name>CityDoctorValidation</name>
......@@ -65,7 +64,11 @@
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
</dependency>
</dependencies>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
......
......@@ -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,14 +690,14 @@ 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)) {
if (logger.isTraceEnabled()) {
logger.trace(Localization.getText("Checker.executeCheck"), check.getCheckId());
}
co.accept(check);
}
}
for (List<Check> execLayer : execLayers) {
for (Check check : execLayer) {
if (logger.isTraceEnabled()) {
logger.trace(Localization.getText("Checker.executeCheck"), check.getCheckId());
}
co.accept(check);
}
}
}
public static List<List<Check>> buildExecutionLayers(List<Check> checks) {
......
......@@ -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;
......
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