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 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