From 74cdade3ceee8c8019c1b7d81607aef3a96db161 Mon Sep 17 00:00:00 2001
From: Riegel
Date: Wed, 14 May 2025 11:52:05 +0200
Subject: [PATCH 01/14] Refactor: Rename AbstractCheck
---
.../{AbstractCheck.java => AbstractVisitor.java} | 2 +-
.../hft/stuttgart/citydoctor2/check/Checkable.java | 4 ++--
.../citydoctor2/datastructure/CityDoctorModel.java | 4 ++--
.../utils/visitors/CheckableErrorCollector.java | 4 ++--
.../utils/visitors/CityObjectCollector.java | 4 ++--
.../utils/visitors/ClearMetaInformationVisitor.java | 4 ++--
...sVisitor.java => ClearVisitorResultsVisitor.java} | 4 ++--
.../utils/visitors/ContainsAnyErrorVisitor.java | 4 ++--
.../utils/visitors/ContainsErrorVisitor.java | 4 ++--
.../utils/visitors/GmlGeometryRebuilder.java | 4 ++--
.../utils/visitors/PrepareForCheckingVisitor.java | 4 ++--
.../utils/visitors/UnsetGeometriesVisitor.java | 4 ++--
.../datastructure/AbstractBuildingTest.java | 11 ++++-------
.../citydoctor2/datastructure/AbstractRoomTest.java | 4 ++--
.../datastructure/AbstractTunnelTest.java | 4 ++--
.../datastructure/BoundarySurfaceTest.java | 12 ++++++------
.../citydoctor2/datastructure/BridgeObjectTest.java | 8 ++++----
.../citydoctor2/datastructure/BuildingTest.java | 4 ++--
.../citydoctor2/datastructure/CityObjectTest.java | 4 ++--
.../datastructure/GenericCityObjectTest.java | 4 ++--
.../citydoctor2/datastructure/GeometryTest.java | 8 ++++----
.../datastructure/ImplicitGeometryTest.java | 4 ++--
.../citydoctor2/datastructure/ReliefObjectTest.java | 4 ++--
.../citydoctor2/datastructure/TinObjectTest.java | 4 ++--
.../datastructure/TopLevelTransportFeatureTest.java | 4 ++--
.../citydoctor2/datastructure/TrafficSpaceTest.java | 8 ++++----
.../datastructure/TransportationSpaceTest.java | 4 ++--
.../citydoctor2/datastructure/WaterTest.java | 4 ++--
.../de/hft/stuttgart/citydoctor2/healer/Healer.java | 4 ++--
.../citydoctor2/healing/HealMissingSolid.java | 4 ++--
.../citydoctor2/healer/genetic/NonPlanarGenetic.java | 6 ++----
31 files changed, 73 insertions(+), 78 deletions(-)
rename CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/{AbstractCheck.java => AbstractVisitor.java} (96%)
rename CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/{ClearCheckResultsVisitor.java => ClearVisitorResultsVisitor.java} (72%)
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractCheck.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java
similarity index 96%
rename from CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractCheck.java
rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java
index 7910cdb0..138a4f35 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractCheck.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java
@@ -30,7 +30,7 @@ import java.util.Set;
* @author Matthias Betz
*
*/
-public abstract class AbstractCheck extends Check {
+public abstract class AbstractVisitor extends Check {
@Override
public Set appliesToRequirements() {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Checkable.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Checkable.java
index eee6292b..c71fb306 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Checkable.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Checkable.java
@@ -26,7 +26,7 @@ import java.util.Map;
import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound;
import de.hft.stuttgart.citydoctor2.utils.visitors.CheckableErrorCollector;
-import de.hft.stuttgart.citydoctor2.utils.visitors.ClearCheckResultsVisitor;
+import de.hft.stuttgart.citydoctor2.utils.visitors.ClearVisitorResultsVisitor;
import de.hft.stuttgart.citydoctor2.utils.visitors.ClearMetaInformationVisitor;
import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsAnyErrorVisitor;
import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsErrorVisitor;
@@ -232,7 +232,7 @@ public abstract class Checkable implements Serializable {
* Clears the checkResults list of this checkable and all child objects in its datastructure.
*/
public final void clearAllContainedCheckResults() {
- this.accept(new ClearCheckResultsVisitor());
+ this.accept(new ClearVisitorResultsVisitor());
}
/**
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
index 91818898..0714863e 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException;
@@ -147,7 +147,7 @@ public class CityDoctorModel {
folder.mkdirs();
createFeatureStream().forEach(co -> {
Map> polygonMap = new EnumMap<>(Lod.class);
- Check c = new AbstractCheck() {
+ Check c = new AbstractVisitor() {
@Override
public void check(Geometry geom) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java
index d6af6749..b9125972 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checkable;
@@ -9,7 +9,7 @@ import java.util.List;
/**
* This Visitor collects all CheckErrors in the datastructure of a checkable.
*/
-public class CheckableErrorCollector extends AbstractCheck {
+public class CheckableErrorCollector extends AbstractVisitor {
List errors;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java
index 31948813..18cf4d14 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import java.util.HashSet;
@@ -9,7 +9,7 @@ import java.util.Set;
/**
* This Visitor collects all sub-CityObjects that are in the datastructure of a CityObject (including itself) in a Set.
*/
-public class CityObjectCollector extends AbstractCheck {
+public class CityObjectCollector extends AbstractVisitor {
private final Set objects = new HashSet<>();
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java
index b08ed136..06d45396 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java
@@ -1,12 +1,12 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
/**
* This Visitor removes the metadata created by the {@link PrepareForCheckingVisitor} for the low-memory consumption mode.
*/
-public class ClearMetaInformationVisitor extends AbstractCheck {
+public class ClearMetaInformationVisitor extends AbstractVisitor {
@Override
public void check(Geometry geometry) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearCheckResultsVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearVisitorResultsVisitor.java
similarity index 72%
rename from CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearCheckResultsVisitor.java
rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearVisitorResultsVisitor.java
index 18019a70..2fd476bd 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearCheckResultsVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearVisitorResultsVisitor.java
@@ -1,12 +1,12 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.Checkable;
/**
* This Visitor removes the check results from a CityObject and the objects in its datastructure.
*/
-public class ClearCheckResultsVisitor extends AbstractCheck {
+public class ClearVisitorResultsVisitor extends AbstractVisitor {
@Override
public void check(Checkable checkable) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java
index 02a9a5b2..ba50579a 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound;
import de.hft.stuttgart.citydoctor2.utils.ThrowUtils;
@@ -11,7 +11,7 @@ import de.hft.stuttgart.citydoctor2.utils.ThrowUtils;
* This visitor's check method terminates early by throwing an unchecked {@link CheckErrorFound},
* use {@link #checkObject(Checkable) ContainsAnyErrorVisitor.checkObject(Checkable)} to handle the Throwable.
*/
-public class ContainsAnyErrorVisitor extends AbstractCheck {
+public class ContainsAnyErrorVisitor extends AbstractVisitor {
/**
* Checks if a Checkable, or any Object in its datastructure, contains any error.
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java
index 9ddc69c5..8a5237a1 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound;
@@ -12,7 +12,7 @@ import de.hft.stuttgart.citydoctor2.utils.ThrowUtils;
* This visitor's check method terminates early by throwing an unchecked {@link CheckErrorFound},
* use {@link #checkObject(Checkable, CheckId) ContainsAnyErrorVisitor.checkObject(Checkable, CheckId)} to handle the Throwable.
*/
-public class ContainsErrorVisitor extends AbstractCheck {
+public class ContainsErrorVisitor extends AbstractVisitor {
private CheckId checkId;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java
index cd74226b..f4f6583f 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import org.citygml4j.core.util.geometry.GeometryFactory;
@@ -11,7 +11,7 @@ import java.util.Objects;
* This Visitor recreates the Geometries of the original CityGml object from the associated Geometries in CityDoctor's
* internal model.
*/
-public class GmlGeometryRebuilder extends AbstractCheck {
+public class GmlGeometryRebuilder extends AbstractVisitor {
private final GeometryFactory factory;
private final ParserConfiguration config;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java
index 3388da78..849a1db6 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java
@@ -1,12 +1,12 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
/**
* This Visitor prepares the {@link Geometry Geometries} in a Checkable for low-memory consumption mode.
*/
-public class PrepareForCheckingVisitor extends AbstractCheck {
+public class PrepareForCheckingVisitor extends AbstractVisitor {
@Override
public void check(Geometry geom) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java
index d24948d6..2150678a 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java
@@ -1,13 +1,13 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
/**
* This Visitor removes the GmlGeometries from the linked original GmlObjects in a CityObject's datastructure to reduce
* memory bloat.
*/
-public class UnsetGeometriesVisitor extends AbstractCheck {
+public class UnsetGeometriesVisitor extends AbstractVisitor {
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
index 0c8e436c..1ed3ff10 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -32,9 +31,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
-import de.hft.stuttgart.citydoctor2.utils.visitors.ClearCheckResultsVisitor;
import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder;
-import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor;
import org.citygml4j.core.model.construction.WallSurface;
import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty;
import org.citygml4j.core.util.geometry.GeometryFactory;
@@ -43,7 +40,7 @@ import org.mockito.Mockito;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import org.xmlobjects.gml.model.geometry.primitives.SolidProperty;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -62,7 +59,7 @@ public class AbstractBuildingTest {
AtomicInteger abCounter = new AtomicInteger(0);
AtomicInteger bsCounter = new AtomicInteger(0);
AtomicInteger biCounter = new AtomicInteger(0);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
@Override
public void check(AbstractBuilding ab) {
@@ -79,7 +76,7 @@ public class AbstractBuildingTest {
assertEquals(1, bsCounter.intValue());
assertEquals(0, biCounter.intValue());
- AbstractCheck c2 = new AbstractCheck() {
+ AbstractVisitor c2 = new AbstractVisitor() {
@Override
public void check(Installation bi) {
@@ -109,7 +106,7 @@ public class AbstractBuildingTest {
ab.addBoundarySurface(mockBSurface);
ab.addGeometry(mockGeometry);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
ab.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java
index 5f575179..f512b264 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -50,7 +50,7 @@ public class AbstractRoomTest {
abRoom.addBoundarySurface(mockBoundarySurface);
abRoom.addGeometry(geometry);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
abRoom.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java
index ee3f289a..2ff3bb94 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -52,7 +52,7 @@ public class AbstractTunnelTest {
at.addBoundarySurface(mockBoundarySurface);
at.addGeometry(mockGeometry);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
at.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
index 458739ac..3e9da364 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
@@ -30,7 +30,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
-import de.hft.stuttgart.citydoctor2.utils.visitors.ClearCheckResultsVisitor;
+import de.hft.stuttgart.citydoctor2.utils.visitors.ClearVisitorResultsVisitor;
import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder;
import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor;
import org.citygml4j.core.model.construction.AbstractConstructionSurface;
@@ -41,7 +41,7 @@ import org.junit.Test;
import org.mockito.Mockito;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -58,7 +58,7 @@ public class BoundarySurfaceTest {
Opening oMock = Mockito.mock(Opening.class);
bs.addOpening(oMock);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
bs.accept(c);
@@ -71,7 +71,7 @@ public class BoundarySurfaceTest {
Opening oMock = Mockito.mock(Opening.class);
bs.addOpening(oMock);
AtomicInteger bsCounter = new AtomicInteger(0);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
@Override
public void check(BoundarySurface bs) {
@@ -89,7 +89,7 @@ public class BoundarySurfaceTest {
Opening oMock = Mockito.mock(Opening.class);
bs.addOpening(oMock);
AtomicInteger bsCounter = new AtomicInteger(0);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
@Override
public void check(BridgeObject bo) {
@@ -142,7 +142,7 @@ public class BoundarySurfaceTest {
assertFalse(bs.getAllCheckResults().isEmpty());
bs.addOpening(oMock);
bs.clearAllContainedCheckResults();
- verify(oMock).accept(any(ClearCheckResultsVisitor.class));
+ verify(oMock).accept(any(ClearVisitorResultsVisitor.class));
assertTrue(bs.getAllCheckResults().isEmpty());
}
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
index d8e23400..a6ca3c82 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
@@ -39,7 +39,7 @@ import org.citygml4j.core.util.geometry.GeometryFactory;
import org.citygml4j.core.visitor.ObjectVisitor;
import org.junit.Test;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -58,7 +58,7 @@ public class BridgeObjectTest {
bo.addBoundarySurface(new BoundarySurface(null));
AtomicInteger boCounter = new AtomicInteger(0);
AtomicInteger bsCounter = new AtomicInteger(0);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
@Override
public void check(BridgeObject bo) {
@@ -75,7 +75,7 @@ public class BridgeObjectTest {
assertEquals(1, bsCounter.intValue());
AtomicInteger boCounter2 = new AtomicInteger(0);
- c = new AbstractCheck() {
+ c = new AbstractVisitor() {
};
bo.accept(c);
assertEquals(0, boCounter2.intValue());
@@ -101,7 +101,7 @@ public class BridgeObjectTest {
bo.addBoundarySurface(bsMock);
bo.addGeometry(geomMock);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
bo.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
index 45855654..92de7c89 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
@@ -26,7 +26,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import org.citygml4j.core.model.construction.RoofSurface;
import org.junit.Test;
import org.mockito.Mockito;
@@ -151,7 +151,7 @@ public class BuildingTest {
bp.addStorey(mockStorey);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
b.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
index e0d7dae4..b833060b 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -31,7 +31,7 @@ public class CityObjectTest {
Geometry mockGeometry = mock(Geometry.class);
co.addGeometry(mockGeometry);
- AbstractCheck check = new AbstractCheck() {
+ AbstractVisitor check = new AbstractVisitor() {
};
co.accept(check);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java
index 00aab2b1..313d8810 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -30,7 +30,7 @@ public class GenericCityObjectTest {
gco.addBoundarySurface(mockSurface);
gco.addGeometry(mockGeometry);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
gco.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
index dde2b7df..7d96f09e 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
@@ -32,8 +32,8 @@ import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
-import de.hft.stuttgart.citydoctor2.utils.visitors.ClearCheckResultsVisitor;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.utils.visitors.ClearVisitorResultsVisitor;
import org.citygml4j.core.model.construction.AbstractConstructionSurface;
import org.citygml4j.core.model.construction.WallSurface;
import org.citygml4j.core.util.geometry.GeometryFactory;
@@ -63,7 +63,7 @@ public class GeometryTest {
geom.addPolygon(mockPolygon);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
geom.accept(c);
@@ -300,7 +300,7 @@ public class GeometryTest {
Polygon p = mock(Polygon.class);
geom.addPolygon(p);
geom.clearAllContainedCheckResults();
- verify(p).accept(any(ClearCheckResultsVisitor.class));
+ verify(p).accept(any(ClearVisitorResultsVisitor.class));
assertFalse(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
}
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryTest.java
index 6050b20f..f2b39f9e 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -150,7 +150,7 @@ public class ImplicitGeometryTest {
AtomicInteger loCounter = new AtomicInteger(0);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
@Override
public void check(Polygon lo) {
loCounter.incrementAndGet();
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java
index d97059d1..44ca0393 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import org.citygml4j.core.model.relief.ReliefFeature;
import org.junit.Test;
@@ -16,7 +16,7 @@ public class ReliefObjectTest {
TinObject mockTin = mock(TinObject.class);
relief.addComponent(mockTin);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
relief.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java
index b635e2a6..56541bf4 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -32,7 +32,7 @@ public class TinObjectTest {
tin.addGeometry(mockGeometry);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
tin.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java
index 0f3a1572..859c4f10 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -54,7 +54,7 @@ public class TopLevelTransportFeatureTest {
top.addSection(mockSection);
top.addIntersection(mockIntersection);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
top.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java
index bb6c592e..4967e60a 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java
@@ -1,12 +1,12 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
-import de.hft.stuttgart.citydoctor2.utils.visitors.ClearCheckResultsVisitor;
+import de.hft.stuttgart.citydoctor2.utils.visitors.ClearVisitorResultsVisitor;
import org.citygml4j.core.model.core.AbstractSpaceBoundary;
import org.citygml4j.core.model.core.AbstractUnoccupiedSpace;
import org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractCityObject;
@@ -37,7 +37,7 @@ public class TrafficSpaceTest {
TrafficAreaObject areaMock = mock(TrafficAreaObject.class);
tso.addTrafficArea(areaMock);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
tso.accept(c);
@@ -91,7 +91,7 @@ public class TrafficSpaceTest {
tso.clearAllContainedCheckResults();
assertFalse(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
- verify(taMock).accept(any(ClearCheckResultsVisitor.class));
+ verify(taMock).accept(any(ClearVisitorResultsVisitor.class));
}
@Test
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java
index e30557c2..0b77c6e3 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -32,7 +32,7 @@ public class TransportationSpaceTest {
space.addTrafficSpace(mockSpace);
space.addAuxTrafficSpace(auxMockSpace);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
space.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java
index b0289228..217d75f2 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -33,7 +33,7 @@ public class WaterTest {
water.addBoundarySurface(bsMock);
water.addBoundarySurface(bsMock2);
- AbstractCheck c = new AbstractCheck() {
+ AbstractVisitor c = new AbstractVisitor() {
};
water.accept(c);
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java
index 544a6856..5342f752 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java
@@ -26,7 +26,7 @@ import org.citygml4j.xml.writer.CityGMLWriteException;
import org.citygml4j.xml.writer.CityGMLWriter;
import de.hft.stuttgart.citydoctor2.CityDoctorValidation;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
@@ -353,7 +353,7 @@ public class Healer {
private void filterOutDuplicateVertices(CityObject co) {
Map map = new HashMap<>();
- co.accept(new AbstractCheck() {
+ co.accept(new AbstractVisitor() {
@Override
public void check(LinearRing ring) {
for (int i = 0; i < ring.getVertices().size(); i++) {
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
index 301d639b..b02cb681 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
@@ -24,7 +24,7 @@ import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingID;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
@@ -103,7 +103,7 @@ public class HealMissingSolid implements HealingMethod {
private List collectPolygons(CityObject co) {
List polygons = new ArrayList<>();
- AbstractCheck polygonCheck = new AbstractCheck() {
+ AbstractVisitor polygonCheck = new AbstractVisitor() {
@Override
public void check(Polygon p) {
if (!p.isLink()) {
diff --git a/CityDoctorParent/Extensions/CityDoctorHealerGenetic/src/test/java/de/hft/stuttgart/citydoctor2/healer/genetic/NonPlanarGenetic.java b/CityDoctorParent/Extensions/CityDoctorHealerGenetic/src/test/java/de/hft/stuttgart/citydoctor2/healer/genetic/NonPlanarGenetic.java
index aad5053d..f5d4b880 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealerGenetic/src/test/java/de/hft/stuttgart/citydoctor2/healer/genetic/NonPlanarGenetic.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealerGenetic/src/test/java/de/hft/stuttgart/citydoctor2/healer/genetic/NonPlanarGenetic.java
@@ -36,10 +36,8 @@ import java.util.Map.Entry;
import java.util.Random;
import java.util.Set;
-import org.junit.Test;
-
import Jama.EigenvalueDecomposition;
-import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
+import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
@@ -448,7 +446,7 @@ public class NonPlanarGenetic {
private Polygon findPolygonInFeature(CityObject copy, Polygon polygon) {
Polygon[] result = new Polygon[1];
- copy.accept(new AbstractCheck() {
+ copy.accept(new AbstractVisitor() {
@Override
public void check(Polygon p) {
--
GitLab
From 40ffb6177cee07418259b3bcef6bf8041c2da683 Mon Sep 17 00:00:00 2001
From: Riegel
Date: Thu, 15 May 2025 13:36:54 +0200
Subject: [PATCH 02/14] Refactor: Cleanup AbstractVisitor implementation
---
.../citydoctor2/check/AbstractVisitor.java | 129 ++++++++++++++++--
.../stuttgart/citydoctor2/check/Check.java | 7 +-
.../citydoctor2/check/Checkable.java | 2 +-
.../citydoctor2/check/CheckableVisitor.java | 69 ++++++++++
.../datastructure/AbstractBuilding.java | 4 +-
.../AbstractBuildingSubdivision.java | 4 +-
.../datastructure/AbstractFurniture.java | 5 +-
.../datastructure/AbstractRoom.java | 4 +-
.../datastructure/AbstractTunnel.java | 4 +-
.../datastructure/BoundarySurface.java | 4 +-
.../BridgeConstructiveElement.java | 4 +-
.../datastructure/BridgeObject.java | 4 +-
.../citydoctor2/datastructure/Building.java | 4 +-
.../datastructure/BuildingUnit.java | 6 +-
.../datastructure/CityDoctorModel.java | 3 +-
.../datastructure/CityFurniture.java | 4 +-
.../citydoctor2/datastructure/CityObject.java | 4 +-
.../datastructure/ConcretePolygon.java | 4 +-
.../datastructure/GenericCityObject.java | 4 +-
.../citydoctor2/datastructure/Geometry.java | 5 +-
.../datastructure/ImplicitGeometryHolder.java | 7 +-
.../datastructure/Installation.java | 5 +-
.../citydoctor2/datastructure/LandObject.java | 4 +-
.../citydoctor2/datastructure/LinearRing.java | 4 +-
.../datastructure/LinkedPolygon.java | 3 +-
.../citydoctor2/datastructure/Opening.java | 4 +-
.../datastructure/ReliefObject.java | 4 +-
.../citydoctor2/datastructure/Storey.java | 4 +-
.../citydoctor2/datastructure/TinObject.java | 4 +-
.../TopLevelTransportFeature.java | 4 +-
.../datastructure/TrafficSpaceObject.java | 4 +-
.../datastructure/TransportationSpace.java | 4 +-
.../citydoctor2/datastructure/Tunnel.java | 4 +-
.../TunnelConstructiveElement.java | 4 +-
.../citydoctor2/datastructure/Vegetation.java | 7 +-
.../datastructure/WaterObject.java | 4 +-
36 files changed, 253 insertions(+), 91 deletions(-)
create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java
index 138a4f35..4f7840b2 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java
@@ -18,7 +18,29 @@
*/
package de.hft.stuttgart.citydoctor2.check;
+import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
+import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
+import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject;
+import de.hft.stuttgart.citydoctor2.datastructure.Building;
+import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart;
+import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture;
+import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
+import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
+import de.hft.stuttgart.citydoctor2.datastructure.Installation;
+import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
+import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
+import de.hft.stuttgart.citydoctor2.datastructure.Opening;
+import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.ReliefObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TinObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
+import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
+import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
+import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
+
import java.util.Collections;
+import java.util.Map;
import java.util.Set;
/**
@@ -30,31 +52,116 @@ import java.util.Set;
* @author Matthias Betz
*
*/
-public abstract class AbstractVisitor extends Check {
+public abstract non-sealed class AbstractVisitor implements CheckableVisitor {
+
+ //Util Visitors have no dependencies
+ public boolean canExecute(Checkable c) {
+ return true;
+ }
@Override
- public Set appliesToRequirements() {
- return Collections.emptySet();
+ public final boolean isValidator() {
+ return false;
}
@Override
- public CheckId getCheckId() {
- return null;
+ public void check(Checkable checkable) {
+
}
@Override
- public RequirementType getType() {
- return null;
+ public void check(AbstractBuilding ab) {
+
}
@Override
- public Check createNewInstance() {
- return null;
+ public void check(BoundarySurface bs) {
+
}
@Override
- public final boolean isValidator() {
- return false;
+ public void check(BridgeObject bo) {
+
+ }
+
+ @Override
+ public void check(Building b) {
+
+ }
+
+ @Override
+ public void check(Installation bi) {
+
+ }
+
+ @Override
+ public void check(BuildingPart bp) {
+
+ }
+
+ @Override
+ public void check(CityObject co) {
+
+ }
+
+ @Override
+ public void check(LandObject lo) {
+
+ }
+
+ @Override
+ public void check(Opening o) {
+
+ }
+
+ @Override
+ public void check(TransportationObject to) {
+
+ }
+
+ @Override
+ public void check(Vegetation veg) {
+
+ }
+
+ @Override
+ public void check(WaterObject wo) {
+
+ }
+
+ @Override
+ public void check(Geometry geom) {
+
+ }
+
+ @Override
+ public void check(Polygon poly) {
+
+ }
+
+ @Override
+ public void check(LinearRing ring) {
+
+ }
+
+ @Override
+ public void check(TinObject tin) {
+
+ }
+
+ @Override
+ public void check(ReliefObject relief) {
+
+ }
+
+ @Override
+ public void check(CityFurniture cf) {
+
+ }
+
+ @Override
+ public void check(GenericCityObject gco) {
+
}
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java
index a50d6bcf..5b26eae3 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java
@@ -49,7 +49,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
* @author Matthias Betz
*
*/
-public abstract class Check {
+public abstract non-sealed class Check implements CheckableVisitor {
private final List> applicableToClasses = new ArrayList<>(2);
@@ -67,11 +67,6 @@ public abstract class Check {
}
}
- /**
- * Returns all classes for which the check needs to be executed
- *
- * @return a list of classes which the check applies to
- */
public List> getApplicableToClasses() {
return applicableToClasses;
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Checkable.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Checkable.java
index c71fb306..c9b94124 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Checkable.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Checkable.java
@@ -74,7 +74,7 @@ public abstract class Checkable implements Serializable {
* @param c the check from which the check method is called with the Checkable
* instance as parameter.
*/
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
if (c.canExecute(this)) {
c.check(this);
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
new file mode 100644
index 00000000..17651c34
--- /dev/null
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
@@ -0,0 +1,69 @@
+package de.hft.stuttgart.citydoctor2.check;
+
+import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
+import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
+import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject;
+import de.hft.stuttgart.citydoctor2.datastructure.Building;
+import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart;
+import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture;
+import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
+import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
+import de.hft.stuttgart.citydoctor2.datastructure.Installation;
+import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
+import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
+import de.hft.stuttgart.citydoctor2.datastructure.Opening;
+import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.ReliefObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TinObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
+import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
+import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
+
+public sealed interface CheckableVisitor permits Check, AbstractVisitor {
+
+ boolean isValidator();
+
+ boolean canExecute(Checkable c);
+
+ void check(Checkable checkable);
+
+ void check(AbstractBuilding ab);
+
+ void check(BoundarySurface bs);
+
+ void check(BridgeObject bo);
+
+ void check(Building b);
+
+ void check(Installation bi);
+
+ void check(BuildingPart bp);
+
+ void check(CityObject co);
+
+ void check(LandObject lo);
+
+ void check(Opening o);
+
+ void check(TransportationObject to);
+
+ void check(Vegetation veg);
+
+ void check(WaterObject wo);
+
+ void check(Geometry geom);
+
+ void check(Polygon poly);
+
+ void check(LinearRing ring);
+
+ void check(TinObject tin);
+
+ void check(ReliefObject relief);
+
+ void check(CityFurniture cf);
+
+ void check(GenericCityObject gco);
+
+}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuilding.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuilding.java
index e1923ece..4d6029f9 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuilding.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuilding.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import org.apache.logging.log4j.LogManager;
@@ -160,7 +160,7 @@ public abstract class AbstractBuilding extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingSubdivision.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingSubdivision.java
index 6142cb32..7ada0f2d 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingSubdivision.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingSubdivision.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import org.apache.logging.log4j.LogManager;
@@ -136,7 +136,7 @@ public abstract class AbstractBuildingSubdivision extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractFurniture.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractFurniture.java
index 774ca2bb..002ac4f7 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractFurniture.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractFurniture.java
@@ -1,7 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
-
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -30,7 +29,7 @@ public abstract class AbstractFurniture extends CityObject {
private org.citygml4j.core.model.construction.AbstractFurniture af;
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoom.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoom.java
index 79c08f54..b656ae69 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoom.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoom.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import org.citygml4j.core.model.core.AbstractCityObject;
@@ -32,7 +32,7 @@ public abstract class AbstractRoom extends CityObject {
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnel.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnel.java
index 7da0c979..0ea9909b 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnel.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnel.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -143,7 +143,7 @@ public abstract class AbstractTunnel extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurface.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurface.java
index 97720249..9fa5066c 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurface.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurface.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -145,7 +145,7 @@ public class BoundarySurface extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeConstructiveElement.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeConstructiveElement.java
index 6eeea1c7..01b892c7 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeConstructiveElement.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeConstructiveElement.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -95,7 +95,7 @@ public class BridgeConstructiveElement extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObject.java
index 0fcad336..b87b232e 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObject.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -191,7 +191,7 @@ public class BridgeObject extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Building.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Building.java
index dcd6073e..f21df6e3 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Building.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Building.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import org.citygml4j.core.model.building.BuildingInstallation;
import org.citygml4j.core.model.building.BuildingInstallationProperty;
import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty;
@@ -45,7 +45,7 @@ public class Building extends AbstractBuilding {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingUnit.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingUnit.java
index 9a9bd5c8..785d9cd6 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingUnit.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingUnit.java
@@ -1,8 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
-import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
-import org.citygml4j.core.util.geometry.GeometryFactory;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import java.io.Serial;
import java.util.ArrayList;
@@ -16,7 +14,7 @@ public class BuildingUnit extends AbstractBuildingSubdivision {
private final List storeys = new ArrayList<>();
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
for (Storey storey : storeys) {
storey.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
index 0714863e..bbfa5551 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
@@ -21,6 +21,7 @@ package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.writer.CityGMLWriterUtils;
@@ -147,7 +148,7 @@ public class CityDoctorModel {
folder.mkdirs();
createFeatureStream().forEach(co -> {
Map> polygonMap = new EnumMap<>(Lod.class);
- Check c = new AbstractVisitor() {
+ CheckableVisitor c = new AbstractVisitor() {
@Override
public void check(Geometry geom) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurniture.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurniture.java
index b92ace7b..8e7002b2 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurniture.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurniture.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -21,7 +21,7 @@ public class CityFurniture extends CityObject {
private org.citygml4j.core.model.cityfurniture.CityFurniture cgmlCityFurniture;
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityObject.java
index 1291a8de..19eadd87 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityObject.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder;
import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor;
@@ -185,7 +185,7 @@ public abstract class CityObject extends GmlElement {
public abstract FeatureType getFeatureType();
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java
index c5c99a5e..3aa734d4 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java
@@ -18,8 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.Checkable;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.tesselation.JoglTesselator;
import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon;
@@ -180,7 +180,7 @@ public class ConcretePolygon extends Polygon {
* citydoctor2.check.Check)
*/
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObject.java
index e55e6363..34a0d022 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObject.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -33,7 +33,7 @@ public class GenericCityObject extends CityObject {
private final List boundarySurfaceList = new ArrayList<>();
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java
index 5525115c..fde39d1a 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java
@@ -18,8 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
-
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.math.Triangle3d;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon;
@@ -206,7 +205,7 @@ public class Geometry extends GmlElement {
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryHolder.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryHolder.java
index 49e07c81..b5819762 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryHolder.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryHolder.java
@@ -1,13 +1,10 @@
package de.hft.stuttgart.citydoctor2.datastructure;
import java.io.Serial;
-import java.util.List;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import org.citygml4j.core.model.core.ImplicitGeometry;
-import de.hft.stuttgart.citydoctor2.check.Check;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
-import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.math.TransformationMatrix;
/**
@@ -58,7 +55,7 @@ public class ImplicitGeometryHolder extends Geometry {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
prototypeGeometry.accept(c);
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Installation.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Installation.java
index 7258df5a..cbe4459b 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Installation.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Installation.java
@@ -18,8 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
-
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -130,7 +129,7 @@ public class Installation extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LandObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LandObject.java
index d4ab4aca..d77b9e51 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LandObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LandObject.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -89,7 +89,7 @@ public class LandObject extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinearRing.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinearRing.java
index 2f48bcdc..88d62167 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinearRing.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinearRing.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.math.*;
import java.io.Serial;
@@ -226,7 +226,7 @@ public class LinearRing extends GmlElement {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinkedPolygon.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinkedPolygon.java
index 1c940c1a..c34adb1c 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinkedPolygon.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinkedPolygon.java
@@ -21,6 +21,7 @@ package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon;
import javafx.scene.paint.Color;
@@ -105,7 +106,7 @@ public class LinkedPolygon extends Polygon {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
// linked polygons are not checked
setValidated(true);
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Opening.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Opening.java
index 19990e96..b64487de 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Opening.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Opening.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -114,7 +114,7 @@ public class Opening extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObject.java
index b27b485e..7400731b 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObject.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import javafx.scene.paint.Color;
import org.citygml4j.core.model.relief.ReliefFeature;
@@ -42,7 +42,7 @@ public class ReliefObject extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Storey.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Storey.java
index c5cea9b5..7978ade2 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Storey.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Storey.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import org.citygml4j.core.util.geometry.GeometryFactory;
@@ -22,7 +22,7 @@ public class Storey extends AbstractBuildingSubdivision {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
for (BuildingUnit buildingUnit : buildingUnits) {
buildingUnit.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TinObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TinObject.java
index 4fde9c9e..e01a7bf9 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TinObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TinObject.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -50,7 +50,7 @@ public class TinObject extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeature.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeature.java
index 8b41c699..1e52a55d 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeature.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeature.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import org.citygml4j.core.model.deprecated.transportation.TransportationComplex;
import org.citygml4j.core.model.transportation.Railway;
import org.citygml4j.core.model.transportation.Road;
@@ -76,7 +76,7 @@ public class TopLevelTransportFeature extends TransportationSpace {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceObject.java
index fb60aa91..bfc06e71 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceObject.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import org.citygml4j.core.model.core.AbstractSpace;
@@ -95,7 +95,7 @@ public class TrafficSpaceObject extends TransportationObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpace.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpace.java
index 16e7ef94..38811717 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpace.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpace.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import org.citygml4j.core.model.core.AbstractSpace;
@@ -121,7 +121,7 @@ public abstract class TransportationSpace extends TransportationObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Tunnel.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Tunnel.java
index 54013c4a..72c7b341 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Tunnel.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Tunnel.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty;
import org.citygml4j.core.model.tunnel.TunnelInstallation;
import org.citygml4j.core.model.tunnel.TunnelInstallationProperty;
@@ -27,7 +27,7 @@ public class Tunnel extends AbstractTunnel {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelConstructiveElement.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelConstructiveElement.java
index d1f896b9..0284f2b5 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelConstructiveElement.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelConstructiveElement.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -87,7 +87,7 @@ public class TunnelConstructiveElement extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vegetation.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vegetation.java
index 79aec2a5..62d75bb7 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vegetation.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vegetation.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -27,15 +27,12 @@ import org.citygml4j.core.model.vegetation.AbstractVegetationObject;
import org.citygml4j.core.model.vegetation.PlantCover;
import org.citygml4j.core.model.vegetation.SolitaryVegetationObject;
import org.citygml4j.core.util.geometry.GeometryFactory;
-import org.xmlobjects.gml.model.geometry.aggregates.MultiSolid;
-import org.xmlobjects.gml.model.geometry.aggregates.MultiSolidProperty;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import org.xmlobjects.gml.model.geometry.primitives.Solid;
import org.xmlobjects.gml.model.geometry.primitives.SolidProperty;
import java.io.Serial;
-import java.util.Collections;
/**
* Representation of CityGML vegetation objects
@@ -172,7 +169,7 @@ public class Vegetation extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/WaterObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/WaterObject.java
index 278a8fad..035d303e 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/WaterObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/WaterObject.java
@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
@@ -141,7 +141,7 @@ public class WaterObject extends CityObject {
}
@Override
- public void accept(Check c) {
+ public void accept(CheckableVisitor c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
--
GitLab
From 3358f91e398e261b3b9f32f02b709c1caf250d87 Mon Sep 17 00:00:00 2001
From: Riegel
Date: Thu, 15 May 2025 13:49:08 +0200
Subject: [PATCH 03/14] Refactor: Rename AbstractVisitor
---
.../{AbstractVisitor.java => CheckableUtilsVisitor.java} | 7 +------
.../hft/stuttgart/citydoctor2/check/CheckableVisitor.java | 2 +-
.../citydoctor2/datastructure/CityDoctorModel.java | 6 ++----
.../utils/visitors/CheckableErrorCollector.java | 4 ++--
.../citydoctor2/utils/visitors/CityObjectCollector.java | 4 ++--
.../utils/visitors/ClearMetaInformationVisitor.java | 4 ++--
.../utils/visitors/ClearVisitorResultsVisitor.java | 4 ++--
.../utils/visitors/ContainsAnyErrorVisitor.java | 4 ++--
.../citydoctor2/utils/visitors/ContainsErrorVisitor.java | 4 ++--
.../citydoctor2/utils/visitors/GmlGeometryRebuilder.java | 4 ++--
.../utils/visitors/PrepareForCheckingVisitor.java | 4 ++--
.../utils/visitors/UnsetGeometriesVisitor.java | 4 ++--
.../citydoctor2/datastructure/AbstractBuildingTest.java | 8 ++++----
.../citydoctor2/datastructure/AbstractRoomTest.java | 4 ++--
.../citydoctor2/datastructure/AbstractTunnelTest.java | 4 ++--
.../citydoctor2/datastructure/BoundarySurfaceTest.java | 8 ++++----
.../citydoctor2/datastructure/BridgeObjectTest.java | 8 ++++----
.../stuttgart/citydoctor2/datastructure/BuildingTest.java | 4 ++--
.../citydoctor2/datastructure/CityObjectTest.java | 4 ++--
.../citydoctor2/datastructure/GenericCityObjectTest.java | 4 ++--
.../stuttgart/citydoctor2/datastructure/GeometryTest.java | 4 ++--
.../citydoctor2/datastructure/ImplicitGeometryTest.java | 4 ++--
.../citydoctor2/datastructure/ReliefObjectTest.java | 4 ++--
.../citydoctor2/datastructure/TinObjectTest.java | 4 ++--
.../datastructure/TopLevelTransportFeatureTest.java | 4 ++--
.../citydoctor2/datastructure/TrafficSpaceTest.java | 4 ++--
.../datastructure/TransportationSpaceTest.java | 4 ++--
.../stuttgart/citydoctor2/datastructure/WaterTest.java | 4 ++--
.../java/de/hft/stuttgart/citydoctor2/healer/Healer.java | 4 ++--
.../stuttgart/citydoctor2/healing/HealMissingSolid.java | 4 ++--
.../citydoctor2/healer/genetic/NonPlanarGenetic.java | 4 ++--
31 files changed, 66 insertions(+), 73 deletions(-)
rename CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/{AbstractVisitor.java => CheckableUtilsVisitor.java} (94%)
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableUtilsVisitor.java
similarity index 94%
rename from CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java
rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableUtilsVisitor.java
index 4f7840b2..5bb111d3 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableUtilsVisitor.java
@@ -37,11 +37,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.TinObject;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
-import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
/**
*
@@ -52,7 +47,7 @@ import java.util.Set;
* @author Matthias Betz
*
*/
-public abstract non-sealed class AbstractVisitor implements CheckableVisitor {
+public abstract non-sealed class CheckableUtilsVisitor implements CheckableVisitor {
//Util Visitors have no dependencies
public boolean canExecute(Checkable c) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
index 17651c34..2ef630fa 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
@@ -20,7 +20,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
-public sealed interface CheckableVisitor permits Check, AbstractVisitor {
+public sealed interface CheckableVisitor permits Check, CheckableUtilsVisitor {
boolean isValidator();
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
index bbfa5551..41b2b003 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
@@ -18,10 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
-import de.hft.stuttgart.citydoctor2.check.Check;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
-import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.writer.CityGMLWriterUtils;
@@ -148,7 +146,7 @@ public class CityDoctorModel {
folder.mkdirs();
createFeatureStream().forEach(co -> {
Map> polygonMap = new EnumMap<>(Lod.class);
- CheckableVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
@Override
public void check(Geometry geom) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java
index b9125972..1f6c05c3 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checkable;
@@ -9,7 +9,7 @@ import java.util.List;
/**
* This Visitor collects all CheckErrors in the datastructure of a checkable.
*/
-public class CheckableErrorCollector extends AbstractVisitor {
+public class CheckableErrorCollector extends CheckableUtilsVisitor {
List errors;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java
index 18cf4d14..a504462f 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import java.util.HashSet;
@@ -9,7 +9,7 @@ import java.util.Set;
/**
* This Visitor collects all sub-CityObjects that are in the datastructure of a CityObject (including itself) in a Set.
*/
-public class CityObjectCollector extends AbstractVisitor {
+public class CityObjectCollector extends CheckableUtilsVisitor {
private final Set objects = new HashSet<>();
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java
index 06d45396..42449d74 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java
@@ -1,12 +1,12 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
/**
* This Visitor removes the metadata created by the {@link PrepareForCheckingVisitor} for the low-memory consumption mode.
*/
-public class ClearMetaInformationVisitor extends AbstractVisitor {
+public class ClearMetaInformationVisitor extends CheckableUtilsVisitor {
@Override
public void check(Geometry geometry) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearVisitorResultsVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearVisitorResultsVisitor.java
index 2fd476bd..15436a7e 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearVisitorResultsVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearVisitorResultsVisitor.java
@@ -1,12 +1,12 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.Checkable;
/**
* This Visitor removes the check results from a CityObject and the objects in its datastructure.
*/
-public class ClearVisitorResultsVisitor extends AbstractVisitor {
+public class ClearVisitorResultsVisitor extends CheckableUtilsVisitor {
@Override
public void check(Checkable checkable) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java
index ba50579a..5dd9cf01 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound;
import de.hft.stuttgart.citydoctor2.utils.ThrowUtils;
@@ -11,7 +11,7 @@ import de.hft.stuttgart.citydoctor2.utils.ThrowUtils;
* This visitor's check method terminates early by throwing an unchecked {@link CheckErrorFound},
* use {@link #checkObject(Checkable) ContainsAnyErrorVisitor.checkObject(Checkable)} to handle the Throwable.
*/
-public class ContainsAnyErrorVisitor extends AbstractVisitor {
+public class ContainsAnyErrorVisitor extends CheckableUtilsVisitor {
/**
* Checks if a Checkable, or any Object in its datastructure, contains any error.
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java
index 8a5237a1..e4e4ee7f 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound;
@@ -12,7 +12,7 @@ import de.hft.stuttgart.citydoctor2.utils.ThrowUtils;
* This visitor's check method terminates early by throwing an unchecked {@link CheckErrorFound},
* use {@link #checkObject(Checkable, CheckId) ContainsAnyErrorVisitor.checkObject(Checkable, CheckId)} to handle the Throwable.
*/
-public class ContainsErrorVisitor extends AbstractVisitor {
+public class ContainsErrorVisitor extends CheckableUtilsVisitor {
private CheckId checkId;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java
index f4f6583f..fb199eac 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import org.citygml4j.core.util.geometry.GeometryFactory;
@@ -11,7 +11,7 @@ import java.util.Objects;
* This Visitor recreates the Geometries of the original CityGml object from the associated Geometries in CityDoctor's
* internal model.
*/
-public class GmlGeometryRebuilder extends AbstractVisitor {
+public class GmlGeometryRebuilder extends CheckableUtilsVisitor {
private final GeometryFactory factory;
private final ParserConfiguration config;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java
index 849a1db6..8cc4d2e4 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java
@@ -1,12 +1,12 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
/**
* This Visitor prepares the {@link Geometry Geometries} in a Checkable for low-memory consumption mode.
*/
-public class PrepareForCheckingVisitor extends AbstractVisitor {
+public class PrepareForCheckingVisitor extends CheckableUtilsVisitor {
@Override
public void check(Geometry geom) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java
index 2150678a..4c65708a 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java
@@ -1,13 +1,13 @@
package de.hft.stuttgart.citydoctor2.utils.visitors;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
/**
* This Visitor removes the GmlGeometries from the linked original GmlObjects in a CityObject's datastructure to reduce
* memory bloat.
*/
-public class UnsetGeometriesVisitor extends AbstractVisitor {
+public class UnsetGeometriesVisitor extends CheckableUtilsVisitor {
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
index 1ed3ff10..d5e23ce6 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
@@ -40,7 +40,7 @@ import org.mockito.Mockito;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import org.xmlobjects.gml.model.geometry.primitives.SolidProperty;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -59,7 +59,7 @@ public class AbstractBuildingTest {
AtomicInteger abCounter = new AtomicInteger(0);
AtomicInteger bsCounter = new AtomicInteger(0);
AtomicInteger biCounter = new AtomicInteger(0);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
@Override
public void check(AbstractBuilding ab) {
@@ -76,7 +76,7 @@ public class AbstractBuildingTest {
assertEquals(1, bsCounter.intValue());
assertEquals(0, biCounter.intValue());
- AbstractVisitor c2 = new AbstractVisitor() {
+ CheckableUtilsVisitor c2 = new CheckableUtilsVisitor() {
@Override
public void check(Installation bi) {
@@ -106,7 +106,7 @@ public class AbstractBuildingTest {
ab.addBoundarySurface(mockBSurface);
ab.addGeometry(mockGeometry);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
ab.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java
index f512b264..dcab6ed3 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -50,7 +50,7 @@ public class AbstractRoomTest {
abRoom.addBoundarySurface(mockBoundarySurface);
abRoom.addGeometry(geometry);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
abRoom.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java
index 2ff3bb94..4deedb36 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -52,7 +52,7 @@ public class AbstractTunnelTest {
at.addBoundarySurface(mockBoundarySurface);
at.addGeometry(mockGeometry);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
at.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
index 3e9da364..b414511d 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
@@ -41,7 +41,7 @@ import org.junit.Test;
import org.mockito.Mockito;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -58,7 +58,7 @@ public class BoundarySurfaceTest {
Opening oMock = Mockito.mock(Opening.class);
bs.addOpening(oMock);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
bs.accept(c);
@@ -71,7 +71,7 @@ public class BoundarySurfaceTest {
Opening oMock = Mockito.mock(Opening.class);
bs.addOpening(oMock);
AtomicInteger bsCounter = new AtomicInteger(0);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
@Override
public void check(BoundarySurface bs) {
@@ -89,7 +89,7 @@ public class BoundarySurfaceTest {
Opening oMock = Mockito.mock(Opening.class);
bs.addOpening(oMock);
AtomicInteger bsCounter = new AtomicInteger(0);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
@Override
public void check(BridgeObject bo) {
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
index a6ca3c82..57d27a17 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
@@ -39,7 +39,7 @@ import org.citygml4j.core.util.geometry.GeometryFactory;
import org.citygml4j.core.visitor.ObjectVisitor;
import org.junit.Test;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -58,7 +58,7 @@ public class BridgeObjectTest {
bo.addBoundarySurface(new BoundarySurface(null));
AtomicInteger boCounter = new AtomicInteger(0);
AtomicInteger bsCounter = new AtomicInteger(0);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
@Override
public void check(BridgeObject bo) {
@@ -75,7 +75,7 @@ public class BridgeObjectTest {
assertEquals(1, bsCounter.intValue());
AtomicInteger boCounter2 = new AtomicInteger(0);
- c = new AbstractVisitor() {
+ c = new CheckableUtilsVisitor() {
};
bo.accept(c);
assertEquals(0, boCounter2.intValue());
@@ -101,7 +101,7 @@ public class BridgeObjectTest {
bo.addBoundarySurface(bsMock);
bo.addGeometry(geomMock);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
bo.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
index 92de7c89..7a499874 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
@@ -26,7 +26,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import org.citygml4j.core.model.construction.RoofSurface;
import org.junit.Test;
import org.mockito.Mockito;
@@ -151,7 +151,7 @@ public class BuildingTest {
bp.addStorey(mockStorey);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
b.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
index b833060b..b1ec552f 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -31,7 +31,7 @@ public class CityObjectTest {
Geometry mockGeometry = mock(Geometry.class);
co.addGeometry(mockGeometry);
- AbstractVisitor check = new AbstractVisitor() {
+ CheckableUtilsVisitor check = new CheckableUtilsVisitor() {
};
co.accept(check);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java
index 313d8810..bca67f1c 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -30,7 +30,7 @@ public class GenericCityObjectTest {
gco.addBoundarySurface(mockSurface);
gco.addGeometry(mockGeometry);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
gco.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
index 7d96f09e..fadaa5cb 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
@@ -32,7 +32,7 @@ import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.utils.visitors.ClearVisitorResultsVisitor;
import org.citygml4j.core.model.construction.AbstractConstructionSurface;
import org.citygml4j.core.model.construction.WallSurface;
@@ -63,7 +63,7 @@ public class GeometryTest {
geom.addPolygon(mockPolygon);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
geom.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryTest.java
index f2b39f9e..42d0f073 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -150,7 +150,7 @@ public class ImplicitGeometryTest {
AtomicInteger loCounter = new AtomicInteger(0);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
@Override
public void check(Polygon lo) {
loCounter.incrementAndGet();
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java
index 44ca0393..80656460 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import org.citygml4j.core.model.relief.ReliefFeature;
import org.junit.Test;
@@ -16,7 +16,7 @@ public class ReliefObjectTest {
TinObject mockTin = mock(TinObject.class);
relief.addComponent(mockTin);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
relief.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java
index 56541bf4..a93e87b9 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -32,7 +32,7 @@ public class TinObjectTest {
tin.addGeometry(mockGeometry);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
tin.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java
index 859c4f10..f5bd5b8e 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -54,7 +54,7 @@ public class TopLevelTransportFeatureTest {
top.addSection(mockSection);
top.addIntersection(mockIntersection);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
top.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java
index 4967e60a..42759031 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -37,7 +37,7 @@ public class TrafficSpaceTest {
TrafficAreaObject areaMock = mock(TrafficAreaObject.class);
tso.addTrafficArea(areaMock);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
tso.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java
index 0b77c6e3..827f9896 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -32,7 +32,7 @@ public class TransportationSpaceTest {
space.addTrafficSpace(mockSpace);
space.addAuxTrafficSpace(auxMockSpace);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
space.accept(c);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java
index 217d75f2..3dd2077d 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java
@@ -1,6 +1,6 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
@@ -33,7 +33,7 @@ public class WaterTest {
water.addBoundarySurface(bsMock);
water.addBoundarySurface(bsMock2);
- AbstractVisitor c = new AbstractVisitor() {
+ CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
};
water.accept(c);
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java
index 5342f752..98a7c883 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healer/Healer.java
@@ -26,7 +26,7 @@ import org.citygml4j.xml.writer.CityGMLWriteException;
import org.citygml4j.xml.writer.CityGMLWriter;
import de.hft.stuttgart.citydoctor2.CityDoctorValidation;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
@@ -353,7 +353,7 @@ public class Healer {
private void filterOutDuplicateVertices(CityObject co) {
Map map = new HashMap<>();
- co.accept(new AbstractVisitor() {
+ co.accept(new CheckableUtilsVisitor() {
@Override
public void check(LinearRing ring) {
for (int i = 0; i < ring.getVertices().size(); i++) {
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
index b02cb681..090e7f73 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
@@ -24,7 +24,7 @@ import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingID;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
@@ -103,7 +103,7 @@ public class HealMissingSolid implements HealingMethod {
private List collectPolygons(CityObject co) {
List polygons = new ArrayList<>();
- AbstractVisitor polygonCheck = new AbstractVisitor() {
+ CheckableUtilsVisitor polygonCheck = new CheckableUtilsVisitor() {
@Override
public void check(Polygon p) {
if (!p.isLink()) {
diff --git a/CityDoctorParent/Extensions/CityDoctorHealerGenetic/src/test/java/de/hft/stuttgart/citydoctor2/healer/genetic/NonPlanarGenetic.java b/CityDoctorParent/Extensions/CityDoctorHealerGenetic/src/test/java/de/hft/stuttgart/citydoctor2/healer/genetic/NonPlanarGenetic.java
index f5d4b880..f4711cc3 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealerGenetic/src/test/java/de/hft/stuttgart/citydoctor2/healer/genetic/NonPlanarGenetic.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealerGenetic/src/test/java/de/hft/stuttgart/citydoctor2/healer/genetic/NonPlanarGenetic.java
@@ -37,7 +37,7 @@ import java.util.Random;
import java.util.Set;
import Jama.EigenvalueDecomposition;
-import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
@@ -446,7 +446,7 @@ public class NonPlanarGenetic {
private Polygon findPolygonInFeature(CityObject copy, Polygon polygon) {
Polygon[] result = new Polygon[1];
- copy.accept(new AbstractVisitor() {
+ copy.accept(new CheckableUtilsVisitor() {
@Override
public void check(Polygon p) {
--
GitLab
From bc6e18178a659103e15ea252b6c311ba4d793084 Mon Sep 17 00:00:00 2001
From: Riegel
Date: Tue, 20 May 2025 09:03:43 +0200
Subject: [PATCH 04/14] Docs: Update javadoc
---
.../hft/stuttgart/citydoctor2/check/Check.java | 15 +++++++--------
.../check/CheckableUtilsVisitor.java | 18 ++++++++++++------
.../citydoctor2/check/CheckableVisitor.java | 3 +++
3 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java
index 5b26eae3..e81369a1 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java
@@ -103,22 +103,21 @@ public abstract non-sealed class Check implements CheckableVisitor {
*
* @return true if it validates, false otherwise
*/
+ @Override
public boolean isValidator() {
return true;
}
/**
- * Checks whether the check can be executed on this checkable, meaning the
- * checkable or its content can not have any error of any check dependent on
- * this check.
- * If the check cannot be executed a CheckResult will be created with the
+ * Checks whether this Check can execute on the Checkable, meaning the Checkable contains no error from
+ * this Check's dependencies and is applicable to this Check.
+ * If the check cannot be executed due to not fulfilling the dependencies a CheckResult will be created with the
* ResultStatus = DEPENDENCIES_NOT_MET.
- *
+ *
* @param c the checkable
- * @param crc container for all check results
- * @return true if the check can be executed, false if the checkable itself or
- * one of its containing checkables have an error.
+ * @return true if the check can be executed, false otherwise
*/
+ @Override
public boolean canExecute(Checkable c) {
// ignore objects where this check doesn't apply to
if (!canBeApplied(c)) {
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableUtilsVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableUtilsVisitor.java
index 5bb111d3..0034c8c0 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableUtilsVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableUtilsVisitor.java
@@ -40,16 +40,22 @@ import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
/**
*
- * This class serves as a Parent for non-validating checks that want to use the CheckEngine's Visitor-pattern for the
- * implementation of utility functions like e.g. collecting the sub-CityObjects in a Feature.
- *
- *
- * @author Matthias Betz
+ * This class serves as the base for CheckableVisitors which fulfill utility functions, like e.g. collecting all
+ * sub-CityObjects in the datastructure of a CityObject.
+ *
+ * Visitors extending from this class will not change the validated-flag of the visited Checkables.
*
*/
public abstract non-sealed class CheckableUtilsVisitor implements CheckableVisitor {
- //Util Visitors have no dependencies
+ /**
+ * This function is used for checking of dependencies in {@link Check}. Since UtilsVisitors do not have
+ * dependencies this function will always return true.
+ *
+ * @param c a Checkable
+ * @return true
+ */
+ @Override
public boolean canExecute(Checkable c) {
return true;
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
index 2ef630fa..7830c5a8 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckableVisitor.java
@@ -22,6 +22,9 @@ import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
public sealed interface CheckableVisitor permits Check, CheckableUtilsVisitor {
+ /**
+ * Returns whether a Checkable should be flagged as validated after accepting this Visitor.
+ */
boolean isValidator();
boolean canExecute(Checkable c);
--
GitLab
From 31710fb8c3770fe9b46ffd1c192c1b8b940d66f7 Mon Sep 17 00:00:00 2001
From: Matthias Betz
Date: Wed, 11 Jun 2025 14:20:59 +0200
Subject: [PATCH 05/14] add check error hierarchy extending visitor and add
abstract visitor
---
.../check/AbstractErrorVisitor.java | 210 ++++++++++++++++++
.../citydoctor2/check/ErrorVisitor.java | 21 +-
.../check/QualityAdeErrorVisitor.java | 2 +-
.../AllPolygonsWrongOrientationError.java | 26 +--
.../error/ConsecutivePointSameError.java | 21 +-
.../check/error/DegeneratedRingError.java | 20 +-
.../MultipleConnectedComponentsError.java | 17 +-
.../check/error/NestedRingError.java | 20 +-
.../check/error/NonManifoldEdgeError.java | 19 +-
.../check/error/NonManifoldVertexError.java | 17 +-
.../NonPlanarPolygonDistancePlaneError.java | 21 +-
.../NonPlanarPolygonNormalsDeviation.java | 21 +-
.../check/error/NullAreaError.java | 26 +--
.../check/error/PlanarityError.java | 29 +++
.../check/error/PointTouchesEdgeError.java | 21 +-
.../citydoctor2/check/error/PolygonError.java | 44 ++++
.../check/error/PolygonHoleOutsideError.java | 17 +-
.../PolygonInteriorDisconnectedError.java | 17 +-
.../error/PolygonIntersectingRingsError.java | 21 +-
.../error/PolygonSameOrientationError.java | 21 +-
.../error/PolygonWrongOrientationError.java | 17 +-
.../check/error/RingDuplicatePointError.java | 31 ++-
.../error/RingEdgeIntersectionError.java | 23 +-
.../citydoctor2/check/error/RingError.java | 44 ++++
.../check/error/RingNotClosedError.java | 28 +--
.../error/RingSelfIntersectionError.java | 30 +++
.../check/error/RingTooFewPointsError.java | 22 +-
.../citydoctor2/check/error/SolidError.java | 42 ++++
.../check/error/SolidNotClosedError.java | 17 +-
.../check/error/SolidSelfIntError.java | 21 +-
.../check/error/TooFewPolygonsError.java | 23 +-
.../citydoctor2/datastructure/Edge.java | 3 -
.../datastructure/LinkedPolygon.java | 3 -
.../citydoctor2/utils/CheckErrorFound.java | 6 +-
.../citydoctor2/gui/ListErrorVisitor.java | 30 +++
.../gui/tree/ErrorItemVisitor.java | 6 +-
36 files changed, 631 insertions(+), 326 deletions(-)
create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractErrorVisitor.java
create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PlanarityError.java
create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonError.java
create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingError.java
create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingSelfIntersectionError.java
create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidError.java
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractErrorVisitor.java
new file mode 100644
index 00000000..6ddc35c4
--- /dev/null
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractErrorVisitor.java
@@ -0,0 +1,210 @@
+package de.hft.stuttgart.citydoctor2.check;
+
+import de.hft.stuttgart.citydoctor2.check.error.AllPolygonsWrongOrientationError;
+import de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError;
+import de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError;
+import de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError;
+import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
+import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
+import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
+import de.hft.stuttgart.citydoctor2.check.error.MultipleConnectedComponentsError;
+import de.hft.stuttgart.citydoctor2.check.error.NestedRingError;
+import de.hft.stuttgart.citydoctor2.check.error.NonManifoldEdgeError;
+import de.hft.stuttgart.citydoctor2.check.error.NonManifoldVertexError;
+import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonDistancePlaneError;
+import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonNormalsDeviation;
+import de.hft.stuttgart.citydoctor2.check.error.NotCeilingError;
+import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
+import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
+import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
+import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
+import de.hft.stuttgart.citydoctor2.check.error.PlanarityError;
+import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonSameOrientationError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonWithoutSurfaceError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
+import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
+import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
+import de.hft.stuttgart.citydoctor2.check.error.RingError;
+import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
+import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntersectionError;
+import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError;
+import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
+import de.hft.stuttgart.citydoctor2.check.error.SolidError;
+import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
+import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
+import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError;
+import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
+import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
+
+public abstract class AbstractErrorVisitor implements ErrorVisitor {
+
+ @Override
+ public void visit(RingError err) {
+ }
+
+ @Override
+ public void visit(PolygonError err) {
+ }
+
+ @Override
+ public void visit(RingSelfIntersectionError err) {
+ }
+
+ @Override
+ public void visit(PlanarityError err) {
+ }
+
+ @Override
+ public void visit(PolygonHoleOutsideError err) {
+ }
+
+ @Override
+ public void visit(NonManifoldEdgeError err) {
+ }
+
+ @Override
+ public void visit(MultipleConnectedComponentsError err) {
+ }
+
+ @Override
+ public void visit(NestedRingError err) {
+ }
+
+ @Override
+ public void visit(NonManifoldVertexError err) {
+ }
+
+ @Override
+ public void visit(PolygonWrongOrientationError err) {
+ }
+
+ @Override
+ public void visit(PolygonSameOrientationError err) {
+ }
+
+ @Override
+ public void visit(SolidNotClosedError err) {
+ }
+
+ @Override
+ public void visit(DependenciesNotMetError err) {
+ }
+
+ @Override
+ public void visit(UnknownCheckError err) {
+ }
+
+ @Override
+ public void visit(RingNotClosedError err) {
+ }
+
+ @Override
+ public void visit(ConsecutivePointSameError err) {
+ }
+
+ @Override
+ public void visit(AllPolygonsWrongOrientationError err) {
+ }
+
+ @Override
+ public void visit(PolygonInteriorDisconnectedError err) {
+ }
+
+ @Override
+ public void visit(NullAreaError err) {
+ }
+
+ @Override
+ public void visit(RingTooFewPointsError err) {
+ }
+
+ @Override
+ public void visit(NonPlanarPolygonNormalsDeviation err) {
+ }
+
+ @Override
+ public void visit(NonPlanarPolygonDistancePlaneError err) {
+ }
+
+ @Override
+ public void visit(PolygonIntersectingRingsError err) {
+ }
+
+ @Override
+ public void visit(SolidSelfIntError err) {
+ }
+
+ @Override
+ public void visit(TooFewPolygonsError err) {
+ }
+
+ @Override
+ public void visit(RingDuplicatePointError err) {
+ }
+
+ @Override
+ public void visit(RingEdgeIntersectionError err) {
+ }
+
+ @Override
+ public void visit(PointTouchesEdgeError err) {
+ }
+
+ @Override
+ public void visit(NotCeilingError err) {
+ }
+
+ @Override
+ public void visit(NotFloorError err) {
+ }
+
+ @Override
+ public void visit(NotWallError err) {
+ }
+
+ @Override
+ public void visit(NotGroundError err) {
+ }
+
+ @Override
+ public void visit(CheckError err) {
+ }
+
+ @Override
+ public void visit(SchematronError err) {
+ }
+
+ @Override
+ public void visit(SurfaceUnfragmentedError err) {
+ }
+
+ @Override
+ public void visit(DegeneratedRingError err) {
+ }
+
+ @Override
+ public void visit(AttributeMissingError err) {
+ }
+
+ @Override
+ public void visit(AttributeValueWrongError err) {
+ }
+
+ @Override
+ public void visit(AttributeInvalidError err) {
+ }
+
+ @Override
+ public void visit(PolygonWithoutSurfaceError err) {
+ }
+
+ @Override
+ public void visit(SolidError err) {
+ }
+
+}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java
index 23121363..23f95ee0 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java
@@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError;
import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
+import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
import de.hft.stuttgart.citydoctor2.check.error.MultipleConnectedComponentsError;
import de.hft.stuttgart.citydoctor2.check.error.NestedRingError;
@@ -35,7 +36,9 @@ import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
+import de.hft.stuttgart.citydoctor2.check.error.PlanarityError;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
@@ -44,13 +47,15 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonWithoutSurfaceError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
+import de.hft.stuttgart.citydoctor2.check.error.RingError;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
+import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
+import de.hft.stuttgart.citydoctor2.check.error.SolidError;
import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError;
-import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
@@ -62,7 +67,15 @@ import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
*
*/
public interface ErrorVisitor {
+
+ public void visit(RingError err);
+ public void visit(PolygonError err);
+
+ public void visit(RingSelfIntersectionError err);
+
+ public void visit(PlanarityError err);
+
public void visit(PolygonHoleOutsideError err);
public void visit(NonManifoldEdgeError err);
@@ -119,8 +132,6 @@ public interface ErrorVisitor {
public void visit(NotGroundError err);
- public void visit(CheckError err);
-
public void visit(SchematronError err);
public void visit(SurfaceUnfragmentedError err);
@@ -134,5 +145,9 @@ public interface ErrorVisitor {
public void visit(AttributeInvalidError err);
public void visit(PolygonWithoutSurfaceError err);
+
+ public void visit(CheckError err);
+
+ public void visit(SolidError err);
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java
index 3a7e2dc7..741dfc57 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java
@@ -89,7 +89,7 @@ import de.hft.stuttgart.quality.model.types.SolidSelfIntersectionError;
import de.hft.stuttgart.quality.model.types.SolidTooFewPolygonsError;
import de.hft.stuttgart.quality.model.types.ValidationResult;
-public class QualityAdeErrorVisitor implements ErrorVisitor {
+public class QualityAdeErrorVisitor extends AbstractErrorVisitor {
private final ValidationResult res;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/AllPolygonsWrongOrientationError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/AllPolygonsWrongOrientationError.java
index 38958e9d..3f595e01 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/AllPolygonsWrongOrientationError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/AllPolygonsWrongOrientationError.java
@@ -18,9 +18,9 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
-import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
@@ -28,47 +28,35 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
-import java.io.Serial;
-
/**
* Error when all polygons are oriented wrong.
*
* @author Matthias Betz
*
*/
-public class AllPolygonsWrongOrientationError implements CheckError {
+public class AllPolygonsWrongOrientationError extends SolidError {
@Serial
private static final long serialVersionUID = 2263993313732858840L;
- private final Geometry geom;
-
public AllPolygonsWrongOrientationError(Geometry geom) {
- this.geom = geom;
- }
-
- public Geometry getGeometry() {
- return geom;
+ super(geom);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "AllPolygonsWrongOrientationError [geom=" + geom + "]";
- }
-
- @Override
- public void report(ErrorReport report) {
- report.add(geom);
+ return "AllPolygonsWrongOrientationError [geom=" + getGeometry() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/ConsecutivePointSameError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/ConsecutivePointSameError.java
index 0e93cc11..bb9d92f8 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/ConsecutivePointSameError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/ConsecutivePointSameError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
-import java.io.Serial;
-
/**
* When two points are too close to each other and are consecutive in a linear
* ring, this error is created.
@@ -38,25 +37,20 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class ConsecutivePointSameError implements CheckError {
+public class ConsecutivePointSameError extends RingError {
@Serial
private static final long serialVersionUID = -6355935751554777494L;
- private final LinearRing lr;
private final Vertex p1;
private final Vertex p2;
public ConsecutivePointSameError(LinearRing lr, Vertex p1, Vertex p2) {
- this.lr = lr;
+ super(lr);
this.p1 = p1;
this.p2 = p2;
}
- public LinearRing getRing() {
- return lr;
- }
-
public Vertex getVertex1() {
return p1;
}
@@ -67,22 +61,23 @@ public class ConsecutivePointSameError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "ConsecutivePointSameError [lr=" + lr + ", p1=" + p1 + ", p2=" + p2 + "]";
+ return "ConsecutivePointSameError [lr=" + getRing() + ", p1=" + p1 + ", p2=" + p2 + "]";
}
@Override
public void report(ErrorReport report) {
- report.add(lr);
+ super.report(report);
report.add("duplicate point 1", p1);
report.add("duplicate point 2", p2);
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/DegeneratedRingError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/DegeneratedRingError.java
index 4735816b..49c4ec77 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/DegeneratedRingError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/DegeneratedRingError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -28,37 +29,30 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
-import java.io.Serial;
-
-public class DegeneratedRingError implements CheckError {
+public class DegeneratedRingError extends RingSelfIntersectionError {
@Serial
private static final long serialVersionUID = 865493182529055651L;
- private final LinearRing lr;
-
public DegeneratedRingError(LinearRing lr) {
- this.lr = lr;
+ super(lr);
}
- public LinearRing getRing() {
- return lr;
- }
-
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public void report(ErrorReport report) {
report.add("type", "degenerated ring");
- report.add(getRing());
+ super.report(report);
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/MultipleConnectedComponentsError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/MultipleConnectedComponentsError.java
index 6edc7ae2..76aa81fa 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/MultipleConnectedComponentsError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/MultipleConnectedComponentsError.java
@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -39,30 +38,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz
*
*/
-public class MultipleConnectedComponentsError implements CheckError {
+public class MultipleConnectedComponentsError extends SolidError {
@Serial
private static final long serialVersionUID = 2152069835068857036L;
- private final Geometry geom;
private final List> components;
public MultipleConnectedComponentsError(Geometry geom, List> components) {
- this.geom = geom;
+ super(geom);
this.components = components;
}
- public Geometry getGeometry() {
- return geom;
- }
-
public List> getComponents() {
return components;
}
@Override
public void report(ErrorReport report) {
- report.add(geom);
+ super.report(report);
for (int i = 0; i < components.size(); i++) {
List polygons = components.get(i);
report.addPolygons("component nr: " + (i + 1), polygons);
@@ -71,17 +65,18 @@ public class MultipleConnectedComponentsError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "MultipleConnectedComponentsError [geom=" + geom + ", components=" + components + "]";
+ return "MultipleConnectedComponentsError [geom=" + getGeometry() + ", components=" + components + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NestedRingError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NestedRingError.java
index 2f900dd5..9aa5638b 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NestedRingError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NestedRingError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -29,32 +30,26 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
-import java.io.Serial;
-
/**
* If an inner ring is with in the boundaries of another, this error is created.
*
* @author Matthias Betz
*
*/
-public class NestedRingError implements CheckError {
+public class NestedRingError extends PolygonError {
@Serial
private static final long serialVersionUID = -3396113374745830193L;
- private final Polygon p;
private final LinearRing innerRing;
private final LinearRing withinRing;
public NestedRingError(Polygon p, LinearRing innerRing, LinearRing withinRing) {
- this.p = p;
+ super(p);
this.innerRing = innerRing;
this.withinRing = withinRing;
}
- public Polygon getPolygon() {
- return p;
- }
public LinearRing getInnerRing() {
return innerRing;
@@ -66,23 +61,24 @@ public class NestedRingError implements CheckError {
@Override
public void report(ErrorReport report) {
- report.add(p);
+ super.report(report);
report.add(innerRing);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "NestedRingError [p=" + p + ", innerRing=" + innerRing + "]";
+ return "NestedRingError [p=" + getPolygon() + ", innerRing=" + innerRing + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldEdgeError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldEdgeError.java
index 47b77342..5697dee5 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldEdgeError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldEdgeError.java
@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -38,48 +37,44 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
* @author Matthias Betz
*
*/
-public class NonManifoldEdgeError implements CheckError {
+public class NonManifoldEdgeError extends SolidError {
@Serial
private static final long serialVersionUID = -6742948557014332402L;
private final List edges;
- private final Geometry geom;
public NonManifoldEdgeError(Geometry geom, List edges) {
+ super(geom);
this.edges = edges;
- this.geom = geom;
}
public List getEdges() {
return edges;
}
- public Geometry getGeometry() {
- return geom;
- }
-
@Override
public void report(ErrorReport report) {
- report.add(geom);
+ super.report(report);
for (Edge e : edges) {
report.add(e);
}
}
-
+
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "ManifoldEdgeError [edges=" + edges + ", geom=" + geom + "]";
+ return "ManifoldEdgeError [edges=" + edges + ", geom=" + getGeometry() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldVertexError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldVertexError.java
index f9005c64..a7fd574e 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldVertexError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldVertexError.java
@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -40,17 +39,16 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
* @author Matthias Betz
*
*/
-public class NonManifoldVertexError implements CheckError {
+public class NonManifoldVertexError extends SolidError {
@Serial
private static final long serialVersionUID = -3915669943428175777L;
private final List> components;
- private final Geometry geom;
private final Vertex v;
public NonManifoldVertexError(Geometry geom, List> components, Vertex v) {
- this.geom = geom;
+ super(geom);
this.components = components;
this.v = v;
}
@@ -59,17 +57,13 @@ public class NonManifoldVertexError implements CheckError {
return components;
}
- public Geometry getGeometry() {
- return geom;
- }
-
public Vertex getVertex() {
return v;
}
@Override
public void report(ErrorReport report) {
- report.add(geom);
+ super.report(report);
report.add(v);
for (int i = 0; i < components.size(); i++) {
List polygons = components.get(i);
@@ -83,17 +77,18 @@ public class NonManifoldVertexError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "NonManifoldVertexError [components=" + components + ", geom=" + geom + ", v=" + v + "]";
+ return "NonManifoldVertexError [components=" + components + ", geom=" + getGeometry() + ", v=" + v + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonPlanarPolygonDistancePlaneError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonPlanarPolygonDistancePlaneError.java
index 7cb1d2df..2ebfb2f2 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonPlanarPolygonDistancePlaneError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonPlanarPolygonDistancePlaneError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -31,8 +32,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.math.Plane;
import de.hft.stuttgart.citydoctor2.utils.Localization;
-import java.io.Serial;
-
/**
* Error object for planarity errors containing the polygon, the regression
* plane and the distance to the plane.
@@ -40,18 +39,17 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class NonPlanarPolygonDistancePlaneError implements CheckError {
+public class NonPlanarPolygonDistancePlaneError extends PlanarityError {
@Serial
private static final long serialVersionUID = -3504364055236383519L;
- private final Polygon p;
private final double distance;
private final Vertex v;
private final Plane plane;
public NonPlanarPolygonDistancePlaneError(Polygon p, double distance, Vertex v, Plane plane) {
- this.p = p;
+ super(p);
this.distance = distance;
this.v = v;
this.plane = plane;
@@ -61,10 +59,6 @@ public class NonPlanarPolygonDistancePlaneError implements CheckError {
return plane;
}
- public Polygon getPolygon() {
- return p;
- }
-
public double getDistance() {
return distance;
}
@@ -75,24 +69,25 @@ public class NonPlanarPolygonDistancePlaneError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public void report(ErrorReport report) {
- report.add(p);
+ super.report(report);
report.add(v);
report.add(Localization.getText("DistanceError.distanceFromPlane"), distance);
}
@Override
public String toString() {
- return "NonPlanarPolygonDistancePlaneError [p=" + p + ", distance=" + distance + ", v=" + v + ", plane=" + plane + "]";
+ return "NonPlanarPolygonDistancePlaneError [p=" + getPolygon() + ", distance=" + distance + ", v=" + v + ", plane=" + plane + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonPlanarPolygonNormalsDeviation.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonPlanarPolygonNormalsDeviation.java
index 388a026b..8ca5d235 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonPlanarPolygonNormalsDeviation.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NonPlanarPolygonNormalsDeviation.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -28,8 +29,6 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
-import java.io.Serial;
-
/**
* When the normal of the triangles created from the triangulation of the
* polygon have a too large angle between them, this error is created.
@@ -37,46 +36,42 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class NonPlanarPolygonNormalsDeviation implements CheckError {
+public class NonPlanarPolygonNormalsDeviation extends PlanarityError {
@Serial
private static final long serialVersionUID = 69073161885265794L;
- private final Polygon p;
private final double deviation;
public NonPlanarPolygonNormalsDeviation(Polygon p, double deviation) {
- this.p = p;
+ super(p);
this.deviation = deviation;
}
- public Polygon getPolygon() {
- return p;
- }
-
public double getDeviation() {
return deviation;
}
@Override
public void report(ErrorReport report) {
- report.add(p);
+ super.report(report);
report.add("normal deviation (in rad)", deviation);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "NormalDeviationError [p=" + p + ", deviation=" + deviation + "]";
+ return "NormalDeviationError [p=" + getPolygon() + ", deviation=" + deviation + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NullAreaError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NullAreaError.java
index d3fdbe6e..a51eaa49 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NullAreaError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/NullAreaError.java
@@ -18,9 +18,9 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
-import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
@@ -28,47 +28,35 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
-import java.io.Serial;
-
/**
* When a linear ring has a near zero area this error is created.
*
* @author Matthias Betz
*
*/
-public class NullAreaError implements CheckError {
+public class NullAreaError extends RingError {
@Serial
private static final long serialVersionUID = 1358910429039553687L;
- private final LinearRing lr;
-
public NullAreaError(LinearRing lr) {
- this.lr = lr;
- }
-
- public LinearRing getRing() {
- return lr;
- }
-
- @Override
- public void report(ErrorReport report) {
- report.add(lr);
+ super(lr);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "NullAreaError [lr=" + lr + "]";
+ return "NullAreaError [lr=" + getRing() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PlanarityError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PlanarityError.java
new file mode 100644
index 00000000..dbf60d4f
--- /dev/null
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PlanarityError.java
@@ -0,0 +1,29 @@
+package de.hft.stuttgart.citydoctor2.check.error;
+
+import java.io.Serial;
+
+import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
+import de.hft.stuttgart.citydoctor2.check.HealingMethod;
+import de.hft.stuttgart.citydoctor2.check.ModificationListener;
+import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+
+public abstract class PlanarityError extends PolygonError {
+
+ @Serial
+ private static final long serialVersionUID = 4229597996236974570L;
+
+ public PlanarityError(Polygon poly) {
+ super(poly);
+ }
+
+ @Override
+ public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
+ }
+
+ @Override
+ public boolean accept(HealingMethod method, ModificationListener l) {
+ return super.accept(method, l) || method.visit(this, l);
+ }
+
+}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PointTouchesEdgeError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PointTouchesEdgeError.java
index 79cfb879..d58ae614 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PointTouchesEdgeError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PointTouchesEdgeError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
-import java.io.Serial;
-
/**
* If a point of a linear ring touches an edge of the same ring it is considered
* self intersecting and this error object is created.
@@ -39,25 +38,20 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class PointTouchesEdgeError implements CheckError {
+public class PointTouchesEdgeError extends RingSelfIntersectionError {
@Serial
private static final long serialVersionUID = 3277456707271748954L;
- private final LinearRing lr;
private final Edge e;
private final Vertex v;
public PointTouchesEdgeError(LinearRing lr, Edge e, Vertex v) {
- this.lr = lr;
+ super(lr);
this.e = e;
this.v = v;
}
- public LinearRing getRing() {
- return lr;
- }
-
public Edge getEdge() {
return e;
}
@@ -69,24 +63,25 @@ public class PointTouchesEdgeError implements CheckError {
@Override
public void report(ErrorReport report) {
report.add("type", "point touches edge");
- report.add(lr);
+ super.report(report);
report.add(v);
report.add(e);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "PointTouchesEdgeError [lr=" + lr + ", e=" + e + ", v=" + v + "]";
+ return "PointTouchesEdgeError [lr=" + getRing() + ", e=" + e + ", v=" + v + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonError.java
new file mode 100644
index 00000000..c71bd3b6
--- /dev/null
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonError.java
@@ -0,0 +1,44 @@
+package de.hft.stuttgart.citydoctor2.check.error;
+
+import java.io.Serial;
+import java.util.Objects;
+
+import de.hft.stuttgart.citydoctor2.check.CheckError;
+import de.hft.stuttgart.citydoctor2.check.ErrorReport;
+import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
+import de.hft.stuttgart.citydoctor2.check.HealingMethod;
+import de.hft.stuttgart.citydoctor2.check.ModificationListener;
+import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+
+public abstract class PolygonError implements CheckError {
+
+ @Serial
+ private static final long serialVersionUID = 7277982425092189736L;
+
+ private final Polygon poly;
+
+ public PolygonError(Polygon poly) {
+ Objects.requireNonNull(poly);
+ this.poly = poly;
+ }
+
+ public Polygon getPolygon() {
+ return poly;
+ }
+
+ @Override
+ public void report(ErrorReport report) {
+ report.add(poly);
+ }
+
+ @Override
+ public void accept(ErrorVisitor errorVisitor) {
+ errorVisitor.visit(this);
+ }
+
+ @Override
+ public boolean accept(HealingMethod method, ModificationListener l) {
+ return method.visit(this, l);
+ }
+
+}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonHoleOutsideError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonHoleOutsideError.java
index c290554f..294fb2fd 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonHoleOutsideError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonHoleOutsideError.java
@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -39,40 +38,36 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz
*
*/
-public class PolygonHoleOutsideError implements CheckError {
+public class PolygonHoleOutsideError extends PolygonError {
@Serial
private static final long serialVersionUID = -4522153084655775231L;
private final List holesOutside;
- private final Polygon p;
public PolygonHoleOutsideError(Polygon p, List holesOutside) {
- this.p = p;
+ super(p);
this.holesOutside = holesOutside;
}
- public Polygon getPolygon() {
- return p;
- }
-
public List getHolesOutside() {
return holesOutside;
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public void report(ErrorReport report) {
- report.add(p);
+ super.report(report);
for (LinearRing lr : holesOutside) {
report.add(lr);
}
@@ -80,7 +75,7 @@ public class PolygonHoleOutsideError implements CheckError {
@Override
public String toString() {
- return "HoleOutsideError [holesOutside=" + holesOutside + ", p=" + p + "]";
+ return "HoleOutsideError [holesOutside=" + holesOutside + ", p=" + getPolygon() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonInteriorDisconnectedError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonInteriorDisconnectedError.java
index 0cb0c51d..4e48fb13 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonInteriorDisconnectedError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonInteriorDisconnectedError.java
@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -39,30 +38,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz
*
*/
-public class PolygonInteriorDisconnectedError implements CheckError {
+public class PolygonInteriorDisconnectedError extends PolygonError {
@Serial
private static final long serialVersionUID = 511849016699842395L;
- private final Polygon p;
private final List connectedRings;
public PolygonInteriorDisconnectedError(Polygon p, List connectedRings) {
- this.p = p;
+ super(p);
this.connectedRings = connectedRings;
}
- public Polygon getPolygon() {
- return p;
- }
-
public List getConnectedRings() {
return connectedRings;
}
@Override
public void report(ErrorReport report) {
- report.add(p);
+ super.report(report);
report.add("connected rings", "");
for (LinearRing lr : connectedRings) {
report.add(lr);
@@ -71,17 +65,18 @@ public class PolygonInteriorDisconnectedError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "InteriorDisconnectedError [p=" + p + ", connectedRings=" + connectedRings + "]";
+ return "InteriorDisconnectedError [polygon=" + getPolygon() + ", connectedRings=" + connectedRings + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonIntersectingRingsError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonIntersectingRingsError.java
index 771fb1d5..aa3d5a8a 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonIntersectingRingsError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonIntersectingRingsError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.utils.SerializablePair;
-import java.io.Serial;
-
/**
* If the exterior ring and interior rings are intersecting each other, it
* results in a polygon self intersection and this error is created.
@@ -39,47 +38,43 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class PolygonIntersectingRingsError implements CheckError {
+public class PolygonIntersectingRingsError extends PolygonError {
@Serial
private static final long serialVersionUID = -7043521697085991901L;
- private final Polygon p;
private final SerializablePair intersectingRings;
public PolygonIntersectingRingsError(Polygon p, SerializablePair intersectingRings) {
- this.p = p;
+ super(p);
this.intersectingRings = intersectingRings;
}
- public Polygon getPolygon() {
- return p;
- }
-
public SerializablePair getIntersectingRings() {
return intersectingRings;
}
@Override
public void report(ErrorReport report) {
- report.add(p);
+ super.report(report);
report.add(intersectingRings.getValue0());
report.add(intersectingRings.getValue1());
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "PolygonSelfIntError [p=" + p + ", intersectingRings=" + intersectingRings + "]";
+ return "PolygonSelfIntError [polygon=" + getPolygon() + ", intersectingRings=" + intersectingRings + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonSameOrientationError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonSameOrientationError.java
index 3904d526..17780d7e 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonSameOrientationError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonSameOrientationError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
-import java.io.Serial;
-
/**
* If the interior rings have the same orientation as the exterior ring, this
* error is created.
@@ -38,46 +37,42 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class PolygonSameOrientationError implements CheckError {
+public class PolygonSameOrientationError extends PolygonError {
@Serial
private static final long serialVersionUID = -6192337889977667459L;
- private final Polygon p;
private final LinearRing innerRing;
public PolygonSameOrientationError(Polygon p, LinearRing inner) {
- this.p = p;
+ super(p);
this.innerRing = inner;
}
- public Polygon getPolygon() {
- return p;
- }
-
public LinearRing getInnerRing() {
return innerRing;
}
@Override
public void report(ErrorReport report) {
- report.add(p);
+ super.report(report);
report.add(innerRing);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "SameOrientationError [p=" + p + ", innerRing=" + innerRing + "]";
+ return "SameOrientationError [polygon=" + getPolygon() + ", innerRing=" + innerRing + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonWrongOrientationError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonWrongOrientationError.java
index 10633e1f..601f5161 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonWrongOrientationError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/PolygonWrongOrientationError.java
@@ -23,7 +23,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -43,30 +42,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz
*
*/
-public class PolygonWrongOrientationError implements CheckError {
+public class PolygonWrongOrientationError extends SolidError {
@Serial
private static final long serialVersionUID = -3006643655816847097L;
private final List edges;
- private final Geometry g;
public PolygonWrongOrientationError(Geometry g, List edges) {
+ super(g);
this.edges = edges;
- this.g = g;
}
public List getEdges() {
return edges;
}
- public Geometry getGeometry() {
- return g;
- }
-
@Override
public void report(ErrorReport report) {
- report.add(g);
+ super.report(report);
Set possiblePolygons = new HashSet<>();
for (Edge e : edges) {
possiblePolygons.addAll(e.getAdjacentPolygons());
@@ -76,17 +70,18 @@ public class PolygonWrongOrientationError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "PolygonWrongOrientationError [edges=" + edges + ", g=" + g + "]";
+ return "PolygonWrongOrientationError [edges=" + edges + ", g=" + getGeometry() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingDuplicatePointError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingDuplicatePointError.java
index aaef3e1f..3a2a865c 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingDuplicatePointError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingDuplicatePointError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
-import java.io.Serial;
-
/**
* When a point is repeated in a linear ring, but is not consecutive. This
* results in a self intersection of the ring and this error object is created.
@@ -38,30 +37,20 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class RingDuplicatePointError implements CheckError {
+public class RingDuplicatePointError extends RingSelfIntersectionError {
@Serial
private static final long serialVersionUID = 7208982075173209953L;
- private final LinearRing r;
private final Vertex v1;
private final Vertex v2;
public RingDuplicatePointError(LinearRing r, Vertex v1, Vertex v2) {
- this.r = r;
+ super(r);
this.v1 = v1;
this.v2 = v2;
}
- @Override
- public void accept(ErrorVisitor errorVisitor) {
- errorVisitor.visit(this);
- }
-
- public LinearRing getRing() {
- return r;
- }
-
public Vertex getVertex1() {
return v1;
}
@@ -70,21 +59,27 @@ public class RingDuplicatePointError implements CheckError {
return v2;
}
+ @Override
+ public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
+ errorVisitor.visit(this);
+ }
+
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public void report(ErrorReport report) {
- report.add(r);
+ super.report(report);
report.add("duplicate point 1", v1);
report.add("duplicate point 2", v2);
}
@Override
public String toString() {
- return "DuplicatePointError [r=" + r + ", v1=" + v1 + ", v2=" + v2 + "]";
+ return "DuplicatePointError [r=" + getRing() + ", v1=" + v1 + ", v2=" + v2 + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingEdgeIntersectionError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingEdgeIntersectionError.java
index 45572d7c..96c7e9f4 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingEdgeIntersectionError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingEdgeIntersectionError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
-import java.io.Serial;
-
/**
* When two edges of the same linear ring are intersecting with each other this
* error object is created.
@@ -39,7 +38,7 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class RingEdgeIntersectionError implements CheckError {
+public class RingEdgeIntersectionError extends RingSelfIntersectionError {
@Serial
private static final long serialVersionUID = 4923311259469198172L;
@@ -47,20 +46,15 @@ public class RingEdgeIntersectionError implements CheckError {
private final Edge e1;
private final Edge e2;
private final Vector3d intersection;
- private final LinearRing lr;
public RingEdgeIntersectionError(LinearRing lr, Edge e1, Edge e2, Vector3d intersection) {
- if (e1 == null || e2 == null || lr == null || intersection == null) {
+ super(lr);
+ if (e1 == null || e2 == null || intersection == null) {
throw new IllegalArgumentException("Parameters may not be null");
}
this.e1 = e1;
this.e2 = e2;
this.intersection = intersection;
- this.lr = lr;
- }
-
- public LinearRing getRing() {
- return lr;
}
public Edge getEdge1() {
@@ -78,7 +72,7 @@ public class RingEdgeIntersectionError implements CheckError {
@Override
public void report(ErrorReport report) {
report.add("type", "edge intersection");
- report.add(lr);
+ super.report(report);
report.add(e1);
report.add(e2);
report.add("intersection point", intersection);
@@ -86,17 +80,18 @@ public class RingEdgeIntersectionError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "EdgeIntersectionError [e1=" + e1 + ", e2=" + e2 + ", intersection=" + intersection + ", lr=" + lr + "]";
+ return "EdgeIntersectionError [e1=" + e1 + ", e2=" + e2 + ", intersection=" + intersection + ", lr=" + getRing() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingError.java
new file mode 100644
index 00000000..45dad9c1
--- /dev/null
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingError.java
@@ -0,0 +1,44 @@
+package de.hft.stuttgart.citydoctor2.check.error;
+
+import java.io.Serial;
+import java.util.Objects;
+
+import de.hft.stuttgart.citydoctor2.check.CheckError;
+import de.hft.stuttgart.citydoctor2.check.ErrorReport;
+import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
+import de.hft.stuttgart.citydoctor2.check.HealingMethod;
+import de.hft.stuttgart.citydoctor2.check.ModificationListener;
+import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
+
+public abstract class RingError implements CheckError {
+
+ @Serial
+ private static final long serialVersionUID = -1579410065481104979L;
+
+ private final LinearRing ring;
+
+ public RingError(LinearRing ring) {
+ Objects.requireNonNull(ring);
+ this.ring = ring;
+ }
+
+ public LinearRing getRing() {
+ return ring;
+ }
+
+ @Override
+ public void report(ErrorReport report) {
+ report.add(ring);
+ }
+
+ @Override
+ public void accept(ErrorVisitor errorVisitor) {
+ errorVisitor.visit(this);
+ }
+
+ @Override
+ public boolean accept(HealingMethod method, ModificationListener l) {
+ return method.visit(this, l);
+ }
+
+}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingNotClosedError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingNotClosedError.java
index 80477a15..6e20a396 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingNotClosedError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingNotClosedError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -28,8 +29,6 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
-import java.io.Serial;
-
/**
* If the first and last point of a linear ring are not the same, this error is
* created.
@@ -37,39 +36,34 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
-public class RingNotClosedError implements CheckError {
-
- @Serial
- private static final long serialVersionUID = 2554099996830579201L;
-
- private final LinearRing ring;
+public class RingNotClosedError extends RingError {
public RingNotClosedError(LinearRing ring) {
- this.ring = ring;
- }
-
- public LinearRing getRing() {
- return ring;
+ super(ring);
}
+ @Serial
+ private static final long serialVersionUID = 2554099996830579201L;
+
@Override
public void report(ErrorReport report) {
- report.add(ring);
+ super.report(report);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "RingNotClosedError [ring=" + ring + "]";
+ return "RingNotClosedError [ring=" + getRing() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingSelfIntersectionError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingSelfIntersectionError.java
new file mode 100644
index 00000000..04e3ce18
--- /dev/null
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingSelfIntersectionError.java
@@ -0,0 +1,30 @@
+package de.hft.stuttgart.citydoctor2.check.error;
+
+import java.io.Serial;
+
+import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
+import de.hft.stuttgart.citydoctor2.check.HealingMethod;
+import de.hft.stuttgart.citydoctor2.check.ModificationListener;
+import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
+
+public abstract class RingSelfIntersectionError extends RingError {
+
+ @Serial
+ private static final long serialVersionUID = -4528714710581552235L;
+
+ public RingSelfIntersectionError(LinearRing ring) {
+ super(ring);
+ }
+
+ @Override
+ public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
+ errorVisitor.visit(this);
+ }
+
+ @Override
+ public boolean accept(HealingMethod method, ModificationListener l) {
+ return super.accept(method, l) || method.visit(this, l);
+ }
+
+}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingTooFewPointsError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingTooFewPointsError.java
index 4922a454..10b32a7f 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingTooFewPointsError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/RingTooFewPointsError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -28,47 +29,40 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
-import java.io.Serial;
-
/**
* If a linear ring has less than 4 distinct points, it is has too few points.
*
* @author Matthias Betz
*
*/
-public class RingTooFewPointsError implements CheckError {
+public class RingTooFewPointsError extends RingError {
@Serial
private static final long serialVersionUID = 7207518573842743261L;
- private final LinearRing lr;
-
public RingTooFewPointsError(LinearRing lr) {
- this.lr = lr;
- }
-
- public LinearRing getRing() {
- return lr;
+ super(lr);
}
@Override
public void report(ErrorReport report) {
- report.add(lr);
+ super.report(report);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "TooFewPointsError [lr=" + lr + "]";
+ return "TooFewPointsError [ring=" + getRing() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidError.java
new file mode 100644
index 00000000..490772ab
--- /dev/null
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidError.java
@@ -0,0 +1,42 @@
+package de.hft.stuttgart.citydoctor2.check.error;
+
+import java.io.Serial;
+
+import de.hft.stuttgart.citydoctor2.check.CheckError;
+import de.hft.stuttgart.citydoctor2.check.ErrorReport;
+import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
+import de.hft.stuttgart.citydoctor2.check.HealingMethod;
+import de.hft.stuttgart.citydoctor2.check.ModificationListener;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
+
+public abstract class SolidError implements CheckError {
+
+ @Serial
+ private static final long serialVersionUID = 4251342593056430783L;
+
+ private Geometry geom;
+
+ public SolidError(Geometry geom) {
+ this.geom = geom;
+ }
+
+ public Geometry getGeometry() {
+ return geom;
+ }
+
+ @Override
+ public void report(ErrorReport report) {
+ report.add(geom);
+ }
+
+ @Override
+ public void accept(ErrorVisitor errorVisitor) {
+ errorVisitor.visit(this);
+ }
+
+ @Override
+ public boolean accept(HealingMethod method, ModificationListener l) {
+ return method.visit(this, l);
+ }
+
+}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidNotClosedError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidNotClosedError.java
index f1b449be..a3d19b6d 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidNotClosedError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidNotClosedError.java
@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -39,21 +38,16 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
* @author Matthias Betz
*
*/
-public class SolidNotClosedError implements CheckError {
+public class SolidNotClosedError extends SolidError {
@Serial
private static final long serialVersionUID = 8256385219885788891L;
private final List errorEdges;
- private final Geometry g;
public SolidNotClosedError(Geometry g, List errorEdges) {
+ super(g);
this.errorEdges = errorEdges;
- this.g = g;
- }
-
- public Geometry getGeometry() {
- return g;
}
public List getErrorEdges() {
@@ -62,23 +56,24 @@ public class SolidNotClosedError implements CheckError {
@Override
public void report(ErrorReport report) {
- report.add(g);
+ super.report(report);
report.addEdges("open edges", errorEdges);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "SolidNotClosedError [errorEdges=" + errorEdges + ", g=" + g + "]";
+ return "SolidNotClosedError [errorEdges=" + errorEdges + ", g=" + getGeometry() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidSelfIntError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidSelfIntError.java
index a6793925..c7961ab4 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidSelfIntError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SolidSelfIntError.java
@@ -21,9 +21,7 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
-import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
@@ -38,46 +36,37 @@ import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection;
* @author Matthias Betz
*
*/
-public class SolidSelfIntError implements CheckError {
+public class SolidSelfIntError extends SolidError {
@Serial
private static final long serialVersionUID = -4479936555545861422L;
- private final Geometry g;
private final List intersections;
public SolidSelfIntError(Geometry g, List intersections) {
- this.g = g;
+ super(g);
this.intersections = intersections;
}
- public Geometry getGeometry() {
- return g;
- }
-
- @Override
- public void report(ErrorReport report) {
- report.add(g);
- }
-
public List getIntersections() {
return intersections;
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "SolidSelfIntError [g=" + g + ", intersection=" + intersections + "]";
+ return "SolidSelfIntError [g=" + getGeometry() + ", intersection=" + intersections + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/TooFewPolygonsError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/TooFewPolygonsError.java
index 4f0e8294..09429a27 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/TooFewPolygonsError.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/TooFewPolygonsError.java
@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
-import de.hft.stuttgart.citydoctor2.check.CheckError;
+import java.io.Serial;
+
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
@@ -28,48 +29,42 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
-import java.io.Serial;
-
/**
* When a geometry has less than 4 polygons, it cannot form a valid solid.
*
* @author Matthias Betz
*
*/
-public class TooFewPolygonsError implements CheckError {
+public class TooFewPolygonsError extends SolidError {
@Serial
private static final long serialVersionUID = 5800732409355221678L;
- private final Geometry g;
-
public TooFewPolygonsError(Geometry g) {
- this.g = g;
+ super(g);
}
- public Geometry getGeometry() {
- return g;
- }
@Override
public void report(ErrorReport report) {
- report.add(g);
- report.add("number of polygons", g.getPolygons().size());
+ super.report(report);
+ report.add("number of polygons", getGeometry().getPolygons().size());
}
@Override
public void accept(ErrorVisitor errorVisitor) {
+ super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
- return method.visit(this, l);
+ return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
- return "TooFewPolygonsError [g=" + g + "]";
+ return "TooFewPolygonsError [g=" + getGeometry() + "]";
}
@Override
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Edge.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Edge.java
index 0af9643f..df116505 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Edge.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Edge.java
@@ -48,9 +48,6 @@ public class Edge implements Serializable {
this.to = to;
}
- private Edge() {
- }
-
public Vertex getFrom() {
return from;
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinkedPolygon.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinkedPolygon.java
index c34adb1c..d915d8dc 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinkedPolygon.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinkedPolygon.java
@@ -44,9 +44,6 @@ public class LinkedPolygon extends Polygon {
private Geometry parent;
private ConcretePolygon poly;
- private LinkedPolygon() {
- }
-
/**
* @param poly polygon this is linked to
* @param parent the parent of the linked polygon
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CheckErrorFound.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CheckErrorFound.java
index cd7d13cd..602373e8 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CheckErrorFound.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CheckErrorFound.java
@@ -1,12 +1,16 @@
package de.hft.stuttgart.citydoctor2.utils;
+import java.io.Serial;
+
/**
* This Throwable signals that a requested CheckError was found.
*/
public class CheckErrorFound extends Throwable {
+ @Serial
+ private static final long serialVersionUID = -2066876428396230230L;
- public CheckErrorFound() {
+ public CheckErrorFound() {
super("CheckError was found", null, true, false);
}
}
diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java
index ae8c3112..34f7132a 100644
--- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java
+++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java
@@ -22,7 +22,9 @@ import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
+import de.hft.stuttgart.citydoctor2.check.error.PlanarityError;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
+import de.hft.stuttgart.citydoctor2.check.error.PolygonError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
@@ -31,9 +33,12 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonWithoutSurfaceError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
+import de.hft.stuttgart.citydoctor2.check.error.RingError;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
+import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
+import de.hft.stuttgart.citydoctor2.check.error.SolidError;
import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError;
@@ -265,4 +270,29 @@ public class ListErrorVisitor implements ErrorVisitor {
public void visit(PolygonWithoutSurfaceError err) {
controller.highlight(err.getPolygon(), geom);
}
+
+ @Override
+ public void visit(RingError err) {
+ // nothing to display
+ }
+
+ @Override
+ public void visit(PolygonError err) {
+ // nothing to display
+ }
+
+ @Override
+ public void visit(RingSelfIntersectionError err) {
+ // nothing to display
+ }
+
+ @Override
+ public void visit(PlanarityError err) {
+ // nothing to display
+ }
+
+ @Override
+ public void visit(SolidError err) {
+ // nothing to display
+ }
}
diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java
index 943954cc..1f23d576 100644
--- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java
+++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java
@@ -2,13 +2,14 @@ package de.hft.stuttgart.citydoctor2.gui.tree;
import java.util.List;
+import de.hft.stuttgart.citydoctor2.check.AbstractErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
-import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.error.AllPolygonsWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError;
import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
+import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
import de.hft.stuttgart.citydoctor2.check.error.MultipleConnectedComponentsError;
import de.hft.stuttgart.citydoctor2.check.error.NestedRingError;
@@ -36,7 +37,6 @@ import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError;
-import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon;
@@ -57,7 +57,7 @@ import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection;
import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection.IntersectionType;
import javafx.scene.control.TreeItem;
-public class ErrorItemVisitor implements ErrorVisitor {
+public class ErrorItemVisitor extends AbstractErrorVisitor {
private static String nameOfAttribute = Localization.getText("ErrorItemVisitor.nameOfAttribute") + ": ";
private static String childId = Localization.getText("ErrorItemVisitor.childId") + ": ";
--
GitLab
From e5c41d2458e6b47296adecfa7295e87dfb4f2cb7 Mon Sep 17 00:00:00 2001
From: Matthias Betz
Date: Fri, 27 Jun 2025 10:50:45 +0200
Subject: [PATCH 06/14] clear global errors on rerun add more information in
global error table
---
.../main/java/de/hft/stuttgart/citydoctor2/check/Checker.java | 3 +++
.../hft/stuttgart/citydoctor2/gui/CityDoctorController.java | 4 ++--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
index 6f742f23..174a7d29 100644
--- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
+++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
@@ -620,6 +620,9 @@ public class Checker {
private void checkCityModel(CityDoctorModel model, ProgressListener l) {
Stream features = model.createFeatureStream();
float featureSum = model.getNumberOfFeatures();
+ // clear global errors
+ model.getGlobalErrors().clear();
+
// stupid lamda with final variable restrictions
int[] currentFeature = new int[1];
features.forEach(co -> {
diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
index 7c80b871..b969320b 100644
--- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
+++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
@@ -1030,7 +1030,7 @@ public class CityDoctorController {
updateTree(mainWindow.getPolygonsView().getRoot());
for (CheckError e : model.getGlobalErrors()) {
if (e instanceof SchematronError se) {
- mainWindow.getGlobalErrorsView().getItems().add(se.getErrorIdString());
+ mainWindow.getGlobalErrorsView().getItems().add(se.getErrorIdString() + " - " + se.getNameOfAttribute());
}
}
renderer.refresh();
@@ -1083,7 +1083,7 @@ public class CityDoctorController {
updateTree(mainWindow.getPolygonsView().getRoot());
for (CheckError e : model.getGlobalErrors()) {
if (e instanceof SchematronError se) {
- mainWindow.getGlobalErrorsView().getItems().add(se.getErrorIdString());
+ mainWindow.getGlobalErrorsView().getItems().add(se.getErrorIdString() + " - " + se.getNameOfAttribute());
}
}
renderer.refresh();
--
GitLab
From a01b9086dc2d9588e29a49b057379c3981daaecf Mon Sep 17 00:00:00 2001
From: Riegel
Date: Fri, 4 Jul 2025 16:17:19 +0200
Subject: [PATCH 07/14] Fix: Add parsing of Building ConstructiveElements
---
.../datastructure/AbstractBuilding.java | 13 ++
.../BuildingConstructiveElement.java | 167 ++++++++++++++++++
.../citygml3/Citygml3FeatureMapper.java | 30 ++++
.../citydoctor2/gui/CityDoctorController.java | 16 ++
4 files changed, 226 insertions(+)
create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingConstructiveElement.java
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuilding.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuilding.java
index 4d6029f9..f1e033ba 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuilding.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuilding.java
@@ -53,6 +53,7 @@ public abstract class AbstractBuilding extends CityObject {
private final List buildingStoreys = new ArrayList<>();
private final List buildingUnits = new ArrayList<>();
private final List buildingRoomFurnitureList = new ArrayList<>();
+ private final List buildingConstructiveElements = new ArrayList<>();
private org.citygml4j.core.model.building.AbstractBuilding ab;
/**
@@ -74,6 +75,10 @@ public abstract class AbstractBuilding extends CityObject {
return FeatureType.BUILDING;
}
+ public List getConstructiveElements() {
+ return buildingConstructiveElements;
+ }
+
@Override
public void unsetGmlGeometries() {
ab.setLod1Solid(null);
@@ -171,6 +176,9 @@ public abstract class AbstractBuilding extends CityObject {
for (BoundarySurface bs : boundarySurfaceList) {
bs.accept(c);
}
+ for (BuildingConstructiveElement bce : buildingConstructiveElements) {
+ bce.accept(c);
+ }
for (BuildingRoom br : buildingRooms) {
br.accept(c);
}
@@ -219,6 +227,11 @@ public abstract class AbstractBuilding extends CityObject {
buildingUnit.setParent(this);
}
+ public void addConstructiveElement(BuildingConstructiveElement constructiveElement) {
+ buildingConstructiveElements.add(constructiveElement);
+ constructiveElement.setParent(this);
+ }
+
public void setGmlObject(org.citygml4j.core.model.building.AbstractBuilding ab) {
this.ab = ab;
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingConstructiveElement.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingConstructiveElement.java
new file mode 100644
index 00000000..06763aeb
--- /dev/null
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingConstructiveElement.java
@@ -0,0 +1,167 @@
+package de.hft.stuttgart.citydoctor2.datastructure;
+
+import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
+import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
+import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
+import javafx.scene.paint.Color;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty;
+import org.citygml4j.core.model.deprecated.bridge.DeprecatedPropertiesOfBridgeConstructiveElement;
+import org.citygml4j.core.util.geometry.GeometryFactory;
+import org.xmlobjects.gml.model.geometry.GeometryProperty;
+import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface;
+import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
+import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface;
+import org.xmlobjects.gml.model.geometry.primitives.Solid;
+import org.xmlobjects.gml.model.geometry.primitives.SolidProperty;
+import org.xmlobjects.gml.model.geometry.primitives.SurfaceProperty;
+
+import java.io.Serial;
+import java.util.ArrayList;
+import java.util.List;
+
+public class BuildingConstructiveElement extends CityObject {
+
+ private static final Logger logger = LogManager.getLogger(BuildingConstructiveElement.class);
+
+ private static final String CANNOT_ADD = "Cannot add ";
+
+ @Serial
+ private static final long serialVersionUID = 7353233899458901155L;
+
+ private final org.citygml4j.core.model.building.BuildingConstructiveElement gmlBuildingElement;
+ private final List boundarySurfaceList = new ArrayList<>();
+ private AbstractBuilding parent;
+
+ public BuildingConstructiveElement(org.citygml4j.core.model.building.BuildingConstructiveElement gmlObject) {
+ this.gmlBuildingElement = gmlObject;
+ }
+
+ public void setParent(AbstractBuilding parent) {
+ this.parent = parent;
+ }
+
+ public AbstractBuilding getParent() {
+ return parent;
+ }
+
+ @Override
+ public Color getRenderColor() {
+ return parent.getRenderColor().brighter();
+ }
+
+ @Override
+ public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) {
+ // only handles CityGML2 for now
+ // unknown which CityGML is handled here
+ // need context information to decide
+ for (Geometry geom : getGeometries()) {
+ if (geom instanceof ImplicitGeometryHolder) {
+ continue;
+ }
+ switch (geom.getType()) {
+ case SOLID:
+ Solid solid = CityGmlUtils.createSolid(geom, factory, config);
+ setSolidAccordingToLod(geom, solid);
+ break;
+ case MULTI_SURFACE:
+ MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config);
+ setMultiSurfaceAccordingToLod(geom, ms);
+ break;
+ }
+ }
+ }
+
+ @Override
+ public void accept(CheckableVisitor c) {
+ super.accept(c);
+ if (c.canExecute(this)) {
+ c.check(this);
+ }
+ for (BoundarySurface bs : boundarySurfaceList) {
+ bs.accept(c);
+ }
+ }
+
+ private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) {
+ if (bs.getGeometries().isEmpty()) {
+ for (AbstractSpaceBoundaryProperty bsp : gmlBuildingElement.getBoundaries()) {
+ if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) {
+ logger.warn("Found empty boundary surface: {}, removing from BridgeConstructiveElement", bs.getGmlId());
+ gmlBuildingElement.getBoundaries().remove(bsp);
+ break;
+ }
+ }
+ return;
+ }
+ bs.reCreateGeometries(factory, config);
+ }
+
+
+ private void setSolidAccordingToLod(Geometry geom, Solid solid) {
+ switch (geom.getLod()) {
+ case LOD1:
+ gmlBuildingElement.setLod1Solid(new SolidProperty(solid));
+ break;
+ case LOD2:
+ gmlBuildingElement.setLod2Solid(new SolidProperty(solid));
+ break;
+ case LOD3:
+ gmlBuildingElement.setLod3Solid(new SolidProperty(solid));
+ break;
+ default:
+ throw new IllegalStateException(CANNOT_ADD + geom.getLod() + " solid to buildings");
+ }
+ }
+
+ private void setMultiSurfaceAccordingToLod(Geometry geom, MultiSurface ms) {
+ switch (geom.getLod()) {
+ case LOD0:
+ gmlBuildingElement.setLod0MultiSurface(new MultiSurfaceProperty(ms));
+ break;
+ case LOD2:
+ gmlBuildingElement.setLod2MultiSurface(new MultiSurfaceProperty(ms));
+ break;
+ case LOD3:
+ gmlBuildingElement.setLod3MultiSurface(new MultiSurfaceProperty(ms));
+ break;
+ default:
+ throw new IllegalStateException(CANNOT_ADD + geom.getLod() + " multi surface to buildings");
+ }
+ }
+
+ @Override
+ public org.citygml4j.core.model.building.BuildingConstructiveElement getGmlObject() {
+ return gmlBuildingElement;
+ }
+
+ @Override
+ public void unsetGmlGeometries() {
+ gmlBuildingElement.setLod0MultiSurface(null);
+ gmlBuildingElement.setLod2MultiSurface(null);
+ gmlBuildingElement.setLod3MultiSurface(null);
+ gmlBuildingElement.setLod1Solid(null);
+ gmlBuildingElement.setLod2Solid(null);
+ gmlBuildingElement.setLod3Solid(null);
+ }
+
+ @Override
+ public CityObject getTopLevelCityObject() {
+ return getParent().getTopLevelCityObject();
+ }
+
+ @Override
+ public FeatureType getFeatureType() {
+ return FeatureType.BRIDGE_CONSTRUCTION_ELEMENT;
+ }
+
+ public void addBoundarySurface(BoundarySurface bs) {
+ boundarySurfaceList.add(bs);
+ bs.setParent(this);
+ }
+
+ public List getBoundarySurfaces() {
+ return boundarySurfaceList;
+ }
+}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
index 0754938d..19b80ff7 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
@@ -39,6 +39,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.CityGMLVersion;
import org.citygml4j.core.model.bridge.*;
+import org.citygml4j.core.model.building.BuildingConstructiveElement;
import org.citygml4j.core.model.building.BuildingUnit;
import org.citygml4j.core.model.building.Storey;
import org.citygml4j.core.model.building.*;
@@ -1031,6 +1032,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
parseAndAddMultiSurface(gmlAb.getDeprecatedProperties().getLod4MultiSurface(), Lod.LOD4, cdBuilding);
parseAndAddSolid(gmlAb.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, cdBuilding);
+ parseBuildingConstructiveElements(gmlAb, cdBuilding);
parseBuildingInstallations(gmlAb, cdBuilding);
parseBuildingRooms(gmlAb, cdBuilding);
parseBuildingSubdivisions(gmlAb, cdBuilding);
@@ -1084,6 +1086,19 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
}
+ private void parseBuildingConstructiveElements(org.citygml4j.core.model.building.AbstractBuilding gmlAb, AbstractBuilding cdBuilding) {
+ for (BuildingConstructiveElementProperty bceProp : gmlAb.getBuildingConstructiveElements()) {
+ var gmlBCE = bceProp.getObject();
+ if (gmlBCE == null) {
+ continue;
+ }
+ de.hft.stuttgart.citydoctor2.datastructure.BuildingConstructiveElement bce =
+ new de.hft.stuttgart.citydoctor2.datastructure.BuildingConstructiveElement(gmlBCE);
+ mapBuildingConstructiveElement(bce, gmlBCE);
+ cdBuilding.addConstructiveElement(bce);
+ }
+ }
+
private void parseBuildingRooms(org.citygml4j.core.model.building.AbstractBuilding gmlAb, AbstractBuilding cdBuilding) {
for (BuildingRoomProperty brProp : gmlAb.getBuildingRooms()) {
var gmlBr = brProp.getObject();
@@ -1182,6 +1197,21 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
+ private void mapBuildingConstructiveElement(de.hft.stuttgart.citydoctor2.datastructure.BuildingConstructiveElement bce, BuildingConstructiveElement ele) {
+ mapAbstractOccupiedSpace(ele, bce);
+ SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
+ for (AbstractSpaceBoundaryProperty surfaceProp : ele.getBoundaries()) {
+ if (!surfaceProp.isSetObject()) {
+ continue;
+ }
+ AbstractSpaceBoundary surface = surfaceProp.getObject();
+ surface.accept(surfaceMapper);
+ }
+ for (BoundarySurface bs : surfaceMapper.getSurfaces()) {
+ bce.addBoundarySurface(bs);
+ }
+ }
+
private de.hft.stuttgart.citydoctor2.datastructure.Storey mapBuildingStorey(Storey gmlStorey) {
de.hft.stuttgart.citydoctor2.datastructure.Storey storey = new de.hft.stuttgart.citydoctor2.datastructure.Storey();
storey.setGmlObject(gmlStorey);
diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
index b969320b..fd4320d1 100644
--- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
+++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
@@ -590,6 +590,7 @@ public class CityDoctorController {
TreeItem item = buildTopLevelCityObjectNode(b, root, b.getBoundarySurfaces());
createBuildingInstallationNodes(b, item);
+ createBuildingConstructiveElementsNodes(b, item);
createBuildingRoomNodes(b, item);
createBuildingFurnitureNodes(b, item);
createBuildingStoreyNodes(b, item);
@@ -860,6 +861,21 @@ public class CityDoctorController {
createRoomNodes(ab.getBuildingRooms(), root);
}
+ private void createBuildingConstructiveElementsNodes(AbstractBuilding ab, TreeItem root) {
+ if (ab.getConstructiveElements().isEmpty()) {
+ return;
+ }
+
+ CityObjectGroupNode constructiveElementsGroupNode = new CityObjectGroupNode(
+ ab.getConstructiveElements(), "Constructive Elements", Color.CORAL);
+ TreeItem constructiveElementsGroupItem = new TreeItem<>(constructiveElementsGroupNode);
+ root.getChildren().add(constructiveElementsGroupItem);
+
+ for (BuildingConstructiveElement bce : ab.getConstructiveElements()) {
+ buildCityObjectNode(bce, constructiveElementsGroupItem, bce.getBoundarySurfaces());
+ }
+ }
+
private void createRoomNodes(List extends AbstractRoom> rooms, TreeItem root) {
if (rooms.isEmpty()) {
return;
--
GitLab
From 1e80192c392f67b68674ad8e3f1c38d79b974288 Mon Sep 17 00:00:00 2001
From: Matthias Betz
Date: Mon, 7 Jul 2025 12:35:56 +0200
Subject: [PATCH 08/14] fix polygon patches getting double added to geometry
---
.../citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java
index 7b08ba8c..8722c225 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java
@@ -111,7 +111,6 @@ public class Citygml3GeometryMapper extends GeometryWalker {
conc.addInteriorRing(currentRing);
}
collection.addPatchMember(conc);
- polygons.add(conc);
}
private void parsePolygon(String id, AbstractRingProperty exterior, List interior) {
--
GitLab
From 52e6ef7c218142429e8cad604d9696685896e2f6 Mon Sep 17 00:00:00 2001
From: Matthias Betz
Date: Mon, 7 Jul 2025 13:57:12 +0200
Subject: [PATCH 09/14] add INWARD/OUTWARD property to geometries for inward
facing geometries extend all polygon wrong orientation test to handle inward
facing geometries fix validation plan not written when validating in stream
mode
---
.../edge/IntersectionErrorsTest.java | 3 +-
.../edge/MeshSurfaceUtilsTest.java | 41 +--
.../citydoctor2/datastructure/Geometry.java | 15 +-
.../datastructure/ImplicitGeometryHolder.java | 4 +-
.../datastructure/LibraryObject.java | 8 +-
.../datastructure/RelativeGeometry.java | 6 +-
.../citygml3/Citygml3FeatureMapper.java | 285 +++++++++++-------
.../mapper/citygml3/SurfaceMapper.java | 2 +-
.../citydoctor2/parser/CityGmlConsumer.java | 2 +
.../citydoctor2/parser/CityGmlParser.java | 81 ++---
.../citydoctor2/check/CheckableTest.java | 5 +-
.../AllPolygonsWrongOrientationErrorTest.java | 3 +-
.../MultipleConnectedComponentsErrorTest.java | 3 +-
.../check/error/NonManifoldEdgeErrorTest.java | 3 +-
.../error/NonManifoldVertexErrorTest.java | 3 +-
.../PolygonWrongOrientationErrorTest.java | 3 +-
.../check/error/SolidNotClosedErrorTest.java | 3 +-
.../check/error/SolidSelfIntErrorTest.java | 3 +-
.../check/error/TooFewPolygonsErrorTest.java | 3 +-
.../datastructure/BoundarySurfaceTest.java | 3 +-
.../datastructure/BridgeObjectTest.java | 9 +-
.../datastructure/BuildingTest.java | 5 +-
.../datastructure/CityObjectTest.java | 41 +--
.../datastructure/GeometryTest.java | 37 +--
.../datastructure/GeometryTestUtils.java | 5 +-
.../citydoctor2/datastructure/VertexTest.java | 5 +-
.../stuttgart/citydoctor2/check/Checker.java | 3 -
.../check/StreamCityGmlConsumer.java | 16 +-
.../AllPolygonsWrongOrientationCheck.java | 5 +
.../geometry/DegeneratedPolygonCheckTest.java | 3 +-
.../geometry/DuplicatePointsCheckTest.java | 3 +-
.../checks/geometry/FaceOutCheckTest.java | 5 +-
.../checks/geometry/HoleOutsideCheckTest.java | 5 +-
.../InteriorDisconnectedCheckTest.java | 11 +-
.../geometry/ManifoldVertexCheckTest.java | 3 +-
.../checks/geometry/NestedRingsCheckTest.java | 5 +-
.../checks/geometry/NullAreaCheckTest.java | 5 +-
.../checks/geometry/PlanarCheckTest.java | 5 +-
.../PolygonSameOrientationCheckTest.java | 5 +-
.../geometry/PolygonSelfIntCheckTest.java | 9 +-
.../checks/geometry/RingSelfIntCheckTest.java | 9 +-
.../checks/semantics/IsWallCheckTest.java | 9 +-
.../PolygonWithoutSurfaceCheckTest.java | 7 +-
.../checks/util/GeometryTestUtils.java | 5 +-
.../checks/util/SelfIntersectionUtilTest.java | 7 +-
.../citydoctor2/healing/HealMissingSolid.java | 3 +-
.../healing/HealPolygonWithoutSurface.java | 3 +-
.../healing/HealHoleOutsideErrorTest.java | 4 +-
.../healing/HealMissingSolidTest.java | 9 +-
.../healing/HealPlanarPolygonErrorTest.java | 7 +-
.../healing/HealRingSelfIntErrorTest.java | 7 +-
.../healing/HealSolidNotClosedErrorTest.java | 9 +-
.../healer/gui/HealerController.java | 3 +-
53 files changed, 437 insertions(+), 309 deletions(-)
diff --git a/CityDoctorParent/CityDoctorEdge/src/test/java/de/hft/stuttgart/citydoctor2/edge/IntersectionErrorsTest.java b/CityDoctorParent/CityDoctorEdge/src/test/java/de/hft/stuttgart/citydoctor2/edge/IntersectionErrorsTest.java
index 72d007be..7d0ed99e 100644
--- a/CityDoctorParent/CityDoctorEdge/src/test/java/de/hft/stuttgart/citydoctor2/edge/IntersectionErrorsTest.java
+++ b/CityDoctorParent/CityDoctorEdge/src/test/java/de/hft/stuttgart/citydoctor2/edge/IntersectionErrorsTest.java
@@ -32,12 +32,13 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
public class IntersectionErrorsTest {
@Test
public void testWrongIntersection() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
ConcretePolygon p1 = new ConcretePolygon();
diff --git a/CityDoctorParent/CityDoctorEdge/src/test/java/de/hft/stuttgart/citydoctor2/edge/MeshSurfaceUtilsTest.java b/CityDoctorParent/CityDoctorEdge/src/test/java/de/hft/stuttgart/citydoctor2/edge/MeshSurfaceUtilsTest.java
index 9cee97c3..89fa9def 100644
--- a/CityDoctorParent/CityDoctorEdge/src/test/java/de/hft/stuttgart/citydoctor2/edge/MeshSurfaceUtilsTest.java
+++ b/CityDoctorParent/CityDoctorEdge/src/test/java/de/hft/stuttgart/citydoctor2/edge/MeshSurfaceUtilsTest.java
@@ -43,12 +43,13 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoTrianglesOneSharedEdgeInPlane() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -161,7 +162,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTwoSharedEdges() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -212,7 +213,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedEdgeIntersectionPolygonPlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -276,7 +277,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedEdgeIntersectionPolygonPlanar2() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -339,7 +340,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedEdgeCloseEdgePlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -393,7 +394,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedEdgeNotPlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -447,7 +448,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedPointNotPlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -508,7 +509,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingInOnePointNoIntersectionNotPlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -561,7 +562,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingInOnePointNoIntersectionNotPlanar2() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -616,7 +617,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsNotInSamePlaneBelow() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -670,7 +671,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsNotInSamePlaneAbove() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -724,7 +725,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsNotInSamePlaneAboveInverted() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -778,7 +779,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingNoPointsSameNotPlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -834,7 +835,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingEdgeNoPointsSameNotPlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -890,7 +891,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingEdgeInPointNoPointsSameNotPlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -946,7 +947,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTwoTouchingEdgesNotPlanar() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -1002,7 +1003,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsPlanarInnerRingsContained() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -1067,7 +1068,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsPlanarInnerRingsContainedConnected() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -1128,7 +1129,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsInnerRingsConnected() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
@@ -1191,7 +1192,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsInnerRingsThroughHole() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java
index fde39d1a..d7c17240 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java
@@ -40,6 +40,10 @@ public class Geometry extends GmlElement {
@Serial
private static final long serialVersionUID = 2539031030917731575L;
+
+ public enum Orientation {
+ INWARD, OUTWARD
+ }
private static final Random r = new Random();
@@ -52,11 +56,20 @@ public class Geometry extends GmlElement {
private List edges;
private Map, Edge> edgeMap;
private List vertices;
+ private Orientation orientation;
- public Geometry(GeometryType type, Lod lod) {
+ public Geometry(GeometryType type, Lod lod, Orientation orientation) {
this.lod = lod;
this.type = type;
+ if (type == GeometryType.SOLID) {
+ Objects.requireNonNull(orientation);
+ }
+ this.orientation = orientation;
}
+
+ public Orientation getOrientation() {
+ return orientation;
+ }
void setParent(CityObject parent) {
this.parent = parent;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryHolder.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryHolder.java
index b5819762..872725ee 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryHolder.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ImplicitGeometryHolder.java
@@ -23,7 +23,7 @@ public class ImplicitGeometryHolder extends Geometry {
private final Geometry prototypeGeometry;
public ImplicitGeometryHolder(ImplicitGeometry cgmlImplicitGeometry, LibraryObject libObject) {
- super(libObject.getType(), libObject.getLod());
+ super(libObject.getType(), libObject.getLod(), libObject.getOrientation());
prototypeGeometry = libObject;
type = PrototypeGeometryType.LIBRARY_OBJECT;
this.cgmlImplicitGeometry = cgmlImplicitGeometry;
@@ -31,7 +31,7 @@ public class ImplicitGeometryHolder extends Geometry {
}
public ImplicitGeometryHolder(ImplicitGeometry cgmlImplicitGeometry, RelativeGeometry relativeGeometry) {
- super(relativeGeometry.getType(), relativeGeometry.getLod());
+ super(relativeGeometry.getType(), relativeGeometry.getLod(), relativeGeometry.getOrientation());
prototypeGeometry = relativeGeometry;
type = PrototypeGeometryType.RELATIVE_GEOMETRY;
this.cgmlImplicitGeometry = cgmlImplicitGeometry;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LibraryObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LibraryObject.java
index 660194ae..f757da76 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LibraryObject.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LibraryObject.java
@@ -37,7 +37,7 @@ public class LibraryObject extends Geometry {
if (protoGeom == null) {
return null;
}
- LibraryObject libOb = new LibraryObject(protoGeom.getType(), protoGeom.getLod());
+ LibraryObject libOb = new LibraryObject(protoGeom.getType(), protoGeom.getLod(), protoGeom.getOrientation());
protoGeom.getPolygons().forEach(libOb::addPolygon);
libOb.updateEdgesAndVertices();
libraryObjects.put(path.toString(), libOb);
@@ -53,15 +53,15 @@ public class LibraryObject extends Geometry {
if (protoGeom == null) {
return null;
}
- LibraryObject libOb = new LibraryObject(protoGeom.getType(), protoGeom.getLod());
+ LibraryObject libOb = new LibraryObject(protoGeom.getType(), protoGeom.getLod(), protoGeom.getOrientation());
protoGeom.getPolygons().forEach(libOb::addPolygon);
libOb.updateEdgesAndVertices();
libraryObjects.put(fileName, libOb);
return libOb;
}
- private LibraryObject(GeometryType type, Lod lod) {
- super(type, lod);
+ private LibraryObject(GeometryType type, Lod lod, Orientation orientation) {
+ super(type, lod, orientation);
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/RelativeGeometry.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/RelativeGeometry.java
index 8abe39a1..bbf61550 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/RelativeGeometry.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/RelativeGeometry.java
@@ -20,14 +20,14 @@ public class RelativeGeometry extends Geometry {
if (relativeGeometries.containsKey(geom)) {
return relativeGeometries.get(geom);
}
- RelativeGeometry relGeo = new RelativeGeometry(geom.getType(), geom.getLod());
+ RelativeGeometry relGeo = new RelativeGeometry(geom.getType(), geom.getLod(), geom.getOrientation());
geom.getPolygons().forEach(relGeo::addPolygon);
relGeo.updateEdgesAndVertices();
relativeGeometries.put(geom, relGeo);
return relGeo;
}
- private RelativeGeometry(GeometryType type, Lod lod) {
- super(type, lod);
+ private RelativeGeometry(GeometryType type, Lod lod, Orientation orientation) {
+ super(type, lod, orientation);
}
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
index 19b80ff7..e5f5c543 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
@@ -18,33 +18,45 @@
*/
package de.hft.stuttgart.citydoctor2.mapper.citygml3;
-import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
-import de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel;
-import de.hft.stuttgart.citydoctor2.datastructure.BridgeConstructiveElement;
-import de.hft.stuttgart.citydoctor2.datastructure.*;
-import de.hft.stuttgart.citydoctor2.datastructure.Building;
-import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart;
-import de.hft.stuttgart.citydoctor2.datastructure.BuildingRoom;
-import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
-import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
-import de.hft.stuttgart.citydoctor2.datastructure.TunnelConstructiveElement;
-import de.hft.stuttgart.citydoctor2.datastructure.TunnelFurniture;
-import de.hft.stuttgart.citydoctor2.datastructure.TunnelPart;
-import de.hft.stuttgart.citydoctor2.datastructure.Vegetation.VegetationType;
-import de.hft.stuttgart.citydoctor2.math.graph.KDTree;
-import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
-import de.hft.stuttgart.citydoctor2.utils.Localization;
-import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.CityGMLVersion;
-import org.citygml4j.core.model.bridge.*;
+import org.citygml4j.core.model.bridge.AbstractBridge;
+import org.citygml4j.core.model.bridge.Bridge;
+import org.citygml4j.core.model.bridge.BridgeConstructiveElementProperty;
+import org.citygml4j.core.model.bridge.BridgeInstallation;
+import org.citygml4j.core.model.bridge.BridgeInstallationProperty;
+import org.citygml4j.core.model.bridge.BridgePart;
+import org.citygml4j.core.model.bridge.BridgePartProperty;
+import org.citygml4j.core.model.building.AbstractBuildingSubdivisionProperty;
import org.citygml4j.core.model.building.BuildingConstructiveElement;
+import org.citygml4j.core.model.building.BuildingConstructiveElementProperty;
+import org.citygml4j.core.model.building.BuildingFurniture;
+import org.citygml4j.core.model.building.BuildingFurnitureProperty;
+import org.citygml4j.core.model.building.BuildingInstallationProperty;
+import org.citygml4j.core.model.building.BuildingPartProperty;
+import org.citygml4j.core.model.building.BuildingRoomProperty;
import org.citygml4j.core.model.building.BuildingUnit;
import org.citygml4j.core.model.building.Storey;
-import org.citygml4j.core.model.building.*;
import org.citygml4j.core.model.construction.AbstractConstruction;
-import org.citygml4j.core.model.core.*;
+import org.citygml4j.core.model.core.AbstractCityObject;
+import org.citygml4j.core.model.core.AbstractFeatureWithLifespan;
+import org.citygml4j.core.model.core.AbstractGenericAttributeProperty;
+import org.citygml4j.core.model.core.AbstractOccupiedSpace;
+import org.citygml4j.core.model.core.AbstractPhysicalSpace;
+import org.citygml4j.core.model.core.AbstractSpace;
+import org.citygml4j.core.model.core.AbstractSpaceBoundary;
+import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty;
+import org.citygml4j.core.model.core.AbstractThematicSurface;
+import org.citygml4j.core.model.core.AbstractUnoccupiedSpace;
+import org.citygml4j.core.model.core.CityModel;
+import org.citygml4j.core.model.core.ImplicitGeometry;
import org.citygml4j.core.model.deprecated.transportation.TransportationComplex;
import org.citygml4j.core.model.landuse.LandUse;
import org.citygml4j.core.model.relief.AbstractReliefComponentProperty;
@@ -53,9 +65,28 @@ import org.citygml4j.core.model.relief.MassPointRelief;
import org.citygml4j.core.model.relief.RasterRelief;
import org.citygml4j.core.model.relief.ReliefFeature;
import org.citygml4j.core.model.relief.TINRelief;
-import org.citygml4j.core.model.transportation.*;
+import org.citygml4j.core.model.transportation.AbstractTransportationSpace;
+import org.citygml4j.core.model.transportation.AuxiliaryTrafficArea;
+import org.citygml4j.core.model.transportation.AuxiliaryTrafficSpace;
+import org.citygml4j.core.model.transportation.AuxiliaryTrafficSpaceProperty;
+import org.citygml4j.core.model.transportation.IntersectionProperty;
+import org.citygml4j.core.model.transportation.Railway;
+import org.citygml4j.core.model.transportation.Road;
+import org.citygml4j.core.model.transportation.SectionProperty;
+import org.citygml4j.core.model.transportation.Square;
+import org.citygml4j.core.model.transportation.Track;
+import org.citygml4j.core.model.transportation.TrafficArea;
+import org.citygml4j.core.model.transportation.TrafficSpace;
+import org.citygml4j.core.model.transportation.TrafficSpaceProperty;
+import org.citygml4j.core.model.transportation.Waterway;
+import org.citygml4j.core.model.tunnel.HollowSpace;
+import org.citygml4j.core.model.tunnel.HollowSpaceProperty;
import org.citygml4j.core.model.tunnel.Tunnel;
-import org.citygml4j.core.model.tunnel.*;
+import org.citygml4j.core.model.tunnel.TunnelConstructiveElementProperty;
+import org.citygml4j.core.model.tunnel.TunnelFurnitureProperty;
+import org.citygml4j.core.model.tunnel.TunnelInstallation;
+import org.citygml4j.core.model.tunnel.TunnelInstallationProperty;
+import org.citygml4j.core.model.tunnel.TunnelPartProperty;
import org.citygml4j.core.model.vegetation.AbstractVegetationObject;
import org.citygml4j.core.model.vegetation.PlantCover;
import org.citygml4j.core.model.vegetation.SolitaryVegetationObject;
@@ -68,13 +99,65 @@ import org.xmlobjects.gml.model.geometry.GeometryProperty;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface;
-import org.xmlobjects.gml.model.geometry.primitives.*;
+import org.xmlobjects.gml.model.geometry.primitives.AbstractSolid;
+import org.xmlobjects.gml.model.geometry.primitives.AbstractSurface;
+import org.xmlobjects.gml.model.geometry.primitives.Shell;
+import org.xmlobjects.gml.model.geometry.primitives.ShellProperty;
+import org.xmlobjects.gml.model.geometry.primitives.Solid;
+import org.xmlobjects.gml.model.geometry.primitives.SolidProperty;
+import org.xmlobjects.gml.model.geometry.primitives.SurfaceProperty;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
+import de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel;
+import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
+import de.hft.stuttgart.citydoctor2.datastructure.BridgeConstructiveElement;
+import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject;
+import de.hft.stuttgart.citydoctor2.datastructure.Building;
+import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart;
+import de.hft.stuttgart.citydoctor2.datastructure.BuildingRoom;
+import de.hft.stuttgart.citydoctor2.datastructure.BuildingRoomFurniture;
+import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
+import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture;
+import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
+import de.hft.stuttgart.citydoctor2.datastructure.CompositeCollection;
+import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon;
+import de.hft.stuttgart.citydoctor2.datastructure.GenericAttribute;
+import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
+import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
+import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
+import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
+import de.hft.stuttgart.citydoctor2.datastructure.ImplicitGeometryHolder;
+import de.hft.stuttgart.citydoctor2.datastructure.Installation;
+import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
+import de.hft.stuttgart.citydoctor2.datastructure.LibraryObject;
+import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
+import de.hft.stuttgart.citydoctor2.datastructure.LinkedPolygon;
+import de.hft.stuttgart.citydoctor2.datastructure.Lod;
+import de.hft.stuttgart.citydoctor2.datastructure.Opening;
+import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.RelativeGeometry;
+import de.hft.stuttgart.citydoctor2.datastructure.ReliefObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TinObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TopLevelTransportFeature;
+import de.hft.stuttgart.citydoctor2.datastructure.TrafficAreaObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TrafficSpaceObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TransportSection;
+import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TransportationSpace;
+import de.hft.stuttgart.citydoctor2.datastructure.TunnelConstructiveElement;
+import de.hft.stuttgart.citydoctor2.datastructure.TunnelFurniture;
+import de.hft.stuttgart.citydoctor2.datastructure.TunnelHollow;
+import de.hft.stuttgart.citydoctor2.datastructure.TunnelPart;
+import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
+import de.hft.stuttgart.citydoctor2.datastructure.Vegetation.VegetationType;
+import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
+import de.hft.stuttgart.citydoctor2.math.graph.KDTree;
+import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
+import de.hft.stuttgart.citydoctor2.utils.Localization;
+import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry;
public class Citygml3FeatureMapper extends ObjectWalker {
@@ -124,7 +207,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
public void visit(org.citygml4j.core.model.cityfurniture.CityFurniture gmlCityFurniture) {
CityFurniture cf = new CityFurniture();
cf.setGmlObject(gmlCityFurniture);
- mapAbstractOccupiedSpace(gmlCityFurniture, cf);
+ mapAbstractOccupiedSpace(gmlCityFurniture, cf, Orientation.OUTWARD);
finishCityObjectConstruction(cf);
model.addCityFurniture(cf);
}
@@ -142,10 +225,10 @@ public class Citygml3FeatureMapper extends ObjectWalker {
if (agLod4.getObject() instanceof MultiSurface ms) {
gco.addGeometry(parseMultiSurface(ms, Lod.LOD4));
} else if (agLod4.getObject() instanceof AbstractSolid solid) {
- gco.addGeometry(parseSolid(solid, Lod.LOD4));
+ gco.addGeometry(parseSolid(solid, Lod.LOD4, Orientation.OUTWARD));
}
}
- mapAbstractOccupiedSpace(gos, gco);
+ mapAbstractOccupiedSpace(gos, gco, Orientation.OUTWARD);
finishCityObjectConstruction(gco);
model.addGenericCityObject(gco);
}
@@ -169,9 +252,9 @@ public class Citygml3FeatureMapper extends ObjectWalker {
public void visit(WaterBody waterBody) {
WaterObject wo = new WaterObject();
wo.setGmlObject(waterBody);
- mapAbstractOccupiedSpace(waterBody, wo);
+ mapAbstractOccupiedSpace(waterBody, wo, Orientation.OUTWARD);
parseAndAddMultiSurface(waterBody.getDeprecatedProperties().getLod1MultiSurface(), Lod.LOD1, wo);
- parseAndAddSolid(waterBody.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, wo);
+ parseAndAddSolid(waterBody.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, wo, Orientation.OUTWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : waterBody.getBoundaries()) {
@@ -258,7 +341,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
reliefObject.addComponent(to);
Citygml3GeometryMapper tinMapper = new Citygml3GeometryMapper(config, vertexMap);
relief.getTin().getObject().accept(tinMapper);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, reliefLod);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, reliefLod, Orientation.OUTWARD);
tinMapper.getPolygons().forEach(geom::addPolygon);
to.addGeometry(geom);
}
@@ -283,39 +366,39 @@ public class Citygml3FeatureMapper extends ObjectWalker {
mapAbstractVegetationObject(solitaryVegetationObject, veg);
parseAndAddAbstractGeometry(solitaryVegetationObject.getDeprecatedProperties().getLod1Geometry(), Lod.LOD1,
- veg);
+ veg, Orientation.OUTWARD);
parseAndAddAbstractGeometry(solitaryVegetationObject.getDeprecatedProperties().getLod2Geometry(), Lod.LOD2,
- veg);
+ veg, Orientation.OUTWARD);
parseAndAddAbstractGeometry(solitaryVegetationObject.getDeprecatedProperties().getLod3Geometry(), Lod.LOD3,
- veg);
+ veg, Orientation.OUTWARD);
parseAndAddAbstractGeometry(solitaryVegetationObject.getDeprecatedProperties().getLod4Geometry(), Lod.LOD4,
- veg);
+ veg, Orientation.OUTWARD);
finishCityObjectConstruction(veg);
model.addVegetation(veg);
}
private void mapAbstractVegetationObject(AbstractVegetationObject avo, Vegetation veg) {
- mapAbstractOccupiedSpace(avo, veg);
+ mapAbstractOccupiedSpace(avo, veg, Orientation.OUTWARD);
}
- private void mapAbstractOccupiedSpace(AbstractOccupiedSpace aos, CityObject co) {
- mapAbstractPhysicalSpace(aos, co);
- parseImplicitGeometry(aos, co);
+ private void mapAbstractOccupiedSpace(AbstractOccupiedSpace aos, CityObject co, Orientation orientation) {
+ mapAbstractPhysicalSpace(aos, co, orientation);
+ parseImplicitGeometry(aos, co, orientation);
}
- private void mapAbstractPhysicalSpace(AbstractPhysicalSpace aps, CityObject co) {
- mapAbstractSpace(aps, co);
+ private void mapAbstractPhysicalSpace(AbstractPhysicalSpace aps, CityObject co, Orientation orientation) {
+ mapAbstractSpace(aps, co, orientation);
}
- private void mapAbstractSpace(AbstractSpace as, CityObject co) {
+ private void mapAbstractSpace(AbstractSpace as, CityObject co, Orientation orientation) {
mapAbstractFeature(as, co);
parseAndAddMultiSurface(as.getLod0MultiSurface(), Lod.LOD0, co);
parseAndAddMultiSurface(as.getLod2MultiSurface(), Lod.LOD2, co);
parseAndAddMultiSurface(as.getLod3MultiSurface(), Lod.LOD3, co);
- parseAndAddSolid(as.getLod1Solid(), Lod.LOD1, co);
- parseAndAddSolid(as.getLod2Solid(), Lod.LOD2, co);
- parseAndAddSolid(as.getLod3Solid(), Lod.LOD3, co);
+ parseAndAddSolid(as.getLod1Solid(), Lod.LOD1, co, orientation);
+ parseAndAddSolid(as.getLod2Solid(), Lod.LOD2, co, orientation);
+ parseAndAddSolid(as.getLod3Solid(), Lod.LOD3, co, orientation);
parseAndAddGenericAttributes(as, co);
}
@@ -332,7 +415,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
// parse deprecated geometries
parseAndAddMultiSurface(bridge.getDeprecatedProperties().getLod1MultiSurface(), Lod.LOD1, bo);
parseAndAddMultiSurface(bridge.getDeprecatedProperties().getLod4MultiSurface(), Lod.LOD4, bo);
- parseAndAddSolid(bridge.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, bo);
+ parseAndAddSolid(bridge.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, bo, Orientation.OUTWARD);
mapAbstractBridge(bridge, bo);
for (BridgePartProperty bPartProperty : bridge.getBridgeParts()) {
@@ -404,13 +487,13 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private Installation mapBridgeInstallation(BridgeInstallation gmlBi) {
Installation bi = new Installation();
bi.setGmlObject(gmlBi);
- mapAbstractOccupiedSpace(gmlBi, bi);
+ mapAbstractOccupiedSpace(gmlBi, bi, Orientation.OUTWARD);
GeometryProperty> lod2Prop = gmlBi.getDeprecatedProperties().getLod2Geometry();
- parseAndAddAbstractGeometry(lod2Prop, Lod.LOD2, bi);
+ parseAndAddAbstractGeometry(lod2Prop, Lod.LOD2, bi, Orientation.OUTWARD);
GeometryProperty> lod3Prop = gmlBi.getDeprecatedProperties().getLod3Geometry();
- parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, bi);
+ parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, bi, Orientation.OUTWARD);
GeometryProperty> lod4Prop = gmlBi.getDeprecatedProperties().getLod4Geometry();
- parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, bi);
+ parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, bi, Orientation.OUTWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlBi.getBoundaries()) {
@@ -460,13 +543,13 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
private void readAbstractTunnel(org.citygml4j.core.model.tunnel.AbstractTunnel gmlTunnel, AbstractTunnel cdTunnel) {
- mapAbstractOccupiedSpace(gmlTunnel, cdTunnel);
+ mapAbstractOccupiedSpace(gmlTunnel, cdTunnel, Orientation.OUTWARD);
cdTunnel.setGmlObject(gmlTunnel);
// parse deprecated geometries
parseAndAddMultiSurface(gmlTunnel.getDeprecatedProperties().getLod1MultiSurface(), Lod.LOD1, cdTunnel);
parseAndAddMultiSurface(gmlTunnel.getDeprecatedProperties().getLod4MultiSurface(), Lod.LOD4, cdTunnel);
- parseAndAddSolid(gmlTunnel.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, cdTunnel);
+ parseAndAddSolid(gmlTunnel.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, cdTunnel, Orientation.OUTWARD);
parseTunnelInstallations(gmlTunnel, cdTunnel);
parseHollowSpaces(gmlTunnel, cdTunnel);
@@ -541,21 +624,21 @@ public class Citygml3FeatureMapper extends ObjectWalker {
// ignore empty properties
continue;
}
- Installation ti = mapTunnelInstallation(gmlTi);
+ Installation ti = mapTunnelInstallation(gmlTi, Orientation.OUTWARD);
cdTunnel.addTunnelInstallation(ti);
}
}
- private Installation mapTunnelInstallation(TunnelInstallation gmlTi) {
+ private Installation mapTunnelInstallation(TunnelInstallation gmlTi, Orientation orientation) {
Installation ti = new Installation();
ti.setGmlObject(gmlTi);
- mapAbstractOccupiedSpace(gmlTi, ti);
+ mapAbstractOccupiedSpace(gmlTi, ti, Orientation.OUTWARD);
GeometryProperty> lod2Prop = gmlTi.getDeprecatedProperties().getLod2Geometry();
- parseAndAddAbstractGeometry(lod2Prop, Lod.LOD2, ti);
+ parseAndAddAbstractGeometry(lod2Prop, Lod.LOD2, ti, orientation);
GeometryProperty> lod3Prop = gmlTi.getDeprecatedProperties().getLod3Geometry();
- parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, ti);
+ parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, ti, orientation);
GeometryProperty> lod4Prop = gmlTi.getDeprecatedProperties().getLod4Geometry();
- parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, ti);
+ parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, ti, orientation);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
@@ -587,7 +670,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private TunnelHollow mapTunnelHollow(HollowSpace gmlHo) {
TunnelHollow tHollow = new TunnelHollow();
tHollow.setGmlObject(gmlHo);
- mapAbstractUnoccupiedSpace(gmlHo, tHollow);
+ mapAbstractUnoccupiedSpace(gmlHo, tHollow, Orientation.INWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlHo.getBoundaries()) {
@@ -611,7 +694,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
// ignore empty properties
continue;
}
- Installation bi = mapTunnelInstallation(gmlTi);
+ Installation bi = mapTunnelInstallation(gmlTi, Orientation.INWARD);
tHollow.addRoomInstallation(bi);
}
for (TunnelFurnitureProperty tfProp : gmlHo.getTunnelFurniture()) {
@@ -627,7 +710,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private TunnelFurniture mapTunnelFurniture(org.citygml4j.core.model.tunnel.TunnelFurniture gmlTf) {
TunnelFurniture tf = new TunnelFurniture();
tf.setGmlObject(gmlTf);
- mapAbstractOccupiedSpace(gmlTf, tf);
+ mapAbstractOccupiedSpace(gmlTf, tf, Orientation.OUTWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlTf.getBoundaries()) {
@@ -651,7 +734,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private TunnelConstructiveElement mapTunnelConstructiveElement(
org.citygml4j.core.model.tunnel.TunnelConstructiveElement gmlTe) {
TunnelConstructiveElement te = new TunnelConstructiveElement(gmlTe);
- mapAbstractOccupiedSpace(gmlTe, te);
+ mapAbstractOccupiedSpace(gmlTe, te, Orientation.OUTWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlTe.getBoundaries()) {
if (!surfaceProp.isSetObject()) {
@@ -701,11 +784,11 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private void mapAbstractConstructiveElement(org.citygml4j.core.model.bridge.BridgeConstructiveElement ele,
BridgeConstructiveElement bce) {
- mapAbstractOccupiedSpace(ele, bce);
+ mapAbstractOccupiedSpace(ele, bce, Orientation.OUTWARD);
}
private void mapAbstractConstruction(AbstractConstruction ac, BridgeObject bo) {
- mapAbstractOccupiedSpace(ac, bo);
+ mapAbstractOccupiedSpace(ac, bo, Orientation.OUTWARD);
}
@Override
@@ -840,7 +923,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private void mapTrafficSpace(TrafficSpace ts, TrafficSpaceObject tso) {
tso.setGmlObject(ts);
- mapAbstractUnoccupiedSpace(ts, tso);
+ mapAbstractUnoccupiedSpace(ts, tso, Orientation.OUTWARD);
for (AbstractSpaceBoundaryProperty boundary : ts.getBoundaries()) {
if (boundary.isSetObject()) {
TrafficArea area = (TrafficArea) boundary.getObject();
@@ -854,7 +937,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private void mapAuxiliaryTrafficSpace(AuxiliaryTrafficSpace ats, TrafficSpaceObject tso) {
tso.setGmlObject(ats);
- mapAbstractUnoccupiedSpace(ats, tso);
+ mapAbstractUnoccupiedSpace(ats, tso, Orientation.OUTWARD);
for (AbstractSpaceBoundaryProperty boundary : ats.getBoundaries()) {
if (boundary.isSetObject()) {
AuxiliaryTrafficArea area = (AuxiliaryTrafficArea) boundary.getObject();
@@ -886,8 +969,8 @@ public class Citygml3FeatureMapper extends ObjectWalker {
finishCityObjectConstruction(tao);
}
- private void mapAbstractUnoccupiedSpace(AbstractUnoccupiedSpace aus, CityObject co) {
- mapAbstractPhysicalSpace(aus, co);
+ private void mapAbstractUnoccupiedSpace(AbstractUnoccupiedSpace aus, CityObject co, Orientation orientation) {
+ mapAbstractPhysicalSpace(aus, co, orientation);
}
private void parseAbstractTransportationSpaceGeometries(AbstractTransportationSpace space, CityObject co) {
@@ -895,16 +978,6 @@ public class Citygml3FeatureMapper extends ObjectWalker {
parseAndAddMultiSurface(space.getDeprecatedProperties().getLod4MultiSurface(), Lod.LOD4, co);
}
- private void parseAbstractSpaceGeometries(AbstractSpace as, CityObject co) {
- parseAndAddMultiSurface(as.getLod0MultiSurface(), Lod.LOD0, co);
- parseAndAddMultiSurface(as.getLod2MultiSurface(), Lod.LOD2, co);
- parseAndAddMultiSurface(as.getLod3MultiSurface(), Lod.LOD3, co);
- parseAndAddSolid(as.getLod1Solid(), Lod.LOD1, co);
- parseAndAddSolid(as.getLod2Solid(), Lod.LOD2, co);
- parseAndAddSolid(as.getLod3Solid(), Lod.LOD3, co);
-
- }
-
private void parseAndAddMultiSurface(MultiSurfaceProperty msp, Lod lod, CityObject co) {
if (msp == null || msp.getObject() == null) {
return;
@@ -913,24 +986,24 @@ public class Citygml3FeatureMapper extends ObjectWalker {
co.addGeometry(geom);
}
- private void parseAndAddSolid(SolidProperty sp, Lod lod, CityObject co) {
+ private void parseAndAddSolid(SolidProperty sp, Lod lod, CityObject co, Orientation orientation) {
if (sp == null || sp.getObject() == null) {
return;
}
- Geometry geom = parseSolid(sp.getObject(), lod);
+ Geometry geom = parseSolid(sp.getObject(), lod, orientation);
if (geom != null) {
co.addGeometry(geom);
}
}
- private void parseImplicitGeometry(AbstractOccupiedSpace aos, CityObject co) {
+ private void parseImplicitGeometry(AbstractOccupiedSpace aos, CityObject co, Orientation orientation) {
for (int i = 1; i <= 3; i++) {
if (aos.getImplicitRepresentation(i) == null) {
continue;
}
if (aos.getImplicitRepresentation(i).getObject() != null) {
ImplicitGeometry impGeom = aos.getImplicitRepresentation(i).getObject();
- ImplicitGeometryHolder igh = resolveImplicitGeometry(impGeom, i);
+ ImplicitGeometryHolder igh = resolveImplicitGeometry(impGeom, i, orientation);
if (igh != null) {
co.addGeometry(igh);
}
@@ -944,7 +1017,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
- private ImplicitGeometryHolder resolveImplicitGeometry(ImplicitGeometry ig, int lodInt) {
+ private ImplicitGeometryHolder resolveImplicitGeometry(ImplicitGeometry ig, int lodInt, Orientation orientation) {
ImplicitGeometryHolder igh = null;
if (ig.getLibraryObject() != null) {
LibraryObject libObj = null;
@@ -968,7 +1041,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
if (aGeom instanceof MultiSurface ms) {
geom = parseMultiSurface(ms, lod);
} else if (aGeom instanceof Solid s) {
- geom = parseSolid(s, lod);
+ geom = parseSolid(s, lod, orientation);
} else if (aGeom instanceof CompositeSurface cs) {
geom = parseCompositeSurface(cs, lod);
}
@@ -1025,12 +1098,12 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private void readAbstractBuilding(org.citygml4j.core.model.building.AbstractBuilding gmlAb,
AbstractBuilding cdBuilding) {
- mapAbstractOccupiedSpace(gmlAb, cdBuilding);
+ mapAbstractOccupiedSpace(gmlAb, cdBuilding, Orientation.OUTWARD);
cdBuilding.setGmlObject(gmlAb);
// parse deprecated geometries
parseAndAddMultiSurface(gmlAb.getDeprecatedProperties().getLod1MultiSurface(), Lod.LOD1, cdBuilding);
parseAndAddMultiSurface(gmlAb.getDeprecatedProperties().getLod4MultiSurface(), Lod.LOD4, cdBuilding);
- parseAndAddSolid(gmlAb.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, cdBuilding);
+ parseAndAddSolid(gmlAb.getDeprecatedProperties().getLod4Solid(), Lod.LOD4, cdBuilding, Orientation.OUTWARD);
parseBuildingConstructiveElements(gmlAb, cdBuilding);
parseBuildingInstallations(gmlAb, cdBuilding);
@@ -1135,7 +1208,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
BuildingRoom br = new BuildingRoom();
br.setGmlObject(gmlBr);
- mapAbstractUnoccupiedSpace(gmlBr, br);
+ mapAbstractUnoccupiedSpace(gmlBr, br, Orientation.INWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlBr.getBoundaries()) {
@@ -1176,7 +1249,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private BuildingRoomFurniture mapBuildingFurniture(BuildingFurniture gmlAF) {
BuildingRoomFurniture bf = new BuildingRoomFurniture();
bf.setGmlObject(gmlAF);
- mapAbstractOccupiedSpace(gmlAF, bf);
+ mapAbstractOccupiedSpace(gmlAF, bf, Orientation.OUTWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlAF.getBoundaries()) {
if (!surfaceProp.isSetObject()) {
@@ -1198,7 +1271,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
private void mapBuildingConstructiveElement(de.hft.stuttgart.citydoctor2.datastructure.BuildingConstructiveElement bce, BuildingConstructiveElement ele) {
- mapAbstractOccupiedSpace(ele, bce);
+ mapAbstractOccupiedSpace(ele, bce, Orientation.OUTWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : ele.getBoundaries()) {
if (!surfaceProp.isSetObject()) {
@@ -1215,7 +1288,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private de.hft.stuttgart.citydoctor2.datastructure.Storey mapBuildingStorey(Storey gmlStorey) {
de.hft.stuttgart.citydoctor2.datastructure.Storey storey = new de.hft.stuttgart.citydoctor2.datastructure.Storey();
storey.setGmlObject(gmlStorey);
- mapAbstractSpace(gmlStorey, storey);
+ mapAbstractSpace(gmlStorey, storey, Orientation.INWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlStorey.getBoundaries()) {
if (!surfaceProp.isSetObject()) {
@@ -1238,7 +1311,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit mapBuildingUnit(BuildingUnit gmlBU) {
de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit bu = new de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit();
bu.setGmlObject(gmlBU);
- mapAbstractSpace(gmlBU, bu);
+ mapAbstractSpace(gmlBU, bu, Orientation.OUTWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlBU.getBoundaries()) {
if (!surfaceProp.isSetObject()) {
@@ -1272,13 +1345,13 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private Installation mapBuildingInstallation(org.citygml4j.core.model.building.BuildingInstallation gmlBi) {
Installation bi = new Installation();
bi.setGmlObject(gmlBi);
- mapAbstractOccupiedSpace(gmlBi, bi);
+ mapAbstractOccupiedSpace(gmlBi, bi, Orientation.OUTWARD);
GeometryProperty> lod2Prop = gmlBi.getDeprecatedProperties().getLod2Geometry();
- parseAndAddAbstractGeometry(lod2Prop, Lod.LOD2, bi);
+ parseAndAddAbstractGeometry(lod2Prop, Lod.LOD2, bi, Orientation.OUTWARD);
GeometryProperty> lod3Prop = gmlBi.getDeprecatedProperties().getLod3Geometry();
- parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, bi);
+ parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, bi, Orientation.OUTWARD);
GeometryProperty> lod4Prop = gmlBi.getDeprecatedProperties().getLod4Geometry();
- parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, bi);
+ parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, bi, Orientation.OUTWARD);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlBi.getBoundaries()) {
@@ -1306,7 +1379,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
return bi;
}
- private void parseAndAddAbstractGeometry(GeometryProperty> geomProp, Lod lod, CityObject co) {
+ private void parseAndAddAbstractGeometry(GeometryProperty> geomProp, Lod lod, CityObject co, Orientation orientation) {
if (geomProp == null || geomProp.getObject() == null) {
return;
}
@@ -1315,7 +1388,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
Geometry geom = parseMultiSurface(ms, lod);
co.addGeometry(geom);
} else if (abstractGeometry instanceof Solid solid) {
- Geometry geom = parseSolid(solid, lod);
+ Geometry geom = parseSolid(solid, lod, orientation);
if (geom != null) {
co.addGeometry(geom);
}
@@ -1324,9 +1397,9 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
}
- private Geometry parseSolid(AbstractSolid abstractSolid, Lod lod) {
+ private Geometry parseSolid(AbstractSolid abstractSolid, Lod lod, Orientation orientation) {
if (abstractSolid instanceof Solid s) {
- return handleSolidGeometry(s, lod);
+ return handleSolidGeometry(s, lod, orientation);
} else {
logger.warn("Cannot handle solid class {}, can only process pure solids",
abstractSolid.getClass().getSimpleName());
@@ -1334,13 +1407,13 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
}
- private Geometry handleSolidGeometry(Solid solid, Lod lod) {
+ private Geometry handleSolidGeometry(Solid solid, Lod lod, Orientation orientation) {
ShellProperty exteriorProperty = solid.getExterior();
if (exteriorProperty == null || exteriorProperty.getObject() == null) {
logger.warn("Found solid {} without exterior hull, ignoring", solid.getId());
return null;
}
- Geometry geom = new Geometry(GeometryType.SOLID, lod);
+ Geometry geom = new Geometry(GeometryType.SOLID, lod, orientation);
Shell exterior = solid.getExterior().getObject();
Citygml3GeometryMapper geometryMapper = new Citygml3GeometryMapper(config, vertexMap);
readSurfaceMember(geom, geometryMapper, exterior.getSurfaceMembers());
@@ -1348,7 +1421,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
private Geometry parseMultiSurface(MultiSurface ms, Lod lod) {
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, lod);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, lod, null);
Citygml3GeometryMapper geometryMapper = new Citygml3GeometryMapper(config, vertexMap);
readSurfaceMember(geom, geometryMapper, ms.getSurfaceMember());
return geom;
@@ -1378,7 +1451,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
private Geometry parseCompositeSurface(CompositeSurface cs, Lod lod) {
- Geometry geom = new Geometry(GeometryType.COMPOSITE_SURFACE, lod);
+ Geometry geom = new Geometry(GeometryType.COMPOSITE_SURFACE, lod, null);
Citygml3GeometryMapper geometryMapper = new Citygml3GeometryMapper(config, vertexMap);
readSurfaceMember(geom, geometryMapper, cs.getSurfaceMembers());
return geom;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/SurfaceMapper.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/SurfaceMapper.java
index bbad97e1..c8e84952 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/SurfaceMapper.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/SurfaceMapper.java
@@ -107,7 +107,7 @@ public class SurfaceMapper extends ObjectWalker {
}
private Geometry parseMultiSurface(MultiSurface ms, Lod lod) {
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, lod);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, lod, null);
Citygml3GeometryMapper geometryMapper = new Citygml3GeometryMapper(config, vertexMap);
readSurfaceMember(geom, geometryMapper, ms.getSurfaceMember());
return geom;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlConsumer.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlConsumer.java
index c824423c..0400e60d 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlConsumer.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlConsumer.java
@@ -32,4 +32,6 @@ public interface CityGmlConsumer {
}
+// public void endOfFile();
+
}
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlParser.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlParser.java
index a01ae6bd..06d42a00 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlParser.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlParser.java
@@ -18,26 +18,42 @@
*/
package de.hft.stuttgart.citydoctor2.parser;
-import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
-import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
-import de.hft.stuttgart.citydoctor2.mapper.citygml3.Citygml3FeatureMapper;
-import de.hft.stuttgart.citydoctor2.mapper.citygml3.GMLValidationHandler;
-import de.hft.stuttgart.citydoctor2.math.Vector3d;
-import de.hft.stuttgart.citydoctor2.utils.Localization;
-import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry;
-import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntryFile;
-import de.hft.stuttgart.quality.QualityADEContext;
-import de.hft.stuttgart.quality.QualityADEModule;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.citygml4j.core.ade.ADEException;
import org.citygml4j.core.ade.ADERegistry;
import org.citygml4j.core.model.CityGMLVersion;
-import org.citygml4j.core.model.ade.ADEProperty;
import org.citygml4j.core.model.core.AbstractCityObject;
import org.citygml4j.core.model.core.AbstractCityObjectProperty;
import org.citygml4j.core.model.core.AbstractFeature;
+import org.citygml4j.core.model.core.AbstractFeatureProperty;
import org.citygml4j.core.model.core.CityModel;
import org.citygml4j.core.util.CityGMLConstants;
import org.citygml4j.xml.CityGMLContext;
@@ -68,30 +84,16 @@ import org.xmlobjects.schema.SchemaHandlerException;
import org.xmlobjects.stream.XMLReader;
import org.xmlobjects.stream.XMLReaderFactory;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
+import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
+import de.hft.stuttgart.citydoctor2.mapper.citygml3.Citygml3FeatureMapper;
+import de.hft.stuttgart.citydoctor2.mapper.citygml3.GMLValidationHandler;
+import de.hft.stuttgart.citydoctor2.math.Vector3d;
+import de.hft.stuttgart.citydoctor2.utils.Localization;
+import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry;
+import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntryFile;
+import de.hft.stuttgart.quality.QualityADEContext;
+import de.hft.stuttgart.quality.QualityADEModule;
/**
* Utility class to parse CityGML files.
@@ -430,6 +432,7 @@ public class CityGmlParser {
writer.writeMember(chunk);
}
}
+
// end of stream
logger.debug("End of gml file stream");
} catch (CityGMLReadException e) {
@@ -447,11 +450,11 @@ public class CityGmlParser {
}
}
- private static void writeCityModel(CityGMLChunkWriter writer, CityModel cModel) {
+ private static void writeCityModel(CityGMLChunkWriter writer, CityModel cModel) throws CityGMLWriteException {
if (writer != null) {
- for (ADEProperty genEle : cModel.getADEProperties()) {
- writer.getCityModelInfo().addADEProperty(genEle);
- }
+ for (AbstractFeatureProperty featureProp : cModel.getFeatureMembers()) {
+ writer.writeMember(featureProp.getObject());
+ }
}
}
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/CheckableTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/CheckableTest.java
index 715bec55..c247a1a5 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/CheckableTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/CheckableTest.java
@@ -31,6 +31,7 @@ import org.junit.Test;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
@@ -90,7 +91,7 @@ public class CheckableTest {
@Test
public void testContainsError() {
Building b = new Building();
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD);
b.addGeometry(geom);
assertFalse(b.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
assertFalse(b.containsAnyError());
@@ -148,7 +149,7 @@ public class CheckableTest {
@Test
public void testCollectAllContainedErrors() {
Building b = new Building();
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD);
b.addGeometry(geom);
b.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR,
new SchematronError(null, null, null, null)));
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/AllPolygonsWrongOrientationErrorTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/AllPolygonsWrongOrientationErrorTest.java
index ed194723..43b491b3 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/AllPolygonsWrongOrientationErrorTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/AllPolygonsWrongOrientationErrorTest.java
@@ -30,6 +30,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.types.AbstractError;
import de.hft.stuttgart.quality.model.types.AllPolygonsOrientedWrongError;
@@ -39,7 +40,7 @@ public class AllPolygonsWrongOrientationErrorTest {
@Test
public void testAddToValidationResult() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
GmlId gmlId = new GmlId("testId");
geom.setGmlId(gmlId);
AllPolygonsWrongOrientationError err = new AllPolygonsWrongOrientationError(geom);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/MultipleConnectedComponentsErrorTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/MultipleConnectedComponentsErrorTest.java
index 10da9e45..80d1bb93 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/MultipleConnectedComponentsErrorTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/MultipleConnectedComponentsErrorTest.java
@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.properties.PolygonIdListProperty;
import de.hft.stuttgart.quality.model.types.AbstractError;
@@ -44,7 +45,7 @@ public class MultipleConnectedComponentsErrorTest {
@Test
public void testConvertToQualityAdeDatastructure() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
GmlId geomId = new GmlId("geomId");
geom.setGmlId(geomId);
Polygon p1 = new ConcretePolygon();
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldEdgeErrorTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldEdgeErrorTest.java
index 57cdf42a..ba10ccbd 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldEdgeErrorTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldEdgeErrorTest.java
@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.properties.EdgeProperty;
import de.hft.stuttgart.quality.model.types.AbstractError;
@@ -42,7 +43,7 @@ public class NonManifoldEdgeErrorTest {
@Test
public void testConvertToQualityAdeDatastructure() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
GmlId geomId = new GmlId("geomId");
geom.setGmlId(geomId);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldVertexErrorTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldVertexErrorTest.java
index 5c38a364..6c11d102 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldVertexErrorTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/NonManifoldVertexErrorTest.java
@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.types.AbstractError;
import de.hft.stuttgart.quality.model.types.ValidationResult;
@@ -42,7 +43,7 @@ public class NonManifoldVertexErrorTest {
@Test
public void testConvertToQualityAdeDatastructure() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
GmlId geomId = new GmlId("geomId");
geom.setGmlId(geomId);
Polygon p1 = new ConcretePolygon();
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/PolygonWrongOrientationErrorTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/PolygonWrongOrientationErrorTest.java
index 9da1e3ac..fdfb77aa 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/PolygonWrongOrientationErrorTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/PolygonWrongOrientationErrorTest.java
@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.properties.EdgeProperty;
import de.hft.stuttgart.quality.model.types.AbstractError;
@@ -42,7 +43,7 @@ public class PolygonWrongOrientationErrorTest {
@Test
public void testConvertToQualityAdeDatastructure() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
GmlId geomId = new GmlId("geomId");
geom.setGmlId(geomId);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/SolidNotClosedErrorTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/SolidNotClosedErrorTest.java
index 0b35cfde..4bbaf9fa 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/SolidNotClosedErrorTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/SolidNotClosedErrorTest.java
@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.properties.EdgeProperty;
import de.hft.stuttgart.quality.model.types.AbstractError;
@@ -42,7 +43,7 @@ public class SolidNotClosedErrorTest {
@Test
public void testConvertToQualityAdeDatastructure() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
GmlId geomId = new GmlId("geomId");
geom.setGmlId(geomId);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/SolidSelfIntErrorTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/SolidSelfIntErrorTest.java
index 13af8edc..1e880dae 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/SolidSelfIntErrorTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/SolidSelfIntErrorTest.java
@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection;
import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.types.AbstractError;
@@ -43,7 +44,7 @@ public class SolidSelfIntErrorTest {
@Test
public void testConvertToQualityAdeDatastructure() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
GmlId geomId = new GmlId("geomId");
geom.setGmlId(geomId);
Polygon p1 = new ConcretePolygon();
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/TooFewPolygonsErrorTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/TooFewPolygonsErrorTest.java
index 2ad7a7d6..d3edd85c 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/TooFewPolygonsErrorTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/check/error/TooFewPolygonsErrorTest.java
@@ -30,6 +30,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.types.AbstractError;
import de.hft.stuttgart.quality.model.types.SolidTooFewPolygonsError;
@@ -39,7 +40,7 @@ public class TooFewPolygonsErrorTest {
@Test
public void testConvertToQualityAdeDatastructure() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
GmlId geomId = new GmlId("geomId");
geom.setGmlId(geomId);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
index b414511d..1275cc85 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceTest.java
@@ -46,6 +46,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
public class BoundarySurfaceTest {
@@ -104,7 +105,7 @@ public class BoundarySurfaceTest {
@Test
public void testPrepareForChecking() {
BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
Geometry spyGeom = Mockito.spy(geom);
bs.addGeometry(spyGeom);
bs.prepareForChecking();
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
index 57d27a17..d185d272 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeObjectTest.java
@@ -32,21 +32,22 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
-import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor;
import org.citygml4j.core.model.bridge.AbstractBridge;
import org.citygml4j.core.model.deprecated.bridge.DeprecatedPropertiesOfAbstractBridge;
import org.citygml4j.core.util.geometry.GeometryFactory;
import org.citygml4j.core.visitor.ObjectVisitor;
import org.junit.Test;
+import org.mockito.Mockito;
-import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject.BridgeType;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
-import org.mockito.Mockito;
+import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor;
public class BridgeObjectTest {
@@ -117,7 +118,7 @@ public class BridgeObjectTest {
@Test
public void testPrepareForChecking() {
BridgeObject bo = new BridgeObject(mock(AbstractBridge.class));
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
Geometry spyGeom = Mockito.spy(geom);
bo.addGeometry(spyGeom);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
index 7a499874..a27eee43 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingTest.java
@@ -32,6 +32,7 @@ import org.junit.Test;
import org.mockito.Mockito;
import org.xmlobjects.gml.model.basictypes.Code;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.utils.Copy;
@@ -55,7 +56,7 @@ public class BuildingTest {
lr.addVertex(v1);
lr.addVertex(v2);
lr.addVertex(v1);
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD);
geom.addPolygon(p);
geom.updateEdgesAndVertices();
b.addGeometry(geom);
@@ -64,7 +65,7 @@ public class BuildingTest {
RoofSurface rs = new RoofSurface();
rs.setId("testRoof");
BoundarySurface surface = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.ROOF, rs);
- Geometry geomSurface = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geomSurface = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geomSurface.addPolygon(new LinkedPolygon(p, geomSurface));
geomSurface.updateEdgesAndVertices();
surface.addGeometry(geomSurface);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
index b1ec552f..f09849ab 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java
@@ -1,26 +1,31 @@
package de.hft.stuttgart.citydoctor2.datastructure;
-import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.citygml4j.core.model.core.AbstractCityObject;
+import org.citygml4j.core.util.geometry.GeometryFactory;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
+import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder;
import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor;
-import org.citygml4j.core.model.core.AbstractCityObject;
-import org.citygml4j.core.util.geometry.GeometryFactory;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.Assert.*;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
public class CityObjectTest {
@@ -101,10 +106,10 @@ public class CityObjectTest {
@Test
public void testGetHighestLodGeometry() {
- Geometry geometryLod1 = new Geometry(GeometryType.SOLID, Lod.LOD1);
- Geometry geometryLod2 = new Geometry(GeometryType.SOLID, Lod.LOD2);
- Geometry geometryLod3 = new Geometry(GeometryType.SOLID, Lod.LOD3);
- Geometry geometryLod4 = new Geometry(GeometryType.SOLID, Lod.LOD4);
+ Geometry geometryLod1 = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
+ Geometry geometryLod2 = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
+ Geometry geometryLod3 = new Geometry(GeometryType.SOLID, Lod.LOD3, Orientation.OUTWARD);
+ Geometry geometryLod4 = new Geometry(GeometryType.SOLID, Lod.LOD4, Orientation.OUTWARD);
assertNull(co.getHighestLodGeometry());
co.addGeometry(geometryLod1);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
index fadaa5cb..a37077ae 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTest.java
@@ -44,6 +44,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
@@ -58,7 +59,7 @@ public class GeometryTest {
@Test
public void testVisitorPropagation() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD);
ConcretePolygon mockPolygon = mock(ConcretePolygon.class);
geom.addPolygon(mockPolygon);
@@ -72,7 +73,7 @@ public class GeometryTest {
@Test
public void testCreate() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD);
assertNotNull(geom);
assertSame(GeometryType.SOLID, geom.getType());
@@ -81,7 +82,7 @@ public class GeometryTest {
@Test
public void testAddPolygon() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -99,7 +100,7 @@ public class GeometryTest {
var gmlBi = new org.citygml4j.core.model.building.BuildingInstallation();
Installation bi = new Installation();
bi.setGmlObject(gmlBi);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
ConcretePolygon p = new ConcretePolygon();
LinearRing lr = new LinearRing(LinearRingType.EXTERIOR);
@@ -112,7 +113,7 @@ public class GeometryTest {
bs.addGeometry(geom);
- Geometry biGeom = new Geometry(GeometryType.COMPOSITE_SURFACE, Lod.LOD2);
+ Geometry biGeom = new Geometry(GeometryType.COMPOSITE_SURFACE, Lod.LOD2, Orientation.OUTWARD);
biGeom.addPolygon(new LinkedPolygon(p, biGeom));
bi.addGeometry(biGeom);
@@ -133,7 +134,7 @@ public class GeometryTest {
ParserConfiguration config = new ParserConfiguration(4, false);
AbstractConstructionSurface abs = new WallSurface();
BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, abs);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
ConcretePolygon p = new ConcretePolygon();
LinearRing lr = new LinearRing(LinearRingType.EXTERIOR);
@@ -159,7 +160,7 @@ public class GeometryTest {
var gmlBi = new org.citygml4j.core.model.building.BuildingInstallation();
Installation bi = new Installation();
bi.setGmlObject(gmlBi);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
ConcretePolygon p = new ConcretePolygon();
LinearRing lr = new LinearRing(LinearRingType.EXTERIOR);
@@ -171,7 +172,7 @@ public class GeometryTest {
p.setPartOfSurface(bs);
p.setPartOfInstallation(bi);
- Geometry biGeom = new Geometry(GeometryType.COMPOSITE_SURFACE, Lod.LOD2);
+ Geometry biGeom = new Geometry(GeometryType.COMPOSITE_SURFACE, Lod.LOD2, Orientation.OUTWARD);
LinkedPolygon linkedPolygon = new LinkedPolygon(p, biGeom);
biGeom.addPolygon(linkedPolygon);
bi.addGeometry(biGeom);
@@ -197,7 +198,7 @@ public class GeometryTest {
Installation bi = new Installation();
bi.setGmlObject(gmlBi);
bi.addBoundarySurface(bs);
- Geometry geom2 = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom2 = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
ConcretePolygon p = new ConcretePolygon();
geom2.addPolygon(p);
LinearRing lr = new LinearRing(LinearRingType.EXTERIOR);
@@ -210,7 +211,7 @@ public class GeometryTest {
p.setPartOfInstallation(bi);
bs.addGeometry(geom2);
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
Polygon linkedPoly = new LinkedPolygon(p, geom);
geom.addPolygon(linkedPoly);
@@ -241,7 +242,7 @@ public class GeometryTest {
@Test
public void testSetParent() {
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
CityObject co = mock(CityObject.class);
geom.setParent(co);
assertEquals(co, geom.getParent());
@@ -262,7 +263,7 @@ public class GeometryTest {
@Test
public void testSetType() {
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.setType(GeometryType.SOLID);
assertEquals(GeometryType.SOLID, geom.getType());
}
@@ -278,7 +279,7 @@ public class GeometryTest {
@Test
public void testContainsError() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
assertFalse(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
geom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
assertTrue(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
@@ -293,7 +294,7 @@ public class GeometryTest {
@Test
public void testClearAllContainedCheckResults() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
assertFalse(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
geom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
assertTrue(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
@@ -306,7 +307,7 @@ public class GeometryTest {
@Test
public void testCollectContainedErrors() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
assertFalse(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
geom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
assertTrue(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE));
@@ -324,7 +325,7 @@ public class GeometryTest {
@Test
public void testContainsAnyError() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
assertFalse(geom.containsAnyError());
geom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class)));
assertTrue(geom.containsAnyError());
@@ -343,7 +344,7 @@ public class GeometryTest {
@Test
public void testAccept() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Check c = mock(Check.class);
geom.accept(c);
when(c.canExecute(geom)).thenReturn(true);
@@ -434,7 +435,7 @@ public class GeometryTest {
@Test
public void testContainsPolygon() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD);
ConcretePolygon cdPoly = new ConcretePolygon();
geom.addPolygon(cdPoly);
cdPoly.setGmlId(new GmlId("test1"));
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTestUtils.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTestUtils.java
index 95a0fe0f..7185ebf2 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTestUtils.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GeometryTestUtils.java
@@ -18,6 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.datastructure;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import org.xmlobjects.gml.model.geometry.primitives.AbstractRing;
import org.xmlobjects.gml.model.geometry.primitives.AbstractSolid;
@@ -48,7 +49,7 @@ public class GeometryTestUtils {
}
public static Geometry createDummyGeometry(GeometryType type, Lod lod) {
- Geometry geom = new Geometry(type, lod);
+ Geometry geom = new Geometry(type, lod, Orientation.OUTWARD);
ConcretePolygon polygon = new ConcretePolygon();
geom.getPolygons().add(polygon);
polygon.setParent(geom);
@@ -68,7 +69,7 @@ public class GeometryTestUtils {
}
public static Geometry createDummyGeometryWithInnerRingWithNeighboringPolygon(GeometryType type, Lod lod) {
- Geometry geom = new Geometry(type, lod);
+ Geometry geom = new Geometry(type, lod, Orientation.OUTWARD);
ConcretePolygon polygon = new ConcretePolygon();
geom.getPolygons().add(polygon);
polygon.setParent(geom);
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VertexTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VertexTest.java
index ad7286df..6dc58dda 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VertexTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VertexTest.java
@@ -25,6 +25,7 @@ import java.util.Set;
import org.junit.Test;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
@@ -46,7 +47,7 @@ public class VertexTest {
@Test
public void testGetAdjacentRings() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -64,7 +65,7 @@ public class VertexTest {
@Test(expected = IllegalStateException.class)
public void testGetAdjacentRingsGeometryNotContainingVertex() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
index 174a7d29..8b08e5fa 100644
--- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
+++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
@@ -890,9 +890,6 @@ public class Checker {
* @param co the city object to be checked
*/
public void checkFeature(XmlStreamReporter xmlReporter, PdfStreamReporter pdfReporter, CityObject co) {
- if (logger.isDebugEnabled()) {
- logger.debug(Localization.getText("Checker.checkFeature"), co);
- }
executeChecksForCityObject(co);
if (xmlReporter != null) {
xmlReporter.report(co);
diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/StreamCityGmlConsumer.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/StreamCityGmlConsumer.java
index f555a8ea..c3ff365c 100644
--- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/StreamCityGmlConsumer.java
+++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/StreamCityGmlConsumer.java
@@ -29,11 +29,6 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
-import de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel;
-import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture;
-import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.core.AbstractFeatureProperty;
import org.citygml4j.core.model.core.CityModel;
import org.citygml4j.core.util.geometry.GeometryFactory;
@@ -42,9 +37,12 @@ import org.xmlobjects.gml.model.base.Reference;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.checks.SvrlContentHandler;
import de.hft.stuttgart.citydoctor2.checks.util.FeatureCheckedListener;
+import de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject;
import de.hft.stuttgart.citydoctor2.datastructure.Building;
+import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
+import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject;
import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
@@ -64,8 +62,6 @@ import de.hft.stuttgart.quality.model.types.ValidationPlan;
public class StreamCityGmlConsumer implements CityGmlConsumer {
- private static final Logger logger = LogManager.getLogger(StreamCityGmlConsumer.class);
-
private final Checker c;
private final XmlStreamReporter xmlReporter;
private final PdfStreamReporter pdfReporter;
@@ -82,7 +78,7 @@ public class StreamCityGmlConsumer implements CityGmlConsumer {
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) {
this.c = c;
@@ -116,10 +112,6 @@ public class StreamCityGmlConsumer implements CityGmlConsumer {
@Override
public void accept(CityObject co) {
- if (logger.isDebugEnabled()) {
- logger.debug(Localization.getText("Checker.checkFeature"), co);
- }
-
// check without reporters, nothing will be put into the reports like that
// this will also clear old check results if any (though in stream mode there
// won't be any)
diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/geometry/AllPolygonsWrongOrientationCheck.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/geometry/AllPolygonsWrongOrientationCheck.java
index 9b4df54b..277026e8 100644
--- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/geometry/AllPolygonsWrongOrientationCheck.java
+++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/geometry/AllPolygonsWrongOrientationCheck.java
@@ -35,6 +35,7 @@ import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.math.Ray;
import de.hft.stuttgart.citydoctor2.math.Triangle3d;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
@@ -76,6 +77,10 @@ public class AllPolygonsWrongOrientationCheck extends Check {
return;
}
boolean isOutwardOriented = geometryIsOutwardOrientedJava(g);
+ // invert outward direction for inward facing geometries
+ if (g.getOrientation() == Orientation.INWARD) {
+ isOutwardOriented = !isOutwardOriented;
+ }
CheckResult cr;
if (isOutwardOriented) {
cr = new CheckResult(this, ResultStatus.OK, null);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/DegeneratedPolygonCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/DegeneratedPolygonCheckTest.java
index dcd00336..98669c40 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/DegeneratedPolygonCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/DegeneratedPolygonCheckTest.java
@@ -41,6 +41,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.quality.model.enums.RequirementId;
@@ -48,7 +49,7 @@ public class DegeneratedPolygonCheckTest {
@Test
public void testDegeneratedPolygon() {
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1, Orientation.OUTWARD);
ConcretePolygon polygon = new ConcretePolygon();
geom.getPolygons().add(polygon);
polygon.setParent(geom);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/DuplicatePointsCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/DuplicatePointsCheckTest.java
index 6cdeb012..57d993b5 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/DuplicatePointsCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/DuplicatePointsCheckTest.java
@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -90,7 +91,7 @@ public class DuplicatePointsCheckTest {
@Test
public void testCheckSelfInt() {
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = new Vertex(1, 1, 1);
Vertex v1 = new Vertex(2, 2, 2);
Vertex v2 = new Vertex(3, 3, 3);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/FaceOutCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/FaceOutCheckTest.java
index 68ecbbce..0ac69f20 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/FaceOutCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/FaceOutCheckTest.java
@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -40,7 +41,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
public class FaceOutCheckTest {
private Geometry createBadGeometry() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = createVertex(0, 0, 0, geom);
Vertex v1 = createVertex(10, 0, 0, geom);
@@ -62,7 +63,7 @@ public class FaceOutCheckTest {
}
private Geometry createGoodGeometry() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = createVertex(0, 0, 0, geom);
Vertex v1 = createVertex(10, 0, 0, geom);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/HoleOutsideCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/HoleOutsideCheckTest.java
index a3ef2f2c..74433ad0 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/HoleOutsideCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/HoleOutsideCheckTest.java
@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -43,7 +44,7 @@ public class HoleOutsideCheckTest {
@Test
public void testHoleOutside() {
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -79,7 +80,7 @@ public class HoleOutsideCheckTest {
@Test
public void testPolygonGood() {
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/InteriorDisconnectedCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/InteriorDisconnectedCheckTest.java
index 314afcf7..44d136aa 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/InteriorDisconnectedCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/InteriorDisconnectedCheckTest.java
@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -44,7 +45,7 @@ public class InteriorDisconnectedCheckTest {
*/
@Test
public void testBadPolygon1() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -89,7 +90,7 @@ public class InteriorDisconnectedCheckTest {
*/
@Test
public void testBadPolygon2() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -145,7 +146,7 @@ public class InteriorDisconnectedCheckTest {
*/
@Test
public void testBadPolygon3() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -213,7 +214,7 @@ public class InteriorDisconnectedCheckTest {
*/
@Test
public void testGoodPolygon3() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -274,7 +275,7 @@ public class InteriorDisconnectedCheckTest {
@Test
public void testGoodPolygon2() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/ManifoldVertexCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/ManifoldVertexCheckTest.java
index d7ae5e73..336bb394 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/ManifoldVertexCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/ManifoldVertexCheckTest.java
@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -41,7 +42,7 @@ public class ManifoldVertexCheckTest {
@Test
public void testNonManifoldVertex() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v12 = createVertex(10, 10, 3, geom);
Vertex v13 = createVertex(10, 10, 0, geom);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/NestedRingsCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/NestedRingsCheckTest.java
index 4bfb5106..34d5c60b 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/NestedRingsCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/NestedRingsCheckTest.java
@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -43,7 +44,7 @@ public class NestedRingsCheckTest {
@Test
public void testNestedRings() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -90,7 +91,7 @@ public class NestedRingsCheckTest {
@Test
public void testPolygonGood() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/NullAreaCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/NullAreaCheckTest.java
index ea5d367a..550ef455 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/NullAreaCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/NullAreaCheckTest.java
@@ -29,6 +29,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -38,7 +39,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
public class NullAreaCheckTest {
private LinearRing setupValidGeometry() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -62,7 +63,7 @@ public class NullAreaCheckTest {
}
private LinearRing setupErrorGeometry() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PlanarCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PlanarCheckTest.java
index 9a8d9e6b..4ae6fe61 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PlanarCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PlanarCheckTest.java
@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -41,7 +42,7 @@ public class PlanarCheckTest {
@Test
public void testCheckPolygonOK() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = new Vertex(0, 0, 0);
Vertex v1 = new Vertex(0, 0, 1);
Vertex v2 = new Vertex(1, 0, 1);
@@ -62,7 +63,7 @@ public class PlanarCheckTest {
@Test
public void testCheckPolygonDistanceERROR() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = new Vertex(0, 0, 0);
Vertex v1 = new Vertex(0, 0.06, 1);
Vertex v2 = new Vertex(1, 1, 1);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PolygonSameOrientationCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PolygonSameOrientationCheckTest.java
index 959505ab..8e7d07e2 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PolygonSameOrientationCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PolygonSameOrientationCheckTest.java
@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -44,7 +45,7 @@ public class PolygonSameOrientationCheckTest {
@Test
public void testSameOrientation() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = GeometryTestUtils.createVertex(0, 0, 0, geom);
Vertex v1 = GeometryTestUtils.createVertex(6, 0, 0, geom);
@@ -76,7 +77,7 @@ public class PolygonSameOrientationCheckTest {
@Test
public void testGoodPoly() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = GeometryTestUtils.createVertex(0, 0, 0, geom);
Vertex v1 = GeometryTestUtils.createVertex(6, 0, 0, geom);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PolygonSelfIntCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PolygonSelfIntCheckTest.java
index 468ab96b..6afa6c8d 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PolygonSelfIntCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/PolygonSelfIntCheckTest.java
@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -45,7 +46,7 @@ public class PolygonSelfIntCheckTest {
@Test
public void testPolygonInteriorIntersectExterior() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
@@ -95,7 +96,7 @@ public class PolygonSelfIntCheckTest {
@Test
public void testPolygonGood() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
@@ -143,7 +144,7 @@ public class PolygonSelfIntCheckTest {
@Test
public void test2InteriorRingsIntersecting() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
@@ -211,7 +212,7 @@ public class PolygonSelfIntCheckTest {
@Test
public void test2InteriorRingsNotIntersecting() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/RingSelfIntCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/RingSelfIntCheckTest.java
index b93fd42e..c5118554 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/RingSelfIntCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/geometry/RingSelfIntCheckTest.java
@@ -38,6 +38,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
/**
@@ -49,7 +50,7 @@ public class RingSelfIntCheckTest {
@Test
public void testIntersect() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
@@ -88,7 +89,7 @@ public class RingSelfIntCheckTest {
@Test
public void testNonIntersect() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
@@ -121,7 +122,7 @@ public class RingSelfIntCheckTest {
@Test
public void testTouching() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
@@ -159,7 +160,7 @@ public class RingSelfIntCheckTest {
@Test
public void testNotTouching() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/semantics/IsWallCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/semantics/IsWallCheckTest.java
index fbd41aef..08a1f596 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/semantics/IsWallCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/semantics/IsWallCheckTest.java
@@ -38,6 +38,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
/**
@@ -64,7 +65,7 @@ public class IsWallCheckTest {
Polygon p = new ConcretePolygon();
p.setExteriorRing(lr);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.addPolygon(p);
BoundarySurface bs = new BoundarySurface(null);
@@ -97,7 +98,7 @@ public class IsWallCheckTest {
Polygon p = new ConcretePolygon();
p.setExteriorRing(lr);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.addPolygon(p);
BoundarySurface bs = new BoundarySurface(null);
@@ -129,7 +130,7 @@ public class IsWallCheckTest {
Polygon p = new ConcretePolygon();
p.setExteriorRing(lr);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.addPolygon(p);
BoundarySurface bs = new BoundarySurface(null);
@@ -162,7 +163,7 @@ public class IsWallCheckTest {
Polygon p = new ConcretePolygon();
p.setExteriorRing(lr);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.addPolygon(p);
BoundarySurface bs = new BoundarySurface(null);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/semantics/PolygonWithoutSurfaceCheckTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/semantics/PolygonWithoutSurfaceCheckTest.java
index 0bbb3fdf..fcab4a52 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/semantics/PolygonWithoutSurfaceCheckTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/semantics/PolygonWithoutSurfaceCheckTest.java
@@ -20,12 +20,13 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
public class PolygonWithoutSurfaceCheckTest {
@Test
public void testPolygonWithoutSurface() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
PolygonWithoutSurfaceCheck check = new PolygonWithoutSurfaceCheck();
@@ -44,7 +45,7 @@ public class PolygonWithoutSurfaceCheckTest {
@Test
public void testPolygonWithSurface() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
BoundarySurface bs = new BoundarySurface(null);
bs.addGeometry(geom);
@@ -61,7 +62,7 @@ public class PolygonWithoutSurfaceCheckTest {
@Test
public void testPolygonWithWrongLod() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
BoundarySurface bs = new BoundarySurface(null);
bs.addGeometry(geom);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/util/GeometryTestUtils.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/util/GeometryTestUtils.java
index 0c4db51a..bd821d33 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/util/GeometryTestUtils.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/util/GeometryTestUtils.java
@@ -30,6 +30,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/**
*
@@ -39,7 +40,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
public class GeometryTestUtils {
public static Geometry createGoodGeometry() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = createVertex(0, 0, 0, geom);
Vertex v1 = createVertex(10, 0, 0, geom);
@@ -65,7 +66,7 @@ public class GeometryTestUtils {
}
public static Geometry createBadGeometry() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = createVertex(0, 0, 0, geom);
Vertex v1 = createVertex(10, 0, 0, geom);
diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/util/SelfIntersectionUtilTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/util/SelfIntersectionUtilTest.java
index cc6d728a..35a7c10e 100644
--- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/util/SelfIntersectionUtilTest.java
+++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/checks/util/SelfIntersectionUtilTest.java
@@ -37,6 +37,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.math.Segment3d;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
@@ -806,7 +807,7 @@ public class SelfIntersectionUtilTest {
@Test
public void testIsSimpleGood() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
@@ -837,7 +838,7 @@ public class SelfIntersectionUtilTest {
@Test
public void testIsSimpleFail() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
@@ -867,7 +868,7 @@ public class SelfIntersectionUtilTest {
@Test
public void testIsSimpleGood2() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon();
geom.addPolygon(poly);
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
index 090e7f73..558cca0c 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolid.java
@@ -42,6 +42,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinkedPolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
public class HealMissingSolid implements HealingMethod {
@@ -116,7 +117,7 @@ public class HealMissingSolid implements HealingMethod {
}
private boolean createSolidInFeature(Lod lod, AbstractBuilding building) {
- Geometry geom = new Geometry(GeometryType.SOLID, lod);
+ Geometry geom = new Geometry(GeometryType.SOLID, lod, Orientation.OUTWARD);
List polygons = collectPolygons(building, lod, geom);
for (Polygon p : polygons) {
geom.addPolygon(p);
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealPolygonWithoutSurface.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealPolygonWithoutSurface.java
index 174fd6b5..6864a994 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealPolygonWithoutSurface.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/main/java/de/hft/stuttgart/citydoctor2/healing/HealPolygonWithoutSurface.java
@@ -19,6 +19,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.LinkedPolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
public class HealPolygonWithoutSurface implements HealingMethod {
@@ -60,7 +61,7 @@ public class HealPolygonWithoutSurface implements HealingMethod {
Geometry parentGeometry = cp.getParent();
parentGeometry.getPolygons().remove(cp);
ab.addBoundarySurface(bs);
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, parentGeometry.getLod());
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, parentGeometry.getLod(), Orientation.OUTWARD);
bs.addGeometry(geom);
geom.addPolygon(cp);
parentGeometry.addPolygon(new LinkedPolygon(cp, parentGeometry));
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealHoleOutsideErrorTest.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealHoleOutsideErrorTest.java
index b5118c94..50ca0b47 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealHoleOutsideErrorTest.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealHoleOutsideErrorTest.java
@@ -2,16 +2,14 @@ package de.hft.stuttgart.citydoctor2.healing;
import java.io.IOException;
-import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
-import de.hft.stuttgart.citydoctor2.datastructure.Building;
import org.junit.Assert;
import org.junit.Test;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
+import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
-import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.healer.Healer;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolidTest.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolidTest.java
index 74ab22ad..0b064845 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolidTest.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealMissingSolidTest.java
@@ -55,6 +55,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinkedPolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException;
import de.hft.stuttgart.citydoctor2.healer.Healer;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
@@ -75,7 +76,7 @@ public class HealMissingSolidTest {
model.addBuilding(b);
b.setGmlObject(new org.citygml4j.core.model.building.Building());
- Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
b.addGeometry(geom);
ConcretePolygon p1 = new ConcretePolygon();
LinearRing ext1 = createTestRing();
@@ -84,7 +85,7 @@ public class HealMissingSolidTest {
BoundarySurface bs1 = new BoundarySurface(mock(AbstractThematicSurface.class));
b.addBoundarySurface(bs1);
- Geometry geom2 = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom2 = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
bs1.addGeometry(geom2);
ConcretePolygon p2 = new ConcretePolygon();
LinearRing ext2 = createTestRing();
@@ -95,7 +96,7 @@ public class HealMissingSolidTest {
Installation bi = new Installation();
b.addBuildingInstallation(bi);
- Geometry geom3 = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom3 = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
bi.addGeometry(geom3);
ConcretePolygon p3 = new ConcretePolygon();
LinearRing ext3 = createTestRing();
@@ -104,7 +105,7 @@ public class HealMissingSolidTest {
BoundarySurface bs2 = new BoundarySurface(mock(AbstractThematicSurface.class));
bi.addBoundarySurface(bs2);
- Geometry geom4 = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2);
+ Geometry geom4 = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
bs2.addGeometry(geom4);
ConcretePolygon p4 = new ConcretePolygon();
LinearRing ext4 = createTestRing();
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealPlanarPolygonErrorTest.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealPlanarPolygonErrorTest.java
index 94a3ec0a..7b5576bd 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealPlanarPolygonErrorTest.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealPlanarPolygonErrorTest.java
@@ -27,6 +27,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.healer.Healer;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
@@ -57,7 +58,7 @@ public class HealPlanarPolygonErrorTest {
public void testNonplanarPolygon() {
CppInitializer.initCpp();
Building b = new Building();
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
b.addGeometry(geom);
Vertex v0 = new Vertex(0, 0, 0);
@@ -162,7 +163,7 @@ public class HealPlanarPolygonErrorTest {
public void testNonplanarPolygon_Split() {
CppInitializer.initCpp();
Building b = new Building();
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
b.addGeometry(geom);
Vertex v0 = new Vertex(0, 0, 0);
@@ -276,7 +277,7 @@ public class HealPlanarPolygonErrorTest {
public void testNonplanarPolygon_Split2() {
CppInitializer.initCpp();
Building b = new Building();
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
b.addGeometry(geom);
Vertex v0 = new Vertex(0, 0, 0);
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealRingSelfIntErrorTest.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealRingSelfIntErrorTest.java
index 078c96b1..8a33573b 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealRingSelfIntErrorTest.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealRingSelfIntErrorTest.java
@@ -27,6 +27,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.healer.Healer;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
@@ -35,7 +36,7 @@ public class HealRingSelfIntErrorTest {
@Test
public void testIntersectingEdges1() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -92,7 +93,7 @@ public class HealRingSelfIntErrorTest {
@Test
public void testDuplicatePoint1() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
@@ -137,7 +138,7 @@ public class HealRingSelfIntErrorTest {
@Test
public void testDuplicatePoint2() {
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon();
geom.addPolygon(p);
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealSolidNotClosedErrorTest.java b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealSolidNotClosedErrorTest.java
index 4dbf3d63..5a8713a8 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealSolidNotClosedErrorTest.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/src/test/java/de/hft/stuttgart/citydoctor2/healing/HealSolidNotClosedErrorTest.java
@@ -29,6 +29,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.healer.Healer;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
@@ -42,7 +43,7 @@ public class HealSolidNotClosedErrorTest {
public void testVertexCloseToEdge() {
CppInitializer.initCpp();
Building b = new Building(); //Angelika: als Test eingefügt
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0); //Original
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD); //Original
// Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2); //Angelika: Test
b.addGeometry(geom); //Angelika: als Test eingefügt
@@ -166,7 +167,7 @@ public class HealSolidNotClosedErrorTest {
public void testMissingPolygon() {
CppInitializer.initCpp();
Building b = new Building();
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
b.addGeometry(geom);
Vertex v0 = new Vertex(0, 0, 0);
@@ -255,7 +256,7 @@ public class HealSolidNotClosedErrorTest {
@Test
public void test2MissingPolygons() {
Building b = new Building();
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0, Orientation.OUTWARD);
b.addGeometry(geom);
Vertex v0 = new Vertex(0, 0, 0);
@@ -345,7 +346,7 @@ public class HealSolidNotClosedErrorTest {
public void test2MissingPolygonsCpp() {
CppInitializer.initCpp();
Building b = new Building();
- Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2);
+ Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
b.addGeometry(geom);
Vertex v0 = new Vertex(0, 0, 0);
diff --git a/CityDoctorParent/Extensions/CityDoctorHealerGUI/src/main/java/de/hft/stuttgart/citydoctor2/healer/gui/HealerController.java b/CityDoctorParent/Extensions/CityDoctorHealerGUI/src/main/java/de/hft/stuttgart/citydoctor2/healer/gui/HealerController.java
index 9fe9b172..4cb6311c 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealerGUI/src/main/java/de/hft/stuttgart/citydoctor2/healer/gui/HealerController.java
+++ b/CityDoctorParent/Extensions/CityDoctorHealerGUI/src/main/java/de/hft/stuttgart/citydoctor2/healer/gui/HealerController.java
@@ -30,6 +30,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinkedPolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Opening;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.gui.AutoProWindow;
import de.hft.stuttgart.citydoctor2.gui.HighlightController;
import de.hft.stuttgart.citydoctor2.gui.ListErrorVisitor;
@@ -614,7 +615,7 @@ public class HealerController {
List newPolygons = availablePolygons.get(lod);
if (newPolygons != null) {
// found polygons to be added
- Geometry newGeometry = new Geometry(GeometryType.SOLID, lod);
+ Geometry newGeometry = new Geometry(GeometryType.SOLID, lod, Orientation.OUTWARD);
Set polygons = existingPolygons.get(lod);
if (polygons != null) {
// add existing polygons
--
GitLab
From cb5d5f0339d97e261a177b8e1518ad00ce7dd74e Mon Sep 17 00:00:00 2001
From: Matthias Betz
Date: Mon, 7 Jul 2025 17:28:15 +0200
Subject: [PATCH 10/14] fixing missing uom and value for valid quality ade
output
---
.../hft/stuttgart/citydoctor2/check/Unit.java | 2 +-
.../stuttgart/citydoctor2/check/Checker.java | 23 +++++++++++++------
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Unit.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Unit.java
index 9ea57be5..7dcfb00c 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Unit.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Unit.java
@@ -29,7 +29,7 @@ import de.hft.stuttgart.citydoctor2.utils.Localization;
*/
public enum Unit {
- KWH("kWh", "kWh"), METER("m", "m"), SQUARE_METER("m²", "m2"), CUBIC_METER("m³", "m3"), RADIAN(Localization.getText("Unit.Radian"), "rad"), NONE("", null), DEGREE(Localization.getText("Unit.Degree"), "deg");
+ KWH("kWh", "kWh"), METER("m", "m"), SQUARE_METER("m²", "m2"), CUBIC_METER("m³", "m3"), RADIAN(Localization.getText("Unit.Radian"), "rad"), NONE("", ""), DEGREE(Localization.getText("Unit.Degree"), "deg");
private final String representation;
private final String gmlRep;
diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
index 8b08e5fa..061e4184 100644
--- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
+++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
@@ -264,6 +264,8 @@ public class Checker {
DefaultParameter defaultP = getDefaultParameter(e.getKey(), reqs, param.getKey());
if (defaultP != null) {
p.setUom(defaultP.getUnitType().getGmlRepresentation());
+ } else {
+ p.setUom("");
}
p.setName(param.getKey());
p.setValue(param.getValue());
@@ -280,22 +282,29 @@ public class Checker {
correct.setEnabled(config.getSchematronFilePath() != null);
plan.getRequirements().add(new RequirementProperty(missing));
plan.getRequirements().add(new RequirementProperty(correct));
+
+ de.hft.stuttgart.quality.model.types.GlobalParameters globParams = new de.hft.stuttgart.quality.model.types.GlobalParameters();
+ plan.setGlobalParameters(new GlobalParametersProperty(globParams));
Parameter numRounding = new Parameter();
numRounding.setName("numberOfRoundingPlaces");
+ numRounding.setUom("amount");
numRounding.setValue("" + config.getNumberOfRoundingPlaces());
+ globParams.getParameters().add(new ParameterProperty(numRounding));
+
Parameter minVertexDistance = new Parameter();
minVertexDistance.setName("minVertexDistance");
minVertexDistance.setUom("m");
minVertexDistance.setValue("" + config.getMinVertexDistance());
- Parameter schematronFile = new Parameter();
- schematronFile.setName("schematronFile");
- schematronFile.setValue(config.getSchematronFilePath());
- de.hft.stuttgart.quality.model.types.GlobalParameters globParams = new de.hft.stuttgart.quality.model.types.GlobalParameters();
- plan.setGlobalParameters(new GlobalParametersProperty(globParams));
- globParams.getParameters().add(new ParameterProperty(numRounding));
globParams.getParameters().add(new ParameterProperty(minVertexDistance));
- globParams.getParameters().add(new ParameterProperty(schematronFile));
+
+ if (config.getSchematronFilePath() != null) {
+ Parameter schematronFile = new Parameter();
+ schematronFile.setName("schematronFile");
+ schematronFile.setUom("path");
+ schematronFile.setValue(config.getSchematronFilePath());
+ globParams.getParameters().add(new ParameterProperty(schematronFile));
+ }
return plan;
}
--
GitLab
From a7d420b2bad4de30f8039d4e87a97e119346c7c2 Mon Sep 17 00:00:00 2001
From: Matthias Betz
Date: Mon, 7 Jul 2025 17:33:59 +0200
Subject: [PATCH 11/14] reduce fop logging verbosity
---
CityDoctorParent/CityDoctorModel/src/main/resources/log4j2.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/CityDoctorParent/CityDoctorModel/src/main/resources/log4j2.xml b/CityDoctorParent/CityDoctorModel/src/main/resources/log4j2.xml
index 824c970e..4e951d6b 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/resources/log4j2.xml
+++ b/CityDoctorParent/CityDoctorModel/src/main/resources/log4j2.xml
@@ -11,5 +11,8 @@
+
+
+
\ No newline at end of file
--
GitLab
From e6055d84df1453b5398bcd2897e28c551931072e Mon Sep 17 00:00:00 2001
From: Riegel
Date: Wed, 9 Jul 2025 11:19:15 +0200
Subject: [PATCH 12/14] Docs: Update Changelog
---
CHANGELOG.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 396f849e..9b6855d9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [3.17.3] (2025-07-09)
+
+- Fixed global errors not being cleared upon validation rerun
+- Fixed ConstructiveElements of Buildings not being parsed
+- Fixed PolygonPatches being added twice to Geometry
+- Fixed missing uom and value for valid QualityADE output
+- Reduced FOP-logging verbosity
+- Added a facing property to Geometry, denoting whether it is facing inwards or outwards
+
## [3.17.2] (2025-06-05)
- Rework of AbstractCheck, allowing the implementation of Visitors that use the CheckEngine to traverse the internal
--
GitLab
From f2a1df0afd084ccd3a2f030a4796afbabb6e2924 Mon Sep 17 00:00:00 2001
From: Riegel
Date: Wed, 9 Jul 2025 11:19:32 +0200
Subject: [PATCH 13/14] Build: Update version number
---
CityDoctorParent/CityDoctorCheckResult/pom.xml | 2 +-
CityDoctorParent/CityDoctorEdge/pom.xml | 2 +-
CityDoctorParent/CityDoctorModel/pom.xml | 2 +-
CityDoctorParent/CityDoctorValidation/pom.xml | 2 +-
CityDoctorParent/Extensions/CityDoctorAutoPro/pom.xml | 2 +-
CityDoctorParent/Extensions/CityDoctorGUI/pom.xml | 2 +-
CityDoctorParent/Extensions/CityDoctorHealer/pom.xml | 2 +-
CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml | 2 +-
CityDoctorParent/Extensions/CityDoctorHealerGenetic/pom.xml | 2 +-
CityDoctorParent/pom.xml | 2 +-
10 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/CityDoctorParent/CityDoctorCheckResult/pom.xml b/CityDoctorParent/CityDoctorCheckResult/pom.xml
index ff3c3418..6a9d0d2c 100644
--- a/CityDoctorParent/CityDoctorCheckResult/pom.xml
+++ b/CityDoctorParent/CityDoctorCheckResult/pom.xml
@@ -6,7 +6,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
CityDoctorCheckResult
diff --git a/CityDoctorParent/CityDoctorEdge/pom.xml b/CityDoctorParent/CityDoctorEdge/pom.xml
index 21d72c9b..e7a5d0ab 100644
--- a/CityDoctorParent/CityDoctorEdge/pom.xml
+++ b/CityDoctorParent/CityDoctorEdge/pom.xml
@@ -6,7 +6,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
CityDoctorEdge
diff --git a/CityDoctorParent/CityDoctorModel/pom.xml b/CityDoctorParent/CityDoctorModel/pom.xml
index a5a024e3..b02bd6e5 100644
--- a/CityDoctorParent/CityDoctorModel/pom.xml
+++ b/CityDoctorParent/CityDoctorModel/pom.xml
@@ -6,7 +6,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
${project.version}-${git.commit.id.abbrev}
diff --git a/CityDoctorParent/CityDoctorValidation/pom.xml b/CityDoctorParent/CityDoctorValidation/pom.xml
index 619937ff..48329e28 100644
--- a/CityDoctorParent/CityDoctorValidation/pom.xml
+++ b/CityDoctorParent/CityDoctorValidation/pom.xml
@@ -4,7 +4,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
CityDoctorValidation
CityDoctorValidation
diff --git a/CityDoctorParent/Extensions/CityDoctorAutoPro/pom.xml b/CityDoctorParent/Extensions/CityDoctorAutoPro/pom.xml
index 5a888285..52eb3030 100644
--- a/CityDoctorParent/Extensions/CityDoctorAutoPro/pom.xml
+++ b/CityDoctorParent/Extensions/CityDoctorAutoPro/pom.xml
@@ -6,7 +6,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
../../pom.xml
CityDoctorAutoPro
diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/pom.xml b/CityDoctorParent/Extensions/CityDoctorGUI/pom.xml
index 8093a133..2b07c026 100644
--- a/CityDoctorParent/Extensions/CityDoctorGUI/pom.xml
+++ b/CityDoctorParent/Extensions/CityDoctorGUI/pom.xml
@@ -6,7 +6,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
../../pom.xml
CityDoctorGUI
diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/pom.xml b/CityDoctorParent/Extensions/CityDoctorHealer/pom.xml
index 3383ecab..1d031a02 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealer/pom.xml
+++ b/CityDoctorParent/Extensions/CityDoctorHealer/pom.xml
@@ -6,7 +6,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
../../pom.xml
CityDoctorHealer
diff --git a/CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml b/CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml
index bd7e1290..8eb1cfee 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml
+++ b/CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml
@@ -7,7 +7,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
../../pom.xml
CityDoctorHealerGUI
diff --git a/CityDoctorParent/Extensions/CityDoctorHealerGenetic/pom.xml b/CityDoctorParent/Extensions/CityDoctorHealerGenetic/pom.xml
index 2e649ddd..352b8af3 100644
--- a/CityDoctorParent/Extensions/CityDoctorHealerGenetic/pom.xml
+++ b/CityDoctorParent/Extensions/CityDoctorHealerGenetic/pom.xml
@@ -4,7 +4,7 @@
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
../../pom.xml
CityDoctorHealerGenetic
diff --git a/CityDoctorParent/pom.xml b/CityDoctorParent/pom.xml
index 7c218dcc..84bc1df2 100644
--- a/CityDoctorParent/pom.xml
+++ b/CityDoctorParent/pom.xml
@@ -5,7 +5,7 @@
4.0.0
de.hft.stuttgart
CityDoctorParent
- 3.17.2
+ 3.17.3
pom
CityDoctorParent
--
GitLab
From aa9c2a9518ba825b51e5ffdbd2f0e37905c947a2 Mon Sep 17 00:00:00 2001
From: Riegel
Date: Wed, 9 Jul 2025 12:10:18 +0200
Subject: [PATCH 14/14] Test: Add ConstructiveElements to Buildings test
---
.../citydoctor2/datastructure/AbstractBuildingTest.java | 3 +++
1 file changed, 3 insertions(+)
diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
index d5e23ce6..e0cf17f4 100644
--- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
+++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractBuildingTest.java
@@ -92,6 +92,7 @@ public class AbstractBuildingTest {
AbstractBuilding ab = createAbstractBuilding();
BuildingRoom mockRoom = mock(BuildingRoom.class);
Installation mockInstallation = mock(Installation.class);
+ BuildingConstructiveElement mockConstructiveElement = mock(BuildingConstructiveElement.class);
BuildingRoomFurniture mockBuildingRoomFurniture = mock(BuildingRoomFurniture.class);
BuildingUnit mockBuildingUnit = mock(BuildingUnit.class);
Storey mockStorey = mock(Storey.class);
@@ -100,6 +101,7 @@ public class AbstractBuildingTest {
ab.addBuildingRoom(mockRoom);
ab.addBuildingInstallation(mockInstallation);
+ ab.addConstructiveElement(mockConstructiveElement);
ab.addBuildingRoomFurniture(mockBuildingRoomFurniture);
ab.addBuildingUnit(mockBuildingUnit);
ab.addStorey(mockStorey);
@@ -112,6 +114,7 @@ public class AbstractBuildingTest {
verify(mockRoom).accept(c);
verify(mockInstallation).accept(c);
+ verify(mockConstructiveElement).accept(c);
verify(mockBuildingRoomFurniture).accept(c);
verify(mockBuildingUnit).accept(c);
verify(mockStorey).accept(c);
--
GitLab