From a547878e13d01dee91ccb46737c9e797423a98f6 Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 3 Apr 2025 14:27:53 +0200 Subject: [PATCH 01/51] Refactor: Add Validator flag to Check Checkable now checks if an accepted Visitor is flagged as a Validator before setting the object as validated=true. Allows the implementation of Visitors for the Check-Engine that serve as utilities, e.g. to enable decoupled collection of all contained Geometries in a CityObject. --- .../java/de/hft/stuttgart/citydoctor2/check/Check.java | 10 ++++++++++ .../de/hft/stuttgart/citydoctor2/check/Checkable.java | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) 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 4ae958f4..a50d6bcf 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 @@ -53,6 +53,7 @@ public abstract class Check { private final List> applicableToClasses = new ArrayList<>(2); + @SuppressWarnings("unchecked") protected Check() { Method[] declaredMethods = getClass().getDeclaredMethods(); @@ -102,6 +103,15 @@ public abstract class Check { */ public abstract RequirementType getType(); + /** + * Returns whether this check validates a feature. + * + * @return true if it validates, false otherwise + */ + 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 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 0ef96239..26c7b53e 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 @@ -71,7 +71,9 @@ public abstract class Checkable implements Serializable { if (c.canExecute(this)) { c.check(this); } - setValidated(true); + if (c.isValidator()) { + setValidated(true); + } } /** -- GitLab From 8068a7de3a90d1157cd7d1fe65e622190dbe980e Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 3 Apr 2025 14:28:50 +0200 Subject: [PATCH 02/51] Feat: Add CityObjectCollector visitor --- .../stuttgart/citydoctor2/check/CheckId.java | 2 +- .../checks/util/CityObjectCollector.java | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckId.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckId.java index bcb0f822..39a74d43 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckId.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckId.java @@ -56,7 +56,7 @@ public record CheckId(String name) implements Serializable { public static final CheckId C_GE_S_NOT_CLOSED = new CheckId("C_GE_S_NOT_CLOSED"); public static final CheckId C_GE_P_ORIENTATION_RINGS_SAME = new CheckId("C_GE_P_ORIENTATION_RINGS_SAME"); public static final CheckId C_SE_POLYGON_WITHOUT_SURFACE = new CheckId("C_SE_POLYGON_WITHOUT_SURFACE"); - + public static final CheckId UTIL_CITY_OBJECT_COLLECTOR = new CheckId("UTIL_CITY_OBJECT_COLLECTOR"); @Override public boolean equals(Object obj) { diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java new file mode 100644 index 00000000..728aaed5 --- /dev/null +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java @@ -0,0 +1,50 @@ +package de.hft.stuttgart.citydoctor2.checks.util; + +import de.hft.stuttgart.citydoctor2.check.Check; +import de.hft.stuttgart.citydoctor2.check.CheckId; +import de.hft.stuttgart.citydoctor2.check.Requirement; +import de.hft.stuttgart.citydoctor2.check.RequirementType; +import de.hft.stuttgart.citydoctor2.datastructure.CityObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class CityObjectCollector extends Check { + + private final List objects = new ArrayList<>(); + + @Override + public Set appliesToRequirements() { + return Set.of(); + } + + @Override + public CheckId getCheckId() { + return CheckId.UTIL_CITY_OBJECT_COLLECTOR; + } + + @Override + public RequirementType getType() { + return null; + } + + @Override + public Check createNewInstance() { + return new CityObjectCollector(); + } + + @Override + public boolean isValidator() { + return false; + } + + public List getCityObjects() { + return objects; + } + + @Override + public void check(CityObject co) { + objects.add(co); + } +} -- GitLab From 7810d1f0aafd057e6c472747d290ac75ea781fba Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 3 Apr 2025 14:30:52 +0200 Subject: [PATCH 03/51] Refactor: Generalize Renderer refresher setup --- .../stuttgart/citydoctor2/gui/Renderer.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java index d86e5445..246a030d 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java @@ -227,20 +227,38 @@ public class Renderer { return polygons; } - public void render(BuildingPart bp) { + public void setupRefresher(CityObject co) { refresher = () -> { - Set setupBuildingPartPolygons = setupBuildingPartPolygons(bp); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBuildingPartPolygons)); - render(setupBuildingPartPolygons); + CityObjectCollector collector = new CityObjectCollector(); + co.accept(collector); + Set objectPolygons = new HashSet<>(); + collector.getCityObjects().forEach(object -> addPolygons(object, objectPolygons)); + mainWindow.zoomOutForBoundingBox(BoundingBox.of(objectPolygons)); + render(objectPolygons); Platform.runLater(() -> { - errorUpdater = () -> displayErrors(bp); + errorUpdater = () -> displayErrors(co); errorUpdater.run(); - addGenericAttributesToView(bp); + addGenericAttributesToView(co); }); }; refresher.run(); } + public void render(BuildingPart bp) { +// refresher = () -> { +// Set setupBuildingPartPolygons = setupBuildingPartPolygons(bp); +// mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBuildingPartPolygons)); +// render(setupBuildingPartPolygons); +// Platform.runLater(() -> { +// errorUpdater = () -> displayErrors(bp); +// errorUpdater.run(); +// addGenericAttributesToView(bp); +// }); +// }; +// refresher.run(); + setupRefresher(bp); + } + private Set setupBuildingPartPolygons(BuildingPart bp) { Set polygons = new HashSet<>(); addPolygons(bp, polygons); -- GitLab From 127d8834e015a58d2469c4b01df437a867a495c4 Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 3 Apr 2025 16:06:01 +0200 Subject: [PATCH 04/51] Refactor: Decouple Renderer setup from data model --- .../checks/util/CityObjectCollector.java | 7 +- .../stuttgart/citydoctor2/gui/Renderer.java | 758 +----------------- .../citydoctor2/gui/TriangulatedGeometry.java | 145 +--- 3 files changed, 31 insertions(+), 879 deletions(-) diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java index 728aaed5..cbd4138e 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java @@ -6,13 +6,12 @@ import de.hft.stuttgart.citydoctor2.check.Requirement; import de.hft.stuttgart.citydoctor2.check.RequirementType; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; import java.util.Set; public class CityObjectCollector extends Check { - private final List objects = new ArrayList<>(); + private final Set objects = new HashSet<>(); @Override public Set appliesToRequirements() { @@ -39,7 +38,7 @@ public class CityObjectCollector extends Check { return false; } - public List getCityObjects() { + public Set getCityObjects() { return objects; } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java index 246a030d..56302b8a 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java @@ -2,6 +2,7 @@ package de.hft.stuttgart.citydoctor2.gui; import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.Checkable; +import de.hft.stuttgart.citydoctor2.checks.util.CityObjectCollector; import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter; import de.hft.stuttgart.citydoctor2.gui.tree.*; @@ -177,56 +178,6 @@ public class Renderer { } } - public void render(Building building) { - refresher = () -> { - Set setupBuildingPolygons = setupBuildingPolygons(building); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBuildingPolygons)); - render(setupBuildingPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(building); - errorUpdater.run(); - addGenericAttributesToView(building); - }); - }; - refresher.run(); - } - - private Set setupBuildingPolygons(Building b) { - Set polygons = new HashSet<>(); - addPolygons(b, polygons); - for (BoundarySurface bs : b.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - for (Installation bi : b.getBuildingInstallations()) { - addPolygons(bi, polygons); - for (BoundarySurface bs : bi.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - } - for (BuildingRoom br : b.getBuildingRooms()) { - addPolygons(br, polygons); - for (BoundarySurface bs : br.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - for (BuildingRoomFurniture brf : b.getBuildingRoomFurnitureList()) { - addPolygons(brf, polygons); - for (BoundarySurface bs : brf.getBoundarySurfaceList()) { - addPolygons(bs, polygons); - } - } - for (BuildingPart bp : b.getBuildingParts()) { - polygons.addAll(setupBuildingPartPolygons(bp)); - } - return polygons; - } - public void setupRefresher(CityObject co) { refresher = () -> { CityObjectCollector collector = new CityObjectCollector(); @@ -244,428 +195,8 @@ public class Renderer { refresher.run(); } - public void render(BuildingPart bp) { -// refresher = () -> { -// Set setupBuildingPartPolygons = setupBuildingPartPolygons(bp); -// mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBuildingPartPolygons)); -// render(setupBuildingPartPolygons); -// Platform.runLater(() -> { -// errorUpdater = () -> displayErrors(bp); -// errorUpdater.run(); -// addGenericAttributesToView(bp); -// }); -// }; -// refresher.run(); - setupRefresher(bp); - } - - private Set setupBuildingPartPolygons(BuildingPart bp) { - Set polygons = new HashSet<>(); - addPolygons(bp, polygons); - for (BoundarySurface bs : bp.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - for (Installation bi : bp.getBuildingInstallations()) { - addPolygons(bi, polygons); - for (BoundarySurface bs : bi.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - } - return polygons; - } - - public void render(AbstractRoom room) { - refresher = () -> { - Set setupRoomPolygons = setupRoomPolygons(room); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupRoomPolygons)); - render(setupRoomPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(room); - errorUpdater.run(); - addGenericAttributesToView(room); - }); - }; - refresher.run(); - } - - private Set setupRoomPolygons(AbstractRoom room) { - Set polygons = new HashSet<>(); - addPolygons(room, polygons); - for (BoundarySurface bs : room.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - return polygons; - } - - public void render(AbstractFurniture furniture) { - refresher = () -> { - Set setupFurniturePolygons = setupFurniturePolygons(furniture); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupFurniturePolygons)); - render(setupFurniturePolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(furniture); - errorUpdater.run(); - addGenericAttributesToView(furniture); - }); - }; - refresher.run(); - } - - private Set setupFurniturePolygons(AbstractFurniture furniture) { - Set polygons = new HashSet<>(); - addPolygons(furniture, polygons); - for (BoundarySurface bs : furniture.getBoundarySurfaceList()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - return polygons; - } - - public void render(Storey storey) { - refresher = () -> { - Set setupStoreyPolygons = setupStoreyPolygons(storey); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupStoreyPolygons)); - render(setupStoreyPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(storey); - errorUpdater.run(); - addGenericAttributesToView(storey); - }); - }; - refresher.run(); - } - - private Set setupStoreyPolygons(Storey storey) { - Set polygons = new HashSet<>(); - addPolygons(storey, polygons); - for (BoundarySurface bs : storey.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - return polygons; - } - - public void render(BuildingUnit buildingUnit) { - refresher = () -> { - Set setupBuildingUnitPolgons = setupBuildingUnitPolygons(buildingUnit); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBuildingUnitPolgons)); - render(setupBuildingUnitPolgons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(buildingUnit); - errorUpdater.run(); - addGenericAttributesToView(buildingUnit); - }); - }; - refresher.run(); - } - - private Set setupBuildingUnitPolygons(BuildingUnit buildingUnit) { - Set polygons = new HashSet<>(); - addPolygons(buildingUnit, polygons); - for (BoundarySurface bs : buildingUnit.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - return polygons; - } - - private Set setupTransportationObjectPolygons(TransportationObject to) { - Set polygons = new HashSet<>(); - addPolygons(to, polygons); - - if (to instanceof TransportationSpace ts) { - if (ts instanceof TopLevelTransportFeature top) { - for (TransportSection sect : top.getSections()) { - polygons.addAll(setupTransportationObjectPolygons(sect)); - } - for (TransportSection isect : top.getIntersections()) { - polygons.addAll(setupTransportationObjectPolygons(isect)); - } - } - for (TrafficSpaceObject tso : ts.getTrafficSpaces()) { - polygons.addAll(setupTransportationObjectPolygons(tso)); - } - for (TrafficSpaceObject atso : ts.getAuxTrafficSpaces()) { - polygons.addAll(setupTransportationObjectPolygons(atso)); - } - } - - if (to instanceof TrafficSpaceObject tso) { - for (TrafficAreaObject tao : tso.getTrafficAreas()) { - polygons.addAll(setupTransportationObjectPolygons(tao)); - } - } - return polygons; - } - - public void render(Tunnel tunnel) { - refresher = () -> { - Set setupTunnelPolygons = setupTunnelPolygons(tunnel); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupTunnelPolygons)); - render(setupTunnelPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(tunnel); - errorUpdater.run(); - addGenericAttributesToView(tunnel); - }); - }; - refresher.run(); - } - - private Set setupTunnelPolygons(Tunnel tunnel) { - Set polygons = new HashSet<>(); - addPolygons(tunnel, polygons); - for (BoundarySurface bs : tunnel.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - for (Installation ti : tunnel.getTunnelInstallations()) { - addPolygons(ti, polygons); - for (BoundarySurface bs : ti.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - } - for (TunnelHollow th : tunnel.getTunnelHollows()) { - addPolygons(th, polygons); - for (BoundarySurface bs : th.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - for (TunnelFurniture tf : tunnel.getTunnelFurniture()) { - addPolygons(tf, polygons); - for (BoundarySurface bs : tf.getBoundarySurfaceList()) { - addPolygons(bs, polygons); - } - } - for (TunnelPart tp : tunnel.getTunnelParts()) { - polygons.addAll(setupTunnelPartPolygons(tp)); - } - return polygons; - } - - private Set setupTunnelPartPolygons(TunnelPart tp) { - Set polygons = new HashSet<>(); - addPolygons(tp, polygons); - for (BoundarySurface bs : tp.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - for (Installation bi : tp.getTunnelInstallations()) { - addPolygons(bi, polygons); - for (BoundarySurface bs : bi.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - } - return polygons; - } - - public void render(BridgeObject bridge) { - refresher = () -> { - Set setupBridgePolygons = setupBridgePolygons(bridge); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBridgePolygons)); - render(setupBridgePolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(bridge); - errorUpdater.run(); - addGenericAttributesToView(bridge); - }); - }; - refresher.run(); - } - - private Set setupBridgePolygons(BridgeObject bridge) { - Set polygons = new HashSet<>(); - addPolygons(bridge, polygons); - for (BoundarySurface bs : bridge.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - for (BridgeConstructiveElement consElement : bridge.getConstructiveElements()) { - addPolygons(consElement, polygons); - for (BoundarySurface bs : consElement.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - for (Installation inst : bridge.getBridgeInstallations()) { - addPolygons(inst, polygons); - for (BoundarySurface bs : inst.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - return polygons; - } - public void render(CityObject co) { - refresher = () -> { - Set setupCityObjectPolygons = setupCityObjectPolygons(co); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupCityObjectPolygons)); - render(setupCityObjectPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(co); - errorUpdater.run(); - addGenericAttributesToView(co); - }); - }; - refresher.run(); - } - - public void render(ReliefObject relief) { - refresher = () -> { - Set setupCityObjectPolygons = setupReliefPolygons(relief); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupCityObjectPolygons)); - render(setupCityObjectPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(relief); - errorUpdater.run(); - addGenericAttributesToView(relief); - }); - }; - refresher.run(); - } - - private Set setupReliefPolygons(ReliefObject relief) { - Set polygons = new HashSet<>(); - addPolygons(relief, polygons); - for (TinObject tin : relief.getComponents()) { - addPolygons(tin, polygons); - } - return polygons; - } - - public void render(Installation bi) { - refresher = () -> { - Set setupCityObjectPolygons = setupBuildingInstallationPolygons(bi); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupCityObjectPolygons)); - render(setupCityObjectPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(bi); - errorUpdater.run(); - addGenericAttributesToView(bi); - }); - }; - refresher.run(); - } - - private Set setupBuildingInstallationPolygons(Installation bi) { - Set polygons = new HashSet<>(); - addPolygons(bi, polygons); - for (BoundarySurface bs : bi.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - return polygons; - } - - public void render(CityFurniture cf) { - refresher = () -> { - Set setupCityFurniturePolygons = setupCityFurniturePolygons(cf); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupCityFurniturePolygons)); - render(setupCityFurniturePolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(cf); - errorUpdater.run(); - addGenericAttributesToView(cf); - }); - }; - refresher.run(); - } - - private Set setupCityFurniturePolygons(CityFurniture cf) { - Set polygons = new HashSet<>(); - addPolygons(cf, polygons); - return polygons; - } - - public void render(GenericCityObject gco) { - refresher = () -> { - Set setupGenericCityObjectPolygons = setupGenericCityObjectPolygons(gco); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupGenericCityObjectPolygons)); - render(setupGenericCityObjectPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(gco); - errorUpdater.run(); - addGenericAttributesToView(gco); - }); - }; - refresher.run(); - } - - private Set setupGenericCityObjectPolygons(GenericCityObject gco) { - Set polygons = new HashSet<>(); - addPolygons(gco, polygons); - for (BoundarySurface bs : gco.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - } - return polygons; - } - - public void render(TransportationObject to) { - refresher = () -> { - Set setupTransportationPolygons = setupTransportationObjectPolygons(to); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupTransportationPolygons)); - render(setupTransportationPolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(to); - errorUpdater.run(); - addGenericAttributesToView(to); - }); - }; - refresher.run(); - } - - public void render(BoundarySurface bs) { - refresher = () -> { - Set setupBoundarySurfacePolygons = setupBoundarySurfacePolygons(bs); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBoundarySurfacePolygons)); - render(setupBoundarySurfacePolygons); - Platform.runLater(() -> { - errorUpdater = () -> displayErrors(bs); - errorUpdater.run(); - addGenericAttributesToView(bs); - }); - }; - refresher.run(); - } - - private Set setupBoundarySurfacePolygons(BoundarySurface bs) { - Set polygons = new HashSet<>(); - addPolygons(bs, polygons); - for (Opening op : bs.getOpenings()) { - addPolygons(op, polygons); - } - return polygons; - } - - private Set setupCityObjectPolygons(CityObject co) { - Set polygons = new HashSet<>(); - addPolygons(co, polygons); - return polygons; + setupRefresher(co); } private void addPolygons(CityObject co, Set polygons) { @@ -826,36 +357,7 @@ public class Renderer { } public void renderBuildings(List objects) { - errorUpdater = null; - refresher = () -> { - Platform.runLater(() -> { - loadingDialog.show(); - clearGeometryTrees(); - clearAttributes(); - }); - Thread t = new Thread(() -> { - Set polygons = new HashSet<>(); - for (Building b : objects) { - collectBuildingPolygons(polygons, b); - for (BuildingPart bp : b.getBuildingParts()) { - collectBuildingPolygons(polygons, bp); - } - } - currentTriGeom = TriangulatedGeometry.of(polygons); - errVisitor.setGeometry(currentTriGeom); - Platform.runLater(() -> { - setupRenderState(); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(polygons)); - loadingDialog.hide(); - }); - }); - t.setUncaughtExceptionHandler((thread, e) -> { - Platform.runLater(() -> loadingDialog.hide()); - logger.catching(e); - }); - t.start(); - }; - refresher.run(); + renderCityObjects(objects, null); } public void render(CityDoctorModel model) { @@ -889,66 +391,11 @@ public class Renderer { } public void renderTransportation(List transportation) { - errorUpdater = null; - refresher = () -> { - Platform.runLater(() -> { - loadingDialog.show(); - clearGeometryTrees(); - clearAttributes(); - }); - Thread t = new Thread(() -> { - Set polygons = new HashSet<>(); - for (TransportationObject to : transportation) { - polygons.addAll(setupTransportationObjectPolygons(to)); - } - currentTriGeom = TriangulatedGeometry.of(polygons, Color.YELLOW); - errVisitor.setGeometry(currentTriGeom); - Platform.runLater(() -> { - setupRenderState(); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(polygons)); - loadingDialog.hide(); - }); - }); - t.setUncaughtExceptionHandler((thread, e) -> { - Platform.runLater(() -> loadingDialog.hide()); - logger.catching(e); - }); - t.start(); - }; - refresher.run(); + renderCityObjects(transportation, Color.YELLOW); } public void renderBridges(List bridges) { - errorUpdater = null; - refresher = () -> { - Platform.runLater(() -> { - loadingDialog.show(); - clearGeometryTrees(); - clearAttributes(); - }); - Thread t = new Thread(() -> { - Set polygons = new HashSet<>(); - for (BridgeObject b : bridges) { - collectBridgePolygons(polygons, b); - for (BridgeObject bp : b.getParts()) { - collectBridgePolygons(polygons, bp); - } - } - currentTriGeom = TriangulatedGeometry.of(polygons, Color.CORAL); - errVisitor.setGeometry(currentTriGeom); - Platform.runLater(() -> { - setupRenderState(); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(polygons)); - loadingDialog.hide(); - }); - }); - t.setUncaughtExceptionHandler((thread, e) -> { - Platform.runLater(() -> loadingDialog.hide()); - logger.catching(e); - }); - t.start(); - }; - refresher.run(); + renderCityObjects(bridges, Color.CORAL); } public void renderWater(List water) { @@ -956,72 +403,13 @@ public class Renderer { } public void renderCityFurniture(List cityFurniture) { - errorUpdater = null; - refresher = () -> { - Platform.runLater(() -> { - loadingDialog.show(); - clearGeometryTrees(); - clearAttributes(); - }); - Thread t = new Thread(() -> { - Set polygons = new HashSet<>(); - for (CityFurniture cf : cityFurniture) { - collectCityFurniture(polygons, cf); - } - currentTriGeom = TriangulatedGeometry.of(polygons, Color.BLUEVIOLET); - errVisitor.setGeometry(currentTriGeom); - Platform.runLater(() -> { - setupRenderState(); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(polygons)); - loadingDialog.hide(); - }); - }); - t.setUncaughtExceptionHandler((thread, e) -> { - Platform.runLater(() -> loadingDialog.hide()); - logger.catching(e); - }); - t.start(); - }; - refresher.run(); - + renderCityObjects(cityFurniture, Color.BLUEVIOLET); } public void renderTerrain(List land) { - renderLandObjects(land, Color.BROWN); + renderCityObjects(land, Color.BROWN); } - private void renderLandObjects(List cos, Color baseColor) { - errorUpdater = null; - refresher = () -> { - Platform.runLater(() -> { - loadingDialog.show(); - clearGeometryTrees(); - clearAttributes(); - }); - Thread t = new Thread(() -> { - Set polygons = new HashSet<>(); - for (CityObject co : cos) { - addPolygons(co, polygons); - if (co instanceof ReliefObject) { - ReliefObject relief = (ReliefObject) co; - for (TinObject tin : relief.getComponents()) { - addPolygons(tin, polygons); - } - } - } - currentTriGeom = TriangulatedGeometry.of(polygons, baseColor); - errVisitor.setGeometry(currentTriGeom); - Platform.runLater(() -> { - setupRenderState(); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(polygons)); - loadingDialog.hide(); - }); - }); - t.setUncaughtExceptionHandler((thread, e) -> Platform.runLater(() -> loadingDialog.hide())); - t.start(); - }; - refresher.run(); - } public void renderCityObjects(List cos, Color baseColor) { errorUpdater = null; @@ -1033,10 +421,14 @@ public class Renderer { }); Thread t = new Thread(() -> { Set polygons = new HashSet<>(); - for (CityObject co : cos) { - addPolygons(co, polygons); + CityObjectCollector collector = new CityObjectCollector(); + cos.forEach(cityObject -> cityObject.accept(collector)); + collector.getCityObjects().forEach(cityObject -> addPolygons(cityObject, polygons)); + if (baseColor != null) { + currentTriGeom = TriangulatedGeometry.of(polygons, baseColor); + } else { + currentTriGeom = TriangulatedGeometry.of(polygons); } - currentTriGeom = TriangulatedGeometry.of(polygons, baseColor); errVisitor.setGeometry(currentTriGeom); Platform.runLater(() -> { setupRenderState(); @@ -1051,129 +443,9 @@ public class Renderer { } public void renderTunnels(List objects) { - errorUpdater = null; - refresher = () -> { - Platform.runLater(() -> { - loadingDialog.show(); - clearGeometryTrees(); - clearAttributes(); - }); - Thread t = new Thread(() -> { - Set polygons = new HashSet<>(); - for (Tunnel tunnel : objects) { - collectTunnelPolygons(polygons, tunnel); - for (TunnelPart tp : tunnel.getTunnelParts()) { - collectTunnelPolygons(polygons, tp); - } - } - currentTriGeom = TriangulatedGeometry.of(polygons); - errVisitor.setGeometry(currentTriGeom); - Platform.runLater(() -> { - setupRenderState(); - mainWindow.zoomOutForBoundingBox(BoundingBox.of(polygons)); - loadingDialog.hide(); - }); - }); - t.setUncaughtExceptionHandler((thread, e) -> { - Platform.runLater(() -> loadingDialog.hide()); - logger.catching(e); - }); - t.start(); - }; - refresher.run(); - } - - private void collectBuildingPolygons(Set polygons, AbstractBuilding ab) { - addPolygons(ab, polygons); - for (Installation bi : ab.getBuildingInstallations()) { - addPolygons(bi, polygons); - for (BoundarySurface bs : bi.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening o : bs.getOpenings()) { - addPolygons(o, polygons); - } - } - } - for (BuildingRoom br : ab.getBuildingRooms()) { - addPolygons(br, polygons); - for (BoundarySurface bs : br.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - for (BoundarySurface bs : ab.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening o : bs.getOpenings()) { - addPolygons(o, polygons); - } - } + renderCityObjects(objects, Color.DARKGRAY); } - private void collectBridgePolygons(Set polygons, BridgeObject br) { - addPolygons(br, polygons); - for (Installation bi : br.getBridgeInstallations()) { - addPolygons(bi, polygons); - for (BoundarySurface bs : bi.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening o : bs.getOpenings()) { - addPolygons(o, polygons); - } - } - } - for (BridgeRoom r : br.getBridgeRooms()) { - addPolygons(r, polygons); - for (BoundarySurface bs : r.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - for (BridgeConstructiveElement bce : br.getConstructiveElements()) { - addPolygons(bce, polygons); - for (BoundarySurface bs : bce.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - for (BoundarySurface bs : br.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening o : bs.getOpenings()) { - addPolygons(o, polygons); - } - } - - } - - public void collectTunnelPolygons(Set polygons, AbstractTunnel at) { - addPolygons(at, polygons); - for (Installation ti : at.getTunnelInstallations()) { - addPolygons(ti, polygons); - for (BoundarySurface bs : ti.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening o : bs.getOpenings()) { - addPolygons(o, polygons); - } - } - } - for (TunnelHollow th : at.getTunnelHollows()) { - addPolygons(th, polygons); - for (BoundarySurface bs : th.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - for (TunnelConstructiveElement tce : at.getTunnelConstructiveElements()) { - addPolygons(tce, polygons); - for (BoundarySurface bs : tce.getBoundarySurfaces()) { - addPolygons(bs, polygons); - } - } - for (BoundarySurface bs : at.getBoundarySurfaces()) { - addPolygons(bs, polygons); - for (Opening o : bs.getOpenings()) { - addPolygons(o, polygons); - } - } - } - - private void collectCityFurniture(Set polygons, CityFurniture cf) { - addPolygons(cf, polygons); - } private void addConcretePolygons(Set polygons, Geometry geom) { for (Polygon p : geom.getPolygons()) { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java index 5279c8a5..c0302026 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java @@ -1,5 +1,6 @@ package de.hft.stuttgart.citydoctor2.gui; +import de.hft.stuttgart.citydoctor2.checks.util.CityObjectCollector; import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter; @@ -12,6 +13,7 @@ import javafx.scene.paint.PhongMaterial; import javafx.scene.shape.*; import java.util.*; +import java.util.stream.Collectors; public class TriangulatedGeometry { @@ -75,22 +77,17 @@ public class TriangulatedGeometry { public static TriangulatedGeometry of(CityDoctorModel model, List filters) { List points = new ArrayList<>(); - addPointsFromBuildings(model.getBuildings(), points); - addPointsFromCityObject(model.getBridges(), points); - addPointsFromCityObject(model.getLand(), points); - addPointsFromTransportationObjects(model.getTransportation(), points); - addPointsFromCityObject(model.getVegetation(), points); - addPointsFromCityObject(model.getWater(), points); + addPointsFromCityObject(model.createFeatureStream().toList(), points); TriangulatedGeometry triGeom = new TriangulatedGeometry(); triGeom.materials = new ArrayList<>(); triGeom.meshes = new ArrayList<>(); triGeom.movedBy = triGeom.findCenter(points); - - addPolygonDataFromBuildings(model.getBuildings(), triGeom, filters); - addPolygonDataFromBridges(model.getBridges(), triGeom, filters); + + addPolygonDataFromCityObjects(model.getBuildings(), triGeom, Color.WHITE, filters); + addPolygonDataFromCityObjects(model.getBridges(), triGeom, Color.CORAL, filters); addPolygonDataFromCityObjects(model.getLand(), triGeom, Color.BROWN, filters); - addPolygonDataFromTransportationObjects(model.getTransportation(), triGeom, filters); + addPolygonDataFromCityObjects(model.getTransportation(), triGeom, Color.YELLOW, filters); addPolygonDataFromCityObjects(model.getVegetation(), triGeom, Color.LIGHTGREEN, filters); addPolygonDataFromCityObjects(model.getWater(), triGeom, Color.LIGHTSKYBLUE, filters); addPolygonDataFromCityObjects(model.getCityFurniture(), triGeom, Color.BLUEVIOLET, filters); @@ -98,94 +95,14 @@ public class TriangulatedGeometry { return triGeom; } - - private static void addPolygonDataFromBuildings(List buildings, TriangulatedGeometry triGeom, List filters) { - for (Building b : buildings) { - addPolygonData(b, triGeom, Color.WHITE, filters); - addPolygonDataFromBoundarySurfaces(b.getBoundarySurfaces(), triGeom, filters); - addPolygonDataFromCityObjects(b.getBuildingInstallations(), triGeom, Color.WHITE, filters); - for (Installation bi : b.getBuildingInstallations()) { - addPolygonDataFromCityObjects(bi.getBoundarySurfaces(), triGeom, Color.WHITE, filters); - } - for (BuildingPart bp : b.getBuildingParts()) { - addPolygonData(bp, triGeom, Color.WHITE, filters); - addPolygonDataFromBoundarySurfaces(bp.getBoundarySurfaces(), triGeom, filters); - addPolygonDataFromCityObjects(bp.getBuildingInstallations(), triGeom, Color.WHITE, filters); - } - } - } - - private static void addPolygonDataFromBridges(List bridges, TriangulatedGeometry triGeom, List filters) { - for (BridgeObject b : bridges) { - addPolygonData(b, triGeom, Color.CORAL, filters); - addPolygonDataFromBoundarySurfaces(b.getBoundarySurfaces(), triGeom, filters); - addPolygonDataFromCityObjects(b.getBridgeInstallations(), triGeom, Color.CORAL, filters); - for (Installation bi : b.getBridgeInstallations()) { - addPolygonData(bi, triGeom, Color.CORAL, filters); - addPolygonDataFromCityObjects(bi.getBoundarySurfaces(), triGeom, Color.CORAL, filters); - } - for (BridgeConstructiveElement bce : b.getConstructiveElements()) { - addPolygonData(bce, triGeom, Color.CORAL, filters); - addPolygonDataFromCityObjects(bce.getBoundarySurfaces(), triGeom, Color.CORAL, filters); - } - addPolygonDataFromBridges(b.getParts(), triGeom, filters); - } - } - - private static void addPolygonDataFromTransportationObjects(List tos, TriangulatedGeometry triGeom, - List filters) { - for (TransportationObject to : tos) { - if (to instanceof TransportationSpace tsp) { - addPolygonDataFromTransportationSpace(tsp, triGeom, filters); - if (tsp instanceof TopLevelTransportFeature top) { - for (TransportSection tse : top.getSections()) { - addPolygonDataFromTransportationSpace(tse, triGeom, filters); - } - for (TransportSection tse : top.getIntersections()) { - addPolygonDataFromTransportationSpace(tse, triGeom, filters); - } - } - } else { - addPolygonData(to, triGeom, Color.YELLOW, filters); - } - } - } - - private static void addPolygonDataFromTransportationSpace(TransportationSpace ts, TriangulatedGeometry triGeom, - List filters) { - addPolygonData(ts, triGeom, Color.YELLOW, filters); - addPolygonDataFromTrafficSpaces(ts.getTrafficSpaces(), triGeom, filters); - addPolygonDataFromTrafficSpaces(ts.getAuxTrafficSpaces(), triGeom, filters); - } - - private static void addPolygonDataFromTrafficSpaces(List spaces, TriangulatedGeometry triGeom, - List filters) { - for (TrafficSpaceObject space : spaces) { - addPolygonData(space, triGeom, Color.YELLOW, filters); - for (TrafficAreaObject area : space.getTrafficAreas()) { - addPolygonData(area, triGeom, Color.YELLOW, filters); - } - } - } - - private static void addPolygonDataFromBoundarySurfaces(List boundarySurfaces, - TriangulatedGeometry triGeom, List filters) { - for (BoundarySurface bs : boundarySurfaces) { - addPolygonData(bs, triGeom, Color.WHITE, filters); - for (Opening o : bs.getOpenings()) { - addPolygonData(o, triGeom, Color.WHITE, filters); - } - } - } - private static void addPolygonDataFromCityObjects(List cos, TriangulatedGeometry triGeom, Color color, List filters) { - for (CityObject co : cos) { - addPolygonData(co, triGeom, color, filters); - } + CityObjectCollector collector = new CityObjectCollector(); + cos.forEach(cityObject -> cityObject.accept(collector)); + collector.getCityObjects().forEach(cityObject -> addPolygonData(cityObject, triGeom, color, filters)); } private static void addPolygonData(CityObject co, TriangulatedGeometry triGeom, Color color, List filters) { @@ -213,46 +130,10 @@ public class TriangulatedGeometry { return true; } - private static void addPointsFromBuildings(List buildings, List points) { - for (Building b : buildings) { - addPoints(b, points); - for (BuildingPart bp : b.getBuildingParts()) { - addPoints(bp, points); - addPointsFromCityObject(bp.getBoundarySurfaces(), points); - addPointsFromCityObject(bp.getBuildingInstallations(), points); - } - addPointsFromCityObject(b.getBoundarySurfaces(), points); - addPointsFromCityObject(b.getBuildingInstallations(), points); - } - } - - private static void addPointsFromTransportationObjects(List tos, List points) { - for (TransportationObject to : tos) { - addPoints(to, points); - if (to instanceof TransportationSpace ts) { - addPointsFromTrafficSpace(ts.getTrafficSpaces(), points); - addPointsFromTrafficSpace(ts.getAuxTrafficSpaces(), points); - if (ts instanceof TopLevelTransportFeature top) { - addPointsFromTransportationObjects(top.getSections(), points); - addPointsFromTransportationObjects(top.getIntersections(), points); - } - } - } - } - - private static void addPointsFromTrafficSpace(List tos, List points) { - for (TrafficSpaceObject to : tos) { - addPoints(to, points); - for (TrafficAreaObject area : to.getTrafficAreas()) { - addPoints(area, points); - } - } - } - private static void addPointsFromCityObject(List cos, List points) { - for (CityObject co : cos) { - addPoints(co, points); - } + CityObjectCollector collector = new CityObjectCollector(); + cos.forEach(cityObject -> cityObject.accept(collector)); + collector.getCityObjects().forEach(cityObject -> addPoints(cityObject, points)); } private static void addPoints(CityObject co, List points) { -- GitLab From 3278359b3234fba6f6a2e86c48c8e69d5b6be5c1 Mon Sep 17 00:00:00 2001 From: Riegel Date: Fri, 4 Apr 2025 10:00:04 +0200 Subject: [PATCH 05/51] Refactor: Make AbstractCheck non-validating --- .../de/hft/stuttgart/citydoctor2/check/AbstractCheck.java | 5 +++++ 1 file changed, 5 insertions(+) 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/AbstractCheck.java index 85d048f4..b9486381 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/AbstractCheck.java @@ -50,4 +50,9 @@ public class AbstractCheck extends Check { return null; } + @Override + public boolean isValidator() { + return false; + } + } -- GitLab From e4a745a8725343803f20e51e47b948b43b176fad Mon Sep 17 00:00:00 2001 From: Riegel Date: Fri, 4 Apr 2025 10:06:13 +0200 Subject: [PATCH 06/51] Refactor: Simplify CityObjectCollector --- .../stuttgart/citydoctor2/check/CheckId.java | 1 - .../checks/util/CityObjectCollector.java | 32 ++----------------- 2 files changed, 2 insertions(+), 31 deletions(-) diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckId.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckId.java index 39a74d43..f793d8db 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckId.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/CheckId.java @@ -56,7 +56,6 @@ public record CheckId(String name) implements Serializable { public static final CheckId C_GE_S_NOT_CLOSED = new CheckId("C_GE_S_NOT_CLOSED"); public static final CheckId C_GE_P_ORIENTATION_RINGS_SAME = new CheckId("C_GE_P_ORIENTATION_RINGS_SAME"); public static final CheckId C_SE_POLYGON_WITHOUT_SURFACE = new CheckId("C_SE_POLYGON_WITHOUT_SURFACE"); - public static final CheckId UTIL_CITY_OBJECT_COLLECTOR = new CheckId("UTIL_CITY_OBJECT_COLLECTOR"); @Override public boolean equals(Object obj) { diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java index cbd4138e..f3124981 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java @@ -1,43 +1,15 @@ package de.hft.stuttgart.citydoctor2.checks.util; -import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckId; -import de.hft.stuttgart.citydoctor2.check.Requirement; -import de.hft.stuttgart.citydoctor2.check.RequirementType; +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import java.util.HashSet; import java.util.Set; -public class CityObjectCollector extends Check { +public class CityObjectCollector extends AbstractCheck { private final Set objects = new HashSet<>(); - @Override - public Set appliesToRequirements() { - return Set.of(); - } - - @Override - public CheckId getCheckId() { - return CheckId.UTIL_CITY_OBJECT_COLLECTOR; - } - - @Override - public RequirementType getType() { - return null; - } - - @Override - public Check createNewInstance() { - return new CityObjectCollector(); - } - - @Override - public boolean isValidator() { - return false; - } - public Set getCityObjects() { return objects; } -- GitLab From c07d326d39ebf47ae34d37513067989378701444 Mon Sep 17 00:00:00 2001 From: Riegel Date: Fri, 4 Apr 2025 13:48:46 +0200 Subject: [PATCH 07/51] Refactor: Replace if-else with switch --- .../stuttgart/citydoctor2/gui/MainWindow.java | 33 +++++++------------ 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java index 055556f9..f0489792 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java @@ -1161,27 +1161,18 @@ public class MainWindow extends Application { private Pair> getFeatureTabOf(CityObject co) { FeatureType coType = co.getFeatureType(); - if (coType == FeatureType.BUILDING){ - return new Pair<>(buildingsTab, buildingsView); - } else if (coType == FeatureType.VEGETATION){ - return new Pair<>(vegetationTab, vegetationView); - } else if (coType == FeatureType.TRANSPORTATION){ - return new Pair<>(transportationTab,transView); - } else if (coType == FeatureType.TUNNEL){ - return new Pair<>(tunnelTab, tunnelView); - } else if (coType == FeatureType.BRIDGE){ - return new Pair<>(bridgeTab, bridgeView); - } else if (coType == FeatureType.WATER){ - return new Pair<>(waterTab, waterView); - } else if (coType == FeatureType.LAND){ - return new Pair<>(terrainTab, terrainView); - } else if (coType == FeatureType.CITY_FURNITURE){ - return new Pair<>(cityFurnitureTab, cityFurnitureView); - } else if (coType == FeatureType.GENERIC_CITY_OBJECT){ - return new Pair<>(otherObjectsTab, otherObjectsView); - } else { - throw new IllegalArgumentException("unknown feature type: " + coType); - } + return switch (coType) { + case BUILDING -> new Pair<>(buildingsTab, buildingsView); + case VEGETATION -> new Pair<>(vegetationTab, vegetationView); + case TRANSPORTATION -> new Pair<>(transportationTab, transView); + case TUNNEL -> new Pair<>(tunnelTab, tunnelView); + case BRIDGE -> new Pair<>(bridgeTab, bridgeView); + case WATER -> new Pair<>(waterTab, waterView); + case LAND -> new Pair<>(terrainTab, terrainView); + case CITY_FURNITURE -> new Pair<>(cityFurnitureTab, cityFurnitureView); + case GENERIC_CITY_OBJECT -> new Pair<>(otherObjectsTab, otherObjectsView); + default -> throw new IllegalArgumentException("unknown feature type: " + coType); + }; } public MainToolBar getMainToolbar() { -- GitLab From 55674e879755f06acd0d38fdb05bf6e472260c1c Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 15:21:36 +0200 Subject: [PATCH 08/51] Docs: Add JavaDoc --- .../de/hft/stuttgart/citydoctor2/check/AbstractCheck.java | 8 +++++--- .../citydoctor2/checks/util/CityObjectCollector.java | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) 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/AbstractCheck.java index b9486381..ae73cd97 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/AbstractCheck.java @@ -22,13 +22,15 @@ import java.util.Collections; import java.util.Set; /** - * This is an empty implementation for a check. Can be used as a normal visitor - * for the city doctor data model + * + * 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 * */ -public class AbstractCheck extends Check { +public abstract class AbstractCheck extends Check { @Override public Set appliesToRequirements() { diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java index f3124981..0ff1e832 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java @@ -6,6 +6,9 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import java.util.HashSet; import java.util.Set; +/** + * This AbstractCheck collects all CityObjects in the substructure of a Feature. + */ public class CityObjectCollector extends AbstractCheck { private final Set objects = new HashSet<>(); -- GitLab From ac5a3aa71ae3aa7dfeadaf0fd7437a3aef997536 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 15:23:07 +0200 Subject: [PATCH 09/51] Test: Fix testcase --- .../stuttgart/citydoctor2/datastructure/BridgeObjectTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 7f9450b1..7c16663f 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 @@ -68,7 +68,8 @@ public class BridgeObjectTest { assertEquals(1, bsCounter.intValue()); AtomicInteger boCounter2 = new AtomicInteger(0); - c = new AbstractCheck(); + c = new AbstractCheck() { + }; bo.accept(c); assertEquals(0, boCounter2.intValue()); } -- GitLab From 38c8db7d3b6cd4f2d684a2cbb6217563dfe1d92a Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 15:31:34 +0200 Subject: [PATCH 10/51] Refactor: Generalize FeatureTab-node implementation --- .../stuttgart/citydoctor2/gui/MainWindow.java | 57 +++++++------------ .../gui/tree/CityObjectGroupNode.java | 37 ++++++++++++ .../citydoctor2/gui/tree/CityObjectNode.java | 5 ++ .../citydoctor2/gui/tree/Renderable.java | 23 ++++++++ .../gui/tree/TopLevelCityObjectNode.java | 47 +++++++++++++++ 5 files changed, 134 insertions(+), 35 deletions(-) create mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectGroupNode.java create mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TopLevelCityObjectNode.java diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java index f0489792..58810fd5 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java @@ -6,7 +6,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.BoundingBox; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import de.hft.stuttgart.citydoctor2.datastructure.FeatureType; import de.hft.stuttgart.citydoctor2.gui.logger.GuiLogger; -import de.hft.stuttgart.citydoctor2.gui.tree.FeatureNode; import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; import de.hft.stuttgart.citydoctor2.gui.tree.RenderableTreeCell; import de.hft.stuttgart.citydoctor2.parameter.ArgumentParser; @@ -45,7 +44,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; -import static javafx.scene.input.Clipboard.getSystemClipboard; public class MainWindow extends Application { @@ -789,46 +787,35 @@ public class MainWindow extends Application { private void setupFeatureTabContextMenu(TreeView featureView) { ContextMenu menu = new ContextMenu(); - MenuItem mi = new MenuItem(Localization.getText("MainWindow.export")); - mi.setOnAction(ea -> { - Renderable render = featureView.getSelectionModel().getSelectedItem().getValue(); - if (render instanceof FeatureNode node) { - try { - controller.export(node.getFeature()); - logger.info(Localization.getText("CityDoctorController.exportSuccess")); - } catch (Exception e) { - logger.error("Export failed: Unexpected error occurred"); - logger.error(e); - } - } else { - logger.info(Localization.getText("MainWindow.infoTopLevelExport")); - } + MenuItem exportOption = new MenuItem(Localization.getText("MainWindow.export")); + exportOption.setOnAction(ea -> { + Renderable node = featureView.getSelectionModel().getSelectedItem().getValue(); + fetchExportAction(node); }); - menu.getItems().add(mi); - - MenuItem clipMi = new MenuItem(Localization.getText("MainWindow.copyId")); - clipMi.setOnAction(ea -> { - Renderable render = featureView.getSelectionModel().getSelectedItem().getValue(); - if (render instanceof FeatureNode node) { - Clipboard clipboard = getSystemClipboard(); - ClipboardContent content = new ClipboardContent(); - content.putString(node.getFeature().getGmlId().toString()); - if (!clipboard.setContent(content)) { - logger.warn(Localization.getText("MainWindow.warnCopyIdFailed")); - } - } else { - logger.info(Localization.getText("MainWindow.infoTopLevelCopyID")); - } + menu.getItems().add(exportOption); + MenuItem copyToClipboardOption = new MenuItem(Localization.getText("MainWindow.copyId")); + copyToClipboardOption.setOnAction(ea -> { + Renderable node = featureView.getSelectionModel().getSelectedItem().getValue(); + fetchCopyAction(node); }); - menu.getItems().add(clipMi); + menu.getItems().add(copyToClipboardOption); - MenuItem deleteMi = new MenuItem(Localization.getText("MainWindow.delete")); - deleteMi.setOnAction(ae -> controller.delete(featureView.getSelectionModel().getSelectedItem())); - menu.getItems().add(deleteMi); + MenuItem deleteOption = new MenuItem(Localization.getText("MainWindow.delete")); + deleteOption.setOnAction(ae -> controller.delete(featureView.getSelectionModel().getSelectedItem())); + menu.getItems().add(deleteOption); featureView.setContextMenu(menu); } + public void fetchCopyAction(Renderable node) { + node.getClipboardAction(this); + } + + public void fetchExportAction(Renderable node) { + node.getFeatureExportAction(this); + } + + private void setupSelectListener(TreeView view) { view.getSelectionModel().selectedItemProperty().addListener((obs, oldI, newI) -> { if (newI != null) { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectGroupNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectGroupNode.java new file mode 100644 index 00000000..ff3f9c8b --- /dev/null +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectGroupNode.java @@ -0,0 +1,37 @@ +package de.hft.stuttgart.citydoctor2.gui.tree; + +import de.hft.stuttgart.citydoctor2.datastructure.CityObject; +import de.hft.stuttgart.citydoctor2.gui.Renderer; +import javafx.scene.paint.Color; + +import java.util.List; + +public class CityObjectGroupNode extends Renderable { + + private final List cityObjects; + private final Color renderColor; + private final String nodeText; + + public CityObjectGroupNode(List cityObjects, String nodeText, Color renderColor) { + this.cityObjects = cityObjects; + this.nodeText = nodeText; + this.renderColor = renderColor; + } + + @Override + public void refreshTextColor() { + // no color changes + } + + + @Override + public String getText() { + return nodeText; + } + + @Override + public void visit(Renderer renderer) { + renderer.renderCityObjects(cityObjects, renderColor); + } + +} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectNode.java index 426469f1..ef2cd58f 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectNode.java @@ -3,9 +3,13 @@ package de.hft.stuttgart.citydoctor2.gui.tree; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import de.hft.stuttgart.citydoctor2.gui.CheckStatus; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class CityObjectNode extends Renderable implements FeatureNode{ + private static final Logger logger = LogManager.getLogger(CityObjectNode.class); + private final CityObject co; public CityObjectNode(CityObject co) { @@ -38,4 +42,5 @@ public class CityObjectNode extends Renderable implements FeatureNode{ return co; } + } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/Renderable.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/Renderable.java index 12426a9e..c07d2957 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/Renderable.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/Renderable.java @@ -1,14 +1,23 @@ package de.hft.stuttgart.citydoctor2.gui.tree; import de.hft.stuttgart.citydoctor2.gui.CheckStatus; +import de.hft.stuttgart.citydoctor2.gui.MainWindow; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.utils.Localization; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.scene.input.Clipboard; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import static javafx.scene.input.Clipboard.getSystemClipboard; public abstract class Renderable { private final ObjectProperty statusProperty = new SimpleObjectProperty<>(); + private static Logger logger = LogManager.getLogger(Renderable.class); + /** * @return the status */ @@ -31,4 +40,18 @@ public abstract class Renderable { public abstract String getText(); public abstract void visit(Renderer renderer); + public void getClipboardAction(MainWindow mainWindow) { + Clipboard clipboard = getSystemClipboard(); + clipboard.clear(); + if (logger.isInfoEnabled()) { + logger.info(Localization.getText("MainWindow.infoTopLevelCopyID")); + } + } + + public void getFeatureExportAction(MainWindow mainWindow) { + if (logger.isInfoEnabled()) { + logger.info(Localization.getText("MainWindow.infoTopLevelExport")); + } + } + } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TopLevelCityObjectNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TopLevelCityObjectNode.java new file mode 100644 index 00000000..11486cf1 --- /dev/null +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TopLevelCityObjectNode.java @@ -0,0 +1,47 @@ +package de.hft.stuttgart.citydoctor2.gui.tree; + +import de.hft.stuttgart.citydoctor2.datastructure.CityObject; +import de.hft.stuttgart.citydoctor2.gui.MainWindow; +import de.hft.stuttgart.citydoctor2.utils.Localization; +import javafx.scene.input.Clipboard; +import javafx.scene.input.ClipboardContent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import static javafx.scene.input.Clipboard.getSystemClipboard; + + +public class TopLevelCityObjectNode extends CityObjectNode { + + private static final Logger logger = LogManager.getLogger(TopLevelCityObjectNode.class); + + public TopLevelCityObjectNode(CityObject co) { + super(co); + } + + @Override + public void getClipboardAction(MainWindow mainWindow) { + Clipboard clipboard = getSystemClipboard(); + ClipboardContent content = new ClipboardContent(); + content.putString(this.getFeature().getGmlId().toString()); + if (!clipboard.setContent(content)) { + if (logger.isWarnEnabled()) { + logger.warn(Localization.getText("MainWindow.warnCopyIdFailed")); + } + + } + } + + @Override + public void getFeatureExportAction(MainWindow mainWindow) { + try { + mainWindow.getController().export(this.getFeature()); + if (logger.isWarnEnabled()) { + logger.info(Localization.getText("CityDoctorController.exportSuccess")); + } + } catch (Exception e) { + logger.error("Export failed: Unexpected error occurred"); + logger.error(e); + } + } +} -- GitLab From ecd6316ac32b62202265d1771fc4de9d6004d764 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 15:34:45 +0200 Subject: [PATCH 11/51] Refactor: Simplify Feature-TreeList construction --- .../citydoctor2/gui/CityDoctorController.java | 381 ++++++++---------- 1 file changed, 176 insertions(+), 205 deletions(-) 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 d47aea6d..e9526bc8 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 @@ -24,6 +24,7 @@ import javafx.scene.control.ButtonType; import javafx.scene.control.Dialog; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; +import javafx.scene.paint.Color; import javafx.stage.FileChooser; import javafx.stage.FileChooser.ExtensionFilter; import org.apache.commons.io.FileUtils; @@ -462,9 +463,10 @@ public class CityDoctorController { TreeView buildingsView = mainWindow.getBuildingsView(); TreeItem root = new TreeItem<>(new AllBuildingsNode(model.getBuildings())); root.setExpanded(true); + buildingsView.setRoot(root); buildBuildingTreeFromList(model.getBuildings(), root); addMoreButtonToBuildingsIfNecessary(model.getBuildings(), buildingsView, root, buildingChunkNr); - buildingsView.setRoot(root); + } private void addMoreButtonToBuildingsIfNecessary(List list, TreeView view, @@ -557,17 +559,46 @@ public class CityDoctorController { mainWindow.getVertexView().getRoot().getChildren().clear(); } + private TreeItem buildTopLevelCityObjectNode(CityObject co, TreeItem root) { + return buildTopLevelCityObjectNode(co, root, Collections.emptyList()); + } + + private TreeItem buildTopLevelCityObjectNode(CityObject co, TreeItem root, + List surfaces) { + TopLevelCityObjectNode node = new TopLevelCityObjectNode(co); + TreeItem nodeItem = new TreeItem<>(node); + nodeItem.setExpanded(true); + root.getChildren().add(nodeItem); + createGeometryNodes(co, nodeItem); + if (!surfaces.isEmpty()) { + createBoundarySurfaceNodes(surfaces, nodeItem); + } + return nodeItem; + } + + private TreeItem buildCityObjectNode(CityObject co, TreeItem root) { + return buildCityObjectNode(co, root, Collections.emptyList()); + } + + private TreeItem buildCityObjectNode(CityObject co, TreeItem root, List surfaces) { + CityObjectNode node = new CityObjectNode(co); + TreeItem nodeItem = new TreeItem<>(node); + nodeItem.setExpanded(false); + root.getChildren().add(nodeItem); + createGeometryNodes(co, nodeItem); + if (!surfaces.isEmpty()) { + createBoundarySurfaceNodes(surfaces, nodeItem); + } + return nodeItem; + } + private void buildBuildingTreeFromList(List list, TreeItem root) { int buildingChunk = buildingChunkNr.get(); for (int i = buildingChunk * MAX_FEATURES_PER_CHUNK; i < (buildingChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { Building b = list.get(i); - BuildingNode node = new BuildingNode(b); - TreeItem item = new TreeItem<>(node); - item.setExpanded(true); - root.getChildren().add(item); - createGeometryNodes(b, item); - createBoundarySurfaceNodes(b.getBoundarySurfaces(), item); + TreeItem item = buildTopLevelCityObjectNode(b, root, b.getBoundarySurfaces()); + createBuildingInstallationNodes(b, item); createBuildingRoomNodes(b, item); createBuildingFurnitureNodes(b, item); @@ -582,12 +613,8 @@ public class CityDoctorController { for (int i = bridgeChunk * MAX_FEATURES_PER_CHUNK; i < (bridgeChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { BridgeObject bridge = list.get(i); - BridgeNode node = new BridgeNode(bridge); - TreeItem item = new TreeItem<>(node); - item.setExpanded(true); - root.getChildren().add(item); - createGeometryNodes(bridge, item); - createBoundarySurfaceNodes(bridge.getBoundarySurfaces(), item); + TreeItem item = buildTopLevelCityObjectNode(bridge, root, bridge.getBoundarySurfaces()); + createBridgeRoomNodes(bridge, item); createBridgeInstallationNodes(bridge, item); createBridgeFurnitureNodes(bridge, item); @@ -602,11 +629,7 @@ public class CityDoctorController { for (int i = transportChunk * MAX_FEATURES_PER_CHUNK; i < (transportChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { TransportationObject t = list.get(i); - TransportationObjectNode node = new TransportationObjectNode(t); - TreeItem item = new TreeItem<>(node); - item.setExpanded(true); - root.getChildren().add(item); - createGeometryNodes(t, item); + TreeItem item = buildTopLevelCityObjectNode(t, root); createTransportSectionNodes(t, item); createTrafficSpacesNodes(t, item); } @@ -617,11 +640,7 @@ public class CityDoctorController { for (int i = vegetationChunk * MAX_FEATURES_PER_CHUNK; i < (vegetationChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { Vegetation v = list.get(i); - VegetationNode node = new VegetationNode(v); - TreeItem item = new TreeItem<>(node); - item.setExpanded(true); - root.getChildren().add(item); - createGeometryNodes(v, item); + buildTopLevelCityObjectNode(v, root); } } @@ -630,11 +649,7 @@ public class CityDoctorController { for (int i = waterChunk * MAX_FEATURES_PER_CHUNK; i < (waterChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { WaterObject w = list.get(i); - CityObjectNode node = new CityObjectNode(w); - TreeItem item = new TreeItem<>(node); - item.setExpanded(true); - root.getChildren().add(item); - createGeometryNodes(w, item); + buildTopLevelCityObjectNode(w, root); } } @@ -643,11 +658,7 @@ public class CityDoctorController { for (int i = cityFurnChunk * MAX_FEATURES_PER_CHUNK; i < (cityFurnChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { CityFurniture cf = list.get(i); - CityObjectNode node = new CityObjectNode(cf); - TreeItem item = new TreeItem<>(node); - item.setExpanded(true); - root.getChildren().add(item); - createGeometryNodes(cf, item); + buildTopLevelCityObjectNode(cf, root); } } @@ -656,44 +667,32 @@ public class CityDoctorController { for (int i = genericObjectChunk * MAX_FEATURES_PER_CHUNK; i < (genericObjectChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { GenericCityObject goc = list.get(i); - CityObjectNode node = new CityObjectNode(goc); - TreeItem item = new TreeItem<>(node); - item.setExpanded(true); - root.getChildren().add(item); - createGeometryNodes(goc, item); + buildTopLevelCityObjectNode(goc, root); } } private void createTransportSectionNodes(TransportationObject t, TreeItem root) { if (t instanceof TopLevelTransportFeature top) { if (!top.getSections().isEmpty()) { - AllTransportSectionNode allSectionsNode = new AllTransportSectionNode(top.getSections(), - TransportSection.SectionType.SECTION); - TreeItem allSectionsNodeTextItem = new TreeItem<>(allSectionsNode); - root.getChildren().add(allSectionsNodeTextItem); + CityObjectGroupNode sectionsGroupNode = new CityObjectGroupNode(top.getSections(), + "Sections", Color.YELLOW); + TreeItem sectionsGroupItem = new TreeItem<>(sectionsGroupNode); + root.getChildren().add(sectionsGroupItem); for (TransportSection ts : top.getSections()) { - TransportationObjectNode tsNode = new TransportationObjectNode(ts); - TreeItem tsNodeItem = new TreeItem<>(tsNode); - tsNodeItem.setExpanded(false); - allSectionsNodeTextItem.getChildren().add(tsNodeItem); - createGeometryNodes(ts, tsNodeItem); + TreeItem tsNodeItem = buildCityObjectNode(ts, sectionsGroupItem); createTrafficSpacesNodes(ts, tsNodeItem); } } if (!top.getIntersections().isEmpty()) { - AllTransportSectionNode allIntersectionsNode = new AllTransportSectionNode(top.getIntersections(), - TransportSection.SectionType.INTERSECTION); - TreeItem allIntersectionsNodeTextItem = new TreeItem<>(allIntersectionsNode); - root.getChildren().add(allIntersectionsNodeTextItem); + CityObjectGroupNode intersectionsGroupNode = new CityObjectGroupNode(top.getSections(), + "Intersections", Color.YELLOW); + TreeItem intersectionsGroupItem = new TreeItem<>(intersectionsGroupNode); + root.getChildren().add(intersectionsGroupItem); for (TransportSection ts : top.getIntersections()) { - TransportationObjectNode tsNode = new TransportationObjectNode(ts); - TreeItem tsNodeItem = new TreeItem<>(tsNode); - tsNodeItem.setExpanded(false); - allIntersectionsNodeTextItem.getChildren().add(tsNodeItem); - createGeometryNodes(ts, tsNodeItem); + TreeItem tsNodeItem = buildCityObjectNode(ts, intersectionsGroupItem); createTrafficSpacesNodes(ts, tsNodeItem); } } @@ -703,34 +702,26 @@ public class CityDoctorController { private void createTrafficSpacesNodes(TransportationObject t, TreeItem root) { if (t instanceof TransportationSpace space) { if (!space.getTrafficSpaces().isEmpty()) { - AllTrafficSpacesNode allTSNode = new AllTrafficSpacesNode(space.getTrafficSpaces(), - TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TreeItem allTSNodeTextItem = new TreeItem<>(allTSNode); - root.getChildren().add(allTSNodeTextItem); - allTSNodeTextItem.setExpanded(true); + CityObjectGroupNode trafficSpacesGroupNode = new CityObjectGroupNode(space.getTrafficSpaces(), + "TRAFFIC_SPACE", Color.YELLOW); + TreeItem trafficSpacesGroupItem = new TreeItem<>(trafficSpacesGroupNode); + root.getChildren().add(trafficSpacesGroupItem); + trafficSpacesGroupItem.setExpanded(true); for (TrafficSpaceObject tso : space.getTrafficSpaces()) { - TransportationObjectNode tsoNode = new TransportationObjectNode(tso); - TreeItem tsoNodeItem = new TreeItem<>(tsoNode); - tsoNodeItem.setExpanded(false); - allTSNodeTextItem.getChildren().add(tsoNodeItem); - createGeometryNodes(tso, tsoNodeItem); + TreeItem tsoNodeItem = buildCityObjectNode(tso, trafficSpacesGroupItem); createTrafficAreaNodes(tso, tsoNodeItem, TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); } } if (!space.getAuxTrafficSpaces().isEmpty()) { - AllTrafficSpacesNode allTSNode = new AllTrafficSpacesNode(space.getAuxTrafficSpaces(), - TrafficSpaceObject.TrafficSpaceType.AUXILIARY_TRAFFIC_SPACE); - TreeItem allTSNodeTextItem = new TreeItem<>(allTSNode); - root.getChildren().add(allTSNodeTextItem); - allTSNodeTextItem.setExpanded(true); + CityObjectGroupNode auxTrafficSpacesGroupNode = new CityObjectGroupNode(space.getTrafficSpaces(), + "AUXILIARY_TRAFFIC_SPACE", Color.YELLOW); + TreeItem auxTrafficSpacesGroupItem = new TreeItem<>(auxTrafficSpacesGroupNode); + root.getChildren().add(auxTrafficSpacesGroupItem); + auxTrafficSpacesGroupItem.setExpanded(true); for (TrafficSpaceObject atso : space.getAuxTrafficSpaces()) { - TransportationObjectNode atsoNode = new TransportationObjectNode(atso); - TreeItem atsoNodeItem = new TreeItem<>(atsoNode); - atsoNodeItem.setExpanded(false); - allTSNodeTextItem.getChildren().add(atsoNodeItem); - createGeometryNodes(atso, atsoNodeItem); + TreeItem atsoNodeItem = buildCityObjectNode(atso, auxTrafficSpacesGroupItem); createTrafficAreaNodes(atso, atsoNodeItem, TrafficAreaObject.TrafficAreaType.AUXILIARY_TRAFFIC_AREA); } } @@ -739,16 +730,13 @@ public class CityDoctorController { public void createTrafficAreaNodes(TransportationObject t, TreeItem root, TrafficAreaObject.TrafficAreaType type) { if (t instanceof TrafficSpaceObject space && !space.getTrafficAreas().isEmpty()) { - AllTrafficAreaNode allTANode = new AllTrafficAreaNode(space.getTrafficAreas(), type); - TreeItem allTANodeTextItem = new TreeItem<>(allTANode); - root.getChildren().add(allTANodeTextItem); - allTANodeTextItem.setExpanded(true); + CityObjectGroupNode trafficAreaGroupNode = new CityObjectGroupNode(space.getTrafficAreas(), type.toString(), Color.YELLOW); + TreeItem trafficAreaGroupItem = new TreeItem<>(trafficAreaGroupNode); + root.getChildren().add(trafficAreaGroupItem); + trafficAreaGroupItem.setExpanded(true); + for (TrafficAreaObject tao : space.getTrafficAreas()) { - TransportationObjectNode taoNode = new TransportationObjectNode(tao); - TreeItem taoNodeTextItem = new TreeItem<>(taoNode); - taoNodeTextItem.setExpanded(true); - allTANodeTextItem.getChildren().add(taoNodeTextItem); - createGeometryNodes(tao, taoNodeTextItem); + buildCityObjectNode(tao, trafficAreaGroupItem); } } @@ -758,12 +746,8 @@ public class CityDoctorController { int tunnelChunk = tunnelChunkNr.get(); for (int i = tunnelChunk * MAX_FEATURES_PER_CHUNK; i < (tunnelChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { Tunnel tunnel = list.get(i); - TunnelNode node = new TunnelNode(tunnel); - TreeItem item = new TreeItem<>(node); - item.setExpanded(true); - root.getChildren().add(item); - createGeometryNodes(tunnel, item); - createBoundarySurfaceNodes(tunnel.getBoundarySurfaces(), item); + TreeItem item = buildTopLevelCityObjectNode(tunnel, root); + createTunnelHollowNodes(tunnel, item); createTunnelInstallationNodes(tunnel, item); createTunnelFurnitureNodes(tunnel, item); @@ -788,17 +772,14 @@ public class CityDoctorController { if (tunnel.getTunnelConstructiveElements().isEmpty()){ return; } - AllTunnelConstructiveElementsNode allTceNode = new AllTunnelConstructiveElementsNode(tunnel.getTunnelConstructiveElements()); - TreeItem allTceNodeTextItem = new TreeItem<>(allTceNode); - root.getChildren().add(allTceNodeTextItem); + + CityObjectGroupNode constructiveElementsGroupNode = new CityObjectGroupNode(tunnel.getTunnelConstructiveElements(), + "Constructive Elements", Color.DARKGRAY); + TreeItem constructiveElementsGroupItem = new TreeItem<>(constructiveElementsGroupNode); + root.getChildren().add(constructiveElementsGroupItem); for (TunnelConstructiveElement tce : tunnel.getTunnelConstructiveElements()) { - TunnelConstructiveElementNode tceNode = new TunnelConstructiveElementNode(tce); - TreeItem tceNodeItem = new TreeItem<>(tceNode); - tceNodeItem.setExpanded(true); - allTceNodeTextItem.getChildren().add(tceNodeItem); - createGeometryNodes(tce, tceNodeItem); - createBoundarySurfaceNodes(tce.getBoundarySurfaces(), tceNodeItem); + buildCityObjectNode(tce, constructiveElementsGroupItem, tce.getBoundarySurfaces()); } } @@ -806,17 +787,18 @@ public class CityDoctorController { if (tunnel.getTunnelParts().isEmpty()) { return; } - AllTunnelPartsNode allTpsText = new AllTunnelPartsNode(tunnel.getTunnelParts()); - TreeItem allTpsTextItem = new TreeItem<>(allTpsText); - root.getChildren().add(allTpsTextItem); + + CityObjectGroupNode tunnelPartsGroupNode = new CityObjectGroupNode(tunnel.getTunnelParts(), "Tunnel parts", Color.DARKGRAY); + TreeItem tunnelPartsGroupItem = new TreeItem<>(tunnelPartsGroupNode); + root.getChildren().add(tunnelPartsGroupItem); for (TunnelPart tp : tunnel.getTunnelParts()) { - TunnelPartNode tpNode = new TunnelPartNode(tp); - TreeItem tpNodeItem = new TreeItem<>(tpNode); - tpNodeItem.setExpanded(true); - allTpsTextItem.getChildren().add(tpNodeItem); - createGeometryNodes(tp, tpNodeItem); - createBoundarySurfaceNodes(tp.getBoundarySurfaces(), tpNodeItem); + TreeItem tpNodeItem = buildCityObjectNode(tp, tunnelPartsGroupItem, tp.getBoundarySurfaces()); + + createTunnelHollowNodes(tunnel, tpNodeItem); + createTunnelInstallationNodes(tunnel, tpNodeItem); + createTunnelFurnitureNodes(tunnel, tpNodeItem); + createTunnelConstructiveElementsNodes(tunnel, tpNodeItem); } } @@ -836,18 +818,14 @@ public class CityDoctorController { if (bridge.getConstructiveElements().isEmpty()) { return; } - AllBridgeConstructiveElementsNode allBceNode = new AllBridgeConstructiveElementsNode( - bridge.getConstructiveElements()); - TreeItem allBceNodeTextItem = new TreeItem<>(allBceNode); - item.getChildren().add(allBceNodeTextItem); + + CityObjectGroupNode constructiveElementsGroupNode = new CityObjectGroupNode( + bridge.getConstructiveElements(), "Constructive Elements", Color.CORAL); + TreeItem constructiveElementsGroupItem = new TreeItem<>(constructiveElementsGroupNode); + item.getChildren().add(constructiveElementsGroupItem); for (BridgeConstructiveElement bce : bridge.getConstructiveElements()) { - BridgeConstructiveElementNode bceNode = new BridgeConstructiveElementNode(bce); - TreeItem bceNodeItem = new TreeItem<>(bceNode); - bceNodeItem.setExpanded(true); - allBceNodeTextItem.getChildren().add(bceNodeItem); - createGeometryNodes(bce, bceNodeItem); - createBoundarySurfaceNodes(bce.getBoundarySurfaces(), bceNodeItem); + buildCityObjectNode(bce, constructiveElementsGroupItem, bce.getBoundarySurfaces()); } } @@ -855,21 +833,22 @@ public class CityDoctorController { if (bridge.getParts().isEmpty()) { return; } - AllBridgePartsNode allBpsText = new AllBridgePartsNode(bridge.getParts()); - TreeItem allBpsTextItem = new TreeItem<>(allBpsText); - item.getChildren().add(allBpsTextItem); + + CityObjectGroupNode bridgePartsGroupNode = new CityObjectGroupNode(bridge.getParts(), "Bridge Parts", Color.CORAL); + TreeItem bridgePartsGroupItem = new TreeItem<>(bridgePartsGroupNode); + item.getChildren().add(bridgePartsGroupItem); for (BridgeObject bp : bridge.getParts()) { - BridgeNode bpNode = new BridgeNode(bp); - TreeItem bpNodeItem = new TreeItem<>(bpNode); - bpNodeItem.setExpanded(true); - allBpsTextItem.getChildren().add(bpNodeItem); - createGeometryNodes(bp, bpNodeItem); - createBoundarySurfaceNodes(bp.getBoundarySurfaces(), bpNodeItem); + TreeItem bpNodeItem = buildCityObjectNode(bp, bridgePartsGroupItem, bp.getBoundarySurfaces()); + + createBridgeRoomNodes(bp, bpNodeItem); + createBridgeInstallationNodes(bp, bpNodeItem); + createBridgeFurnitureNodes(bp, bpNodeItem); + createBridgeConstructiveElementsNodes(bp, bpNodeItem); } } - private void createBuildingInstallationNodes(Building ab, TreeItem root) { + private void createBuildingInstallationNodes(AbstractBuilding ab, TreeItem root) { createInstallationNodes(ab.getBuildingInstallations(), root); } @@ -878,20 +857,16 @@ public class CityDoctorController { return; } - AllInstallationsNode allBiNode = new AllInstallationsNode(installations); - TreeItem allBpsTextItem = new TreeItem<>(allBiNode); - root.getChildren().add(allBpsTextItem); + CityObjectGroupNode installationsGroupNode = new CityObjectGroupNode(installations, "Installations", null); + TreeItem installationsGroupItem = new TreeItem<>(installationsGroupNode); + root.getChildren().add(installationsGroupItem); + for (Installation bi : installations) { - InstallationNode biNode = new InstallationNode(bi); - TreeItem biItem = new TreeItem<>(biNode); - biItem.setExpanded(true); - allBpsTextItem.getChildren().add(biItem); - createGeometryNodes(bi, biItem); - createBoundarySurfaceNodes(bi.getBoundarySurfaces(), biItem); + buildCityObjectNode(bi, installationsGroupItem, bi.getBoundarySurfaces()); } } - private void createBuildingRoomNodes(Building ab, TreeItem root) { + private void createBuildingRoomNodes(AbstractBuilding ab, TreeItem root) { createRoomNodes(ab.getBuildingRooms(), root); } @@ -900,58 +875,48 @@ public class CityDoctorController { return; } - AllRoomsNode allRoNode = new AllRoomsNode(rooms); - TreeItem allRoNodeTextItem = new TreeItem<>(allRoNode); - root.getChildren().add(allRoNodeTextItem); + CityObjectGroupNode roomsGroupNode = new CityObjectGroupNode(rooms, "Rooms", null); + TreeItem roomsGroupItem = new TreeItem<>(roomsGroupNode); + root.getChildren().add(roomsGroupItem); + for (AbstractRoom room : rooms) { - RoomNode roomNode = new RoomNode(room); - TreeItem roomNodeTextItem = new TreeItem<>(roomNode); - roomNodeTextItem.setExpanded(true); - allRoNodeTextItem.getChildren().add(roomNodeTextItem); - createGeometryNodes(room, roomNodeTextItem); - createBoundarySurfaceNodes(room.getBoundarySurfaces(), roomNodeTextItem); + buildCityObjectNode(room, roomsGroupItem, room.getBoundarySurfaces()); } } - private void createBuildingStoreyNodes(Building ab, TreeItem root) { + private void createBuildingStoreyNodes(AbstractBuilding ab, TreeItem root) { List storeys = ab.getBuildingStoreys(); if (storeys.isEmpty()) { return; } - AllStoreysNode allSNode = new AllStoreysNode(storeys); - TreeItem allSNodeTextItem = new TreeItem<>(allSNode); - root.getChildren().add(allSNodeTextItem); + + CityObjectGroupNode storeysGroupNode = new CityObjectGroupNode(storeys, "Storeys", null); + TreeItem storeysGroupItem = new TreeItem<>(storeysGroupNode); + root.getChildren().add(storeysGroupItem); + for (Storey storey : storeys) { - StoreyNode storeyNode = new StoreyNode(storey); - TreeItem storeyNodeTextItem = new TreeItem<>(storeyNode); - storeyNodeTextItem.setExpanded(true); - allSNodeTextItem.getChildren().add(storeyNodeTextItem); - createGeometryNodes(storey, storeyNodeTextItem); - createBoundarySurfaceNodes(storey.getBoundarySurfaces(), storeyNodeTextItem); + buildCityObjectNode(storey, storeysGroupItem, storey.getBoundarySurfaces()); } } - public void createBuildingUnitNodes(Building ab, TreeItem root) { + public void createBuildingUnitNodes(AbstractBuilding ab, TreeItem root) { List buildingUnits = ab.getBuildingUnits(); if (buildingUnits.isEmpty()) { return; } - AllBuildingUnitsNode allSNode = new AllBuildingUnitsNode(buildingUnits); - TreeItem allSNodeTextItem = new TreeItem<>(allSNode); - root.getChildren().add(allSNodeTextItem); + + CityObjectGroupNode buildingUnitsGroupNode = new CityObjectGroupNode(buildingUnits, "Building Units", null); + TreeItem buildingUnitsGroupItem = new TreeItem<>(buildingUnitsGroupNode); + root.getChildren().add(buildingUnitsGroupItem); + for (BuildingUnit buildingUnit : buildingUnits) { - BuildingUnitNode buildingUnitNode = new BuildingUnitNode(buildingUnit); - TreeItem storeyNodeTextItem = new TreeItem<>(buildingUnitNode); - storeyNodeTextItem.setExpanded(true); - allSNodeTextItem.getChildren().add(storeyNodeTextItem); - createGeometryNodes(buildingUnit, storeyNodeTextItem); - createBoundarySurfaceNodes(buildingUnit.getBoundarySurfaces(), storeyNodeTextItem); + buildCityObjectNode(buildingUnit, buildingUnitsGroupItem, buildingUnit.getBoundarySurfaces()); } } - private void createBuildingFurnitureNodes(Building ab, TreeItem root) { + private void createBuildingFurnitureNodes(AbstractBuilding ab, TreeItem root) { createFurnitureNodes(ab.getBuildingRoomFurnitureList(), root); } @@ -960,16 +925,12 @@ public class CityDoctorController { return; } - AllFurnitureNode allFnNode = new AllFurnitureNode(furniture); - TreeItem allFnNodeTextItem = new TreeItem<>(allFnNode); - root.getChildren().add(allFnNodeTextItem); + CityObjectGroupNode furnitureGroupNode = new CityObjectGroupNode(furniture, "Furniture", null); + TreeItem furnitureGroupItem = new TreeItem<>(furnitureGroupNode); + root.getChildren().add(furnitureGroupItem); + for (AbstractFurniture fn : furniture) { - FurnitureNode fnNode = new FurnitureNode(fn); - TreeItem fnNodeTextItem = new TreeItem<>(fnNode); - fnNodeTextItem.setExpanded(true); - allFnNodeTextItem.getChildren().add(fnNodeTextItem); - createGeometryNodes(fn, fnNodeTextItem); - createBoundarySurfaceNodes(fn.getBoundarySurfaceList(), fnNodeTextItem); + buildCityObjectNode(fn, furnitureGroupItem, fn.getBoundarySurfaceList()); } } @@ -977,25 +938,26 @@ public class CityDoctorController { if (bsList.isEmpty()) { return; } - AllBoundarySurfacesNode allBsText = new AllBoundarySurfacesNode(bsList); - TreeItem allBpsTextItem = new TreeItem<>(allBsText); - root.getChildren().add(allBpsTextItem); - allBpsTextItem.getChildren().add(new TreeItem<>()); + CityObjectGroupNode boundarySurfacesGroupNode = new CityObjectGroupNode(bsList, "Boundary Surfaces", null); + TreeItem boundarySurfacesGroupItem = new TreeItem<>(boundarySurfacesGroupNode); + root.getChildren().add(boundarySurfacesGroupItem); - allBpsTextItem.expandedProperty().addListener((obs, old, newV) -> { - if (Boolean.TRUE.equals(newV) && allBpsTextItem.getChildren().size() == 1) { + boundarySurfacesGroupItem.getChildren().add(new TreeItem<>()); + + boundarySurfacesGroupItem.expandedProperty().addListener((obs, old, newV) -> { + if (Boolean.TRUE.equals(newV) && boundarySurfacesGroupItem.getChildren().size() == 1) { Platform.runLater(() -> { - allBpsTextItem.getChildren().clear(); + boundarySurfacesGroupItem.getChildren().clear(); for (BoundarySurface bs : bsList) { - BoundarySurfaceNode bsText = new BoundarySurfaceNode(bs); + CityObjectNode bsText = new CityObjectNode(bs); TreeItem bsTextItem = new TreeItem<>(bsText); bsTextItem.setExpanded(true); - allBpsTextItem.getChildren().add(bsTextItem); + boundarySurfacesGroupItem.getChildren().add(bsTextItem); createGeometryNodes(bs, bsTextItem); createOpeningNodes(bs.getOpenings(), bsTextItem); } - updateTree(allBpsTextItem); + updateTree(boundarySurfacesGroupItem); }); } }); @@ -1005,31 +967,35 @@ public class CityDoctorController { if (openings == null || openings.isEmpty()) { return; } - AllOpeningsNode allOpeningsNode = new AllOpeningsNode(openings); - TreeItem allOpeningsItem = new TreeItem<>(allOpeningsNode); + + CityObjectGroupNode openingsGroupNode = new CityObjectGroupNode(openings, "Openings", null); + TreeItem openingsGroupItem = new TreeItem<>(openingsGroupNode); + root.getChildren().add(openingsGroupItem); + for (Opening o : openings) { OpeningNode openingNode = new OpeningNode(o); - TreeItem openingsItem = new TreeItem<>(openingNode); - allOpeningsItem.getChildren().add(openingsItem); + TreeItem openingItem = new TreeItem<>(openingNode); + openingsGroupItem.getChildren().add(openingItem); } - root.getChildren().add(allOpeningsItem); + } private void createBuildingPartNodes(Building ab, TreeItem item) { if (ab.getBuildingParts().isEmpty()) { return; } - AllBuildingPartsNode allBpsText = new AllBuildingPartsNode(ab.getBuildingParts()); - TreeItem allBpsTextItem = new TreeItem<>(allBpsText); - item.getChildren().add(allBpsTextItem); + CityObjectGroupNode buildingPartsGroupNode = new CityObjectGroupNode(ab.getBuildingParts(), "Building Parts", null); + TreeItem buildingPartsGroupItem = new TreeItem<>(buildingPartsGroupNode); + item.getChildren().add(buildingPartsGroupItem); for (BuildingPart bp : ab.getBuildingParts()) { - BuildingPartNode bpNode = new BuildingPartNode(bp); - TreeItem bpNodeItem = new TreeItem<>(bpNode); - bpNodeItem.setExpanded(true); - allBpsTextItem.getChildren().add(bpNodeItem); - createGeometryNodes(bp, bpNodeItem); - createBoundarySurfaceNodes(bp.getBoundarySurfaces(), bpNodeItem); + TreeItem bpNodeItem = buildCityObjectNode(bp, buildingPartsGroupItem, bp.getBoundarySurfaces()); + + createBuildingInstallationNodes(bp, bpNodeItem); + createBuildingRoomNodes(bp, bpNodeItem); + createBuildingFurnitureNodes(bp, bpNodeItem); + createBuildingStoreyNodes(bp, bpNodeItem); + createBuildingUnitNodes(bp, bpNodeItem); } } @@ -1043,11 +1009,15 @@ public class CityDoctorController { public void startChecks(ValidationConfiguration config, ProgressListener l) { if (model == null) { - logger.warn(Localization.getText("CityDoctorController.noDatamodel")); + if (logger.isWarnEnabled()) { + logger.warn(Localization.getText("CityDoctorController.noDatamodel")); + } return; } if (sourceFile == null) { - logger.warn(Localization.getText("CityDoctorController.noSourceFile")); + if (logger.isWarnEnabled()) { + logger.warn(Localization.getText("CityDoctorController.noSourceFile")); + } return; } try { @@ -1083,9 +1053,10 @@ public class CityDoctorController { public void startZipFileChecks(ValidationConfiguration config, ProgressListener l, boolean lowMemoryMode, Path outputPath, boolean pdfReports, boolean xmlReports) { - if (zipArchive == null) { + if (zipArchive == null && logger.isWarnEnabled()) { logger.warn(Localization.getText("CityDoctorController.noZipFile")); } + if (lowMemoryMode) { startZipFileCheckStream(config, outputPath, pdfReports, xmlReports); return; -- GitLab From 84ee694e139f857e87434aa926eb3c036f58a6c7 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 15:41:19 +0200 Subject: [PATCH 12/51] Refactor: Unify method naming --- .../stuttgart/citydoctor2/datastructure/AbstractFurniture.java | 2 +- .../stuttgart/citydoctor2/reporting/pdf/PdfStreamReporter.java | 2 +- .../de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 be675fc6..24243c31 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 @@ -102,7 +102,7 @@ public abstract class AbstractFurniture extends CityObject { boundarySurface.setParent(this); } - public List getBoundarySurfaceList() { + public List getBoundarySurfaces() { return boundarySurfaceList; } diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/reporting/pdf/PdfStreamReporter.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/reporting/pdf/PdfStreamReporter.java index 45a5fc72..4214bc32 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/reporting/pdf/PdfStreamReporter.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/reporting/pdf/PdfStreamReporter.java @@ -590,7 +590,7 @@ public class PdfStreamReporter implements StreamReporter { for (Geometry geom : af.getGeometries()) { writeCheckResultForGeometry(geom, root); } - for (BoundarySurface bs : af.getBoundarySurfaceList()) { + for (BoundarySurface bs : af.getBoundarySurfaces()) { writeCheckResultForBoundarySurface(bs, root); } } 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 e9526bc8..d616cfe4 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 @@ -930,7 +930,7 @@ public class CityDoctorController { root.getChildren().add(furnitureGroupItem); for (AbstractFurniture fn : furniture) { - buildCityObjectNode(fn, furnitureGroupItem, fn.getBoundarySurfaceList()); + buildCityObjectNode(fn, furnitureGroupItem, fn.getBoundarySurfaces()); } } -- GitLab From dee59404d0ef466aef0a50b8f6bde45cd98b0660 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 17:02:25 +0200 Subject: [PATCH 13/51] Refactor: Delete obsolete classes --- .../citydoctor2/gui/VertexClickHandler.java | 1 - .../gui/tree/AllBoundarySurfacesNode.java | 46 ------------- .../AllBridgeConstructiveElementsNode.java | 64 ------------------- .../gui/tree/AllBridgePartsNode.java | 64 ------------------- .../citydoctor2/gui/tree/AllBridgesNode.java | 30 --------- .../gui/tree/AllBuildingPartsNode.java | 46 ------------- .../gui/tree/AllBuildingUnitsNode.java | 46 ------------- .../gui/tree/AllBuildingsNode.java | 31 --------- .../gui/tree/AllCityFurnitureNode.java | 34 ---------- .../gui/tree/AllFurnitureNode.java | 45 ------------- .../gui/tree/AllInstallationsNode.java | 46 ------------- .../citydoctor2/gui/tree/AllOpeningsNode.java | 46 ------------- .../gui/tree/AllOtherObjectsNode.java | 48 -------------- .../citydoctor2/gui/tree/AllRoomsNode.java | 45 ------------- .../citydoctor2/gui/tree/AllStoreysNode.java | 46 ------------- .../citydoctor2/gui/tree/AllTerrainNode.java | 31 --------- .../citydoctor2/gui/tree/AllTinNode.java | 41 ------------ .../gui/tree/AllTrafficAreaNode.java | 35 ---------- .../gui/tree/AllTrafficSpacesNode.java | 35 ---------- .../gui/tree/AllTransportSectionNode.java | 34 ---------- .../gui/tree/AllTransportationNode.java | 31 --------- .../AllTunnelConstructiveElementsNode.java | 46 ------------- .../gui/tree/AllTunnelPartsNode.java | 45 ------------- .../citydoctor2/gui/tree/AllTunnelsNode.java | 31 --------- .../gui/tree/AllVegetationNode.java | 31 --------- .../citydoctor2/gui/tree/AllWaterNode.java | 31 --------- .../gui/tree/BoundarySurfaceNode.java | 35 ---------- .../tree/BridgeConstructiveElementNode.java | 54 ---------------- .../citydoctor2/gui/tree/BridgeNode.java | 60 ----------------- .../citydoctor2/gui/tree/BuildingNode.java | 45 ------------- .../gui/tree/BuildingPartNode.java | 36 ----------- .../gui/tree/BuildingUnitNode.java | 38 ----------- .../gui/tree/CityFurnitureNode.java | 42 ------------ .../citydoctor2/gui/tree/FeatureNode.java | 8 --- .../citydoctor2/gui/tree/FurnitureNode.java | 36 ----------- .../gui/tree/GenericCityObjectsNode.java | 42 ------------ .../gui/tree/InstallationNode.java | 35 ---------- .../citydoctor2/gui/tree/LandUseNode.java | 54 ---------------- .../citydoctor2/gui/tree/ReliefNode.java | 55 ---------------- .../citydoctor2/gui/tree/RoomNode.java | 36 ----------- .../citydoctor2/gui/tree/StoreyNode.java | 37 ----------- .../citydoctor2/gui/tree/TinNode.java | 55 ---------------- .../gui/tree/TransportationObjectNode.java | 35 ---------- .../tree/TunnelConstructiveElementNode.java | 35 ---------- .../citydoctor2/gui/tree/TunnelNode.java | 45 ------------- .../citydoctor2/gui/tree/TunnelPartNode.java | 35 ---------- .../citydoctor2/gui/tree/VegetationNode.java | 61 ------------------ 47 files changed, 1908 deletions(-) delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBoundarySurfacesNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgeConstructiveElementsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgePartsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgesNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingPartsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingUnitsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllCityFurnitureNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllFurnitureNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllInstallationsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllOpeningsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllOtherObjectsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllRoomsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllStoreysNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTerrainNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTinNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTrafficAreaNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTrafficSpacesNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTransportSectionNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTransportationNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelConstructiveElementsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelPartsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllVegetationNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllWaterNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BoundarySurfaceNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BridgeConstructiveElementNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BridgeNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingPartNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingUnitNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityFurnitureNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/FeatureNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/FurnitureNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GenericCityObjectsNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/InstallationNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/LandUseNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ReliefNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/RoomNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/StoreyNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TinNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TransportationObjectNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelConstructiveElementNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelPartNode.java delete mode 100644 CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VegetationNode.java diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/VertexClickHandler.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/VertexClickHandler.java index 32bdbe70..f5ff87f9 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/VertexClickHandler.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/VertexClickHandler.java @@ -1,7 +1,6 @@ package de.hft.stuttgart.citydoctor2.gui; import de.hft.stuttgart.citydoctor2.datastructure.*; -import de.hft.stuttgart.citydoctor2.gui.tree.FeatureNode; import de.hft.stuttgart.citydoctor2.utils.Localization; import javafx.scene.input.Clipboard; import javafx.scene.input.ClipboardContent; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBoundarySurfacesNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBoundarySurfacesNode.java deleted file mode 100644 index 422d84a2..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBoundarySurfacesNode.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllBoundarySurfacesNode extends Renderable { - - private final List boundarySurfaces; - - public AllBoundarySurfacesNode(List boundarySurfaces) { - this.boundarySurfaces = boundarySurfaces; - } - - @Override - public String getText() { - return "Boundary Surfaces"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean isValidated = false; - for (BoundarySurface bs : boundarySurfaces) { - if (bs.isValidated()) { - isValidated = true; - } - if (bs.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - if (isValidated) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgeConstructiveElementsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgeConstructiveElementsNode.java deleted file mode 100644 index 0f0bbd33..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgeConstructiveElementsNode.java +++ /dev/null @@ -1,64 +0,0 @@ -/*- - * Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.BridgeConstructiveElement; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllBridgeConstructiveElementsNode extends Renderable { - - private final List constructiveElements; - - public AllBridgeConstructiveElementsNode(List constructiveElements) { - this.constructiveElements = constructiveElements; - } - - @Override - public String getText() { - return "Constructive Elements"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean isValidated = false; - for (BridgeConstructiveElement bce : constructiveElements) { - if (bce.isValidated()) { - isValidated = true; - } - if (bce.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - if (isValidated) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgePartsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgePartsNode.java deleted file mode 100644 index 199651d5..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgePartsNode.java +++ /dev/null @@ -1,64 +0,0 @@ -/*- - * Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllBridgePartsNode extends Renderable { - - private final List bridgeParts; - - public AllBridgePartsNode(List bridgeParts) { - this.bridgeParts = bridgeParts; - } - - @Override - public String getText() { - return "Bridge Parts"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (BridgeObject bp : bridgeParts) { - if (bp.isValidated()) { - wasChecked = true; - if (bp.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgesNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgesNode.java deleted file mode 100644 index 7ee41d69..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBridgesNode.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllBridgesNode extends Renderable { - - private final List bridges; - - public AllBridgesNode(List bridges) { - this.bridges = bridges; - } - - @Override - public void refreshTextColor() { - // no color changes - } - - @Override - public String getText() { - return "Bridges"; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderBridges(bridges); - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingPartsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingPartsNode.java deleted file mode 100644 index 55699c1e..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingPartsNode.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllBuildingPartsNode extends Renderable { - - private final List buildingParts; - - public AllBuildingPartsNode(List buildingParts) { - this.buildingParts = buildingParts; - } - - @Override - public String getText() { - return "Building Parts"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (BuildingPart bp : buildingParts) { - if (bp.isValidated()) { - wasChecked = true; - if (bp.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingUnitsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingUnitsNode.java deleted file mode 100644 index e91e9600..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingUnitsNode.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllBuildingUnitsNode extends Renderable{ - - private final List buildingUnits; - - public AllBuildingUnitsNode(List buildingUnits) { - this.buildingUnits = buildingUnits; - } - - @Override - public String getText() { - return "Building Units"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (BuildingUnit buildingUnit : buildingUnits) { - if (buildingUnit.isValidated()) { - wasChecked = true; - if (buildingUnit.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingsNode.java deleted file mode 100644 index 7f1c620b..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllBuildingsNode.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.Building; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllBuildingsNode extends Renderable { - - private final List buildings; - - public AllBuildingsNode(List buildings) { - this.buildings = buildings; - } - - @Override - public void refreshTextColor() { - // no color changes - } - - @Override - public String getText() { - return "Buildings"; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderBuildings(buildings); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllCityFurnitureNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllCityFurnitureNode.java deleted file mode 100644 index 936e25f0..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllCityFurnitureNode.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - - -import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllCityFurnitureNode extends Renderable{ - - private final List cityFurnitures; - - public AllCityFurnitureNode(List cityFurnitures) { - this.cityFurnitures = cityFurnitures; - } - - @Override - public void refreshTextColor() { - // no color changes - } - - @Override - public String getText() { - return "CityFurniture"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - renderer.renderCityFurniture(cityFurnitures); - } - -} - diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllFurnitureNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllFurnitureNode.java deleted file mode 100644 index 435f1c3b..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllFurnitureNode.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.AbstractFurniture; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllFurnitureNode extends Renderable{ - - private final List furniture; - - public AllFurnitureNode(List furniture) { - this.furniture = furniture; - } - - @Override - public String getText() { - return "Furniture"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (AbstractFurniture af : furniture) { - if (af.isValidated()) { - wasChecked = true; - if (af.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllInstallationsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllInstallationsNode.java deleted file mode 100644 index 192a58d9..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllInstallationsNode.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.Installation; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllInstallationsNode extends Renderable { - - private final List buildingInstallations; - - public AllInstallationsNode(List bis) { - this.buildingInstallations = bis; - } - - @Override - public String getText() { - return "Building Installations"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (Installation bp : buildingInstallations) { - if (bp.isValidated()) { - wasChecked = true; - if (bp.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - -} \ No newline at end of file diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllOpeningsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllOpeningsNode.java deleted file mode 100644 index 64f35c90..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllOpeningsNode.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.Opening; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllOpeningsNode extends Renderable { - - private final List openings; - - public AllOpeningsNode(List openings) { - this.openings = openings; - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (Opening op : openings) { - if (op.isValidated()) { - wasChecked = true; - if (op.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - - @Override - public String getText() { - return "Openings"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllOtherObjectsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllOtherObjectsNode.java deleted file mode 100644 index c45ca90a..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllOtherObjectsNode.java +++ /dev/null @@ -1,48 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; -import javafx.scene.paint.Color; - -import java.util.List; - -public class AllOtherObjectsNode extends Renderable{ - - private final List genericObjects; - - public AllOtherObjectsNode(List genericObjects) { - this.genericObjects = genericObjects; - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (GenericCityObject gco : genericObjects) { - if (gco.isValidated()) { - wasChecked = true; - if (gco.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - - @Override - public String getText() { - return "GenericCityObjects"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - renderer.renderCityObjects(genericObjects, Color.GRAY); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllRoomsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllRoomsNode.java deleted file mode 100644 index 1f2f002e..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllRoomsNode.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.AbstractRoom; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllRoomsNode extends Renderable{ - - private final List rooms; - - public AllRoomsNode(List rooms) { - this.rooms = rooms; - } - - @Override - public String getText() { - return "Building Rooms"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (AbstractRoom ar : rooms) { - if (ar.isValidated()) { - wasChecked = true; - if (ar.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllStoreysNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllStoreysNode.java deleted file mode 100644 index 9a2df077..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllStoreysNode.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.Storey; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllStoreysNode extends Renderable{ - - private final List storeys; - - public AllStoreysNode(List storeys) { - this.storeys = storeys; - } - - @Override - public String getText() { - return "Building Storeys"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (Storey storey : storeys) { - if (storey.isValidated()) { - wasChecked = true; - if (storey.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTerrainNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTerrainNode.java deleted file mode 100644 index 61a8eb3f..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTerrainNode.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllTerrainNode extends Renderable { - - private final List land; - - public AllTerrainNode(List land) { - this.land = land; - } - - @Override - public void refreshTextColor() { - // no use - } - - @Override - public String getText() { - return "Terrain"; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderTerrain(land); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTinNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTinNode.java deleted file mode 100644 index de8e3cee..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTinNode.java +++ /dev/null @@ -1,41 +0,0 @@ -/*- - * Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.TinObject; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllTinNode extends Renderable { - - public AllTinNode(List components) {} - - @Override - public void refreshTextColor() {} - - @Override - public String getText() { - return "Components"; - } - - @Override - public void visit(Renderer renderer) {} - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTrafficAreaNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTrafficAreaNode.java deleted file mode 100644 index e0b59d1f..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTrafficAreaNode.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TrafficAreaObject; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllTrafficAreaNode extends Renderable { - - private final List areas; - - private final String text; - - public AllTrafficAreaNode(List areas, TrafficAreaObject.TrafficAreaType type) { - this.areas = areas; - this.text = type.toString(); - - } - - @Override - public void refreshTextColor() { - // no use - } - - @Override - public String getText() { - return this.text; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderTransportation(areas); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTrafficSpacesNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTrafficSpacesNode.java deleted file mode 100644 index e6e7b1b8..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTrafficSpacesNode.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TrafficSpaceObject; - -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllTrafficSpacesNode extends Renderable { - - private final List spaces; - - private final String text; - - public AllTrafficSpacesNode(List sections, TrafficSpaceObject.TrafficSpaceType type) { - this.spaces = sections; - this.text = type.toString(); - - } - - @Override - public void refreshTextColor() { - // no use - } - - @Override - public String getText() { - return this.text; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderTransportation(spaces); - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTransportSectionNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTransportSectionNode.java deleted file mode 100644 index 465ebaf7..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTransportSectionNode.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TransportSection; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllTransportSectionNode extends Renderable { - - private final List sections; - - private final String text; - - public AllTransportSectionNode(List sections, TransportSection.SectionType type) { - this.sections = sections; - this.text = type.toString(); - - } - - @Override - public void refreshTextColor() { - // no use - } - - @Override - public String getText() { - return this.text; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderTransportation(sections); - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTransportationNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTransportationNode.java deleted file mode 100644 index d72e7dcb..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTransportationNode.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllTransportationNode extends Renderable { - - private final List transportation; - - public AllTransportationNode(List transportation) { - this.transportation = transportation; - } - - @Override - public void refreshTextColor() { - // no use - } - - @Override - public String getText() { - return "Transportation"; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderTransportation(transportation); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelConstructiveElementsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelConstructiveElementsNode.java deleted file mode 100644 index 053dc8e3..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelConstructiveElementsNode.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TunnelConstructiveElement; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllTunnelConstructiveElementsNode extends Renderable{ - - private final List constructiveElements; - - public AllTunnelConstructiveElementsNode(List constructiveElements) { - this.constructiveElements = constructiveElements; - } - - @Override - public String getText() { - return "Constructive Elements"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean isValidated = false; - for (TunnelConstructiveElement bce : constructiveElements) { - if (bce.isValidated()) { - isValidated = true; - } - if (bce.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - if (isValidated) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelPartsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelPartsNode.java deleted file mode 100644 index 989bafac..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelPartsNode.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TunnelPart; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllTunnelPartsNode extends Renderable{ - - private final List tunnelParts; - - public AllTunnelPartsNode(List tunnelParts) { - this.tunnelParts = tunnelParts; - } - - @Override - public String getText() { - return "Tunnel Parts"; - } - - @Override - public void visit(Renderer renderer) { - renderer.clearCurrentRender(); - } - - @Override - public void refreshTextColor() { - boolean wasChecked = false; - for (TunnelPart tp : tunnelParts) { - if (tp.isValidated()) { - wasChecked = true; - if (tp.containsAnyError()) { - setStatus(CheckStatus.ERROR); - return; - } - } - } - if (wasChecked) { - setStatus(CheckStatus.OK); - } else { - setStatus(CheckStatus.NOT_CHECKED); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelsNode.java deleted file mode 100644 index 477b9923..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllTunnelsNode.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.Tunnel; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -import java.util.List; - -public class AllTunnelsNode extends Renderable{ - - private final List tunnels; - - public AllTunnelsNode(List tunnels) { - this.tunnels = tunnels; - } - - @Override - public void refreshTextColor() { - // no color changes - } - - @Override - public String getText() { - return "Tunnels"; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderTunnels(tunnels); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllVegetationNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllVegetationNode.java deleted file mode 100644 index 7911341c..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllVegetationNode.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.Vegetation; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllVegetationNode extends Renderable { - - private final List vegetation; - - public AllVegetationNode(List vegetation) { - this.vegetation = vegetation; - } - - @Override - public void refreshTextColor() { - // no use - } - - @Override - public String getText() { - return "Vegetation"; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderVegetation(vegetation); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllWaterNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllWaterNode.java deleted file mode 100644 index 3143d589..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/AllWaterNode.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import java.util.List; - -import de.hft.stuttgart.citydoctor2.datastructure.WaterObject; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class AllWaterNode extends Renderable { - - private final List water; - - public AllWaterNode(List water) { - this.water = water; - } - - @Override - public void refreshTextColor() { - // no use - } - - @Override - public String getText() { - return "Water"; - } - - @Override - public void visit(Renderer renderer) { - renderer.renderWater(water); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BoundarySurfaceNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BoundarySurfaceNode.java deleted file mode 100644 index 581bc2e9..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BoundarySurfaceNode.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class BoundarySurfaceNode extends Renderable { - - private final BoundarySurface bs; - - public BoundarySurfaceNode(BoundarySurface bs) { - this.bs = bs; - } - - @Override - public String getText() { - return bs.getGmlId().getGmlString() + " [" + bs.getType() + "]"; - } - - @Override - public void visit(Renderer renderer) { - renderer.render(bs); - } - - @Override - public void refreshTextColor() { - if (!bs.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (bs.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BridgeConstructiveElementNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BridgeConstructiveElementNode.java deleted file mode 100644 index d3f839de..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BridgeConstructiveElementNode.java +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * Copyright 2023 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.BridgeConstructiveElement; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class BridgeConstructiveElementNode extends Renderable { - - private final BridgeConstructiveElement bce; - - public BridgeConstructiveElementNode(BridgeConstructiveElement bce) { - this.bce = bce; - } - - @Override - public String getText() { - return bce.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(bce); - } - - @Override - public void refreshTextColor() { - if (!bce.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (bce.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BridgeNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BridgeNode.java deleted file mode 100644 index 8a0b96c2..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BridgeNode.java +++ /dev/null @@ -1,60 +0,0 @@ -/*- - * Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject; -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class BridgeNode extends Renderable implements FeatureNode { - - private final BridgeObject bridge; - - public BridgeNode(BridgeObject bridge) { - this.bridge = bridge; - } - - @Override - public String getText() { - return bridge.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(bridge); - } - - @Override - public void refreshTextColor() { - if (!bridge.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (bridge.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - - @Override - public CityObject getFeature() { - return bridge; - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingNode.java deleted file mode 100644 index 7334ab07..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingNode.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.Building; -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class BuildingNode extends Renderable implements FeatureNode { - - private final Building building; - - public BuildingNode(Building building) { - this.building = building; - } - - @Override - public String getText() { - return building.getGmlId().getGmlString(); - } - - public Building getBuilding() { - return building; - } - - @Override - public void visit(Renderer renderer) { - renderer.render(building); - } - - @Override - public void refreshTextColor() { - if (!building.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (building.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - @Override - public CityObject getFeature() { - return building; - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingPartNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingPartNode.java deleted file mode 100644 index 4c9b5e26..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingPartNode.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class BuildingPartNode extends Renderable { - - private final BuildingPart bp; - - public BuildingPartNode(BuildingPart bp) { - this.bp = bp; - } - - @Override - public String getText() { - return bp.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(bp); - } - - @Override - public void refreshTextColor() { - if (!bp.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (bp.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingUnitNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingUnitNode.java deleted file mode 100644 index 805b7503..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/BuildingUnitNode.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class BuildingUnitNode extends Renderable{ - - private final BuildingUnit buildingUnit; - - public BuildingUnitNode(BuildingUnit buildingUnit) { - this.buildingUnit = buildingUnit; - } - - @Override - public String getText() { - return buildingUnit.getGmlId().getGmlString(); - } - - - @Override - public void visit(Renderer renderer) { - renderer.render(buildingUnit); - } - - @Override - public void refreshTextColor() { - if (!buildingUnit.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (buildingUnit.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityFurnitureNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityFurnitureNode.java deleted file mode 100644 index 588669bb..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityFurnitureNode.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture; -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class CityFurnitureNode extends Renderable implements FeatureNode { - - private final CityFurniture cityFurniture; - - public CityFurnitureNode(CityFurniture cityFurniture) { - this.cityFurniture = cityFurniture; - } - - @Override - public String getText() { - return cityFurniture.getGmlId().getGmlString(); - } - - - @Override - public void visit(Renderer renderer) { - renderer.render(cityFurniture); - } - - @Override - public void refreshTextColor() { - if (!cityFurniture.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (cityFurniture.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - @Override - public CityObject getFeature() { - return cityFurniture; - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/FeatureNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/FeatureNode.java deleted file mode 100644 index 5ad2972c..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/FeatureNode.java +++ /dev/null @@ -1,8 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; - -public interface FeatureNode { - - public CityObject getFeature(); -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/FurnitureNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/FurnitureNode.java deleted file mode 100644 index e78251ab..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/FurnitureNode.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.AbstractFurniture; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class FurnitureNode extends Renderable{ - - private final AbstractFurniture furniture; - - public FurnitureNode(AbstractFurniture furniture) { - this.furniture = furniture; - } - - @Override - public String getText() { - return furniture.getGmlId().getGmlString(); - } - - - @Override - public void visit(Renderer renderer) { - renderer.render(furniture); - } - - @Override - public void refreshTextColor() { - if (!furniture.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (furniture.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GenericCityObjectsNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GenericCityObjectsNode.java deleted file mode 100644 index 36f9d912..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GenericCityObjectsNode.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; -import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class GenericCityObjectsNode extends Renderable implements FeatureNode { - - private final GenericCityObject gcobject; - - public GenericCityObjectsNode(GenericCityObject gcobject) { - this.gcobject = gcobject; - } - - @Override - public String getText() { - return gcobject.getGmlId().getGmlString(); - } - - - @Override - public void visit(Renderer renderer) { - renderer.render(gcobject); - } - - @Override - public void refreshTextColor() { - if (!gcobject.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (gcobject.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - @Override - public CityObject getFeature() { - return gcobject; - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/InstallationNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/InstallationNode.java deleted file mode 100644 index ffe009db..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/InstallationNode.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.Installation; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class InstallationNode extends Renderable { - - private final Installation bi; - - public InstallationNode(Installation bi) { - this.bi = bi; - } - - @Override - public String getText() { - return bi.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(bi); - } - - @Override - public void refreshTextColor() { - if (!bi.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (bi.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } -} \ No newline at end of file diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/LandUseNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/LandUseNode.java deleted file mode 100644 index 44382978..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/LandUseNode.java +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.LandObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class LandUseNode extends Renderable { - - private final LandObject landUse; - - public LandUseNode(LandObject landUse) { - this.landUse = landUse; - } - - @Override - public void refreshTextColor() { - if (!landUse.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (landUse.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - @Override - public String getText() { - return "[LandUse] " + landUse.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(landUse); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ReliefNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ReliefNode.java deleted file mode 100644 index 199d3dfa..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ReliefNode.java +++ /dev/null @@ -1,55 +0,0 @@ -/*- - * Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.ReliefObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class ReliefNode extends Renderable { - - private final ReliefObject relief; - - public ReliefNode(ReliefObject relief) { - this.relief = relief; - } - - - @Override - public void refreshTextColor() { - if (!relief.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (relief.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - @Override - public String getText() { - return "[ReliefFeature] " + relief.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(relief); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/RoomNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/RoomNode.java deleted file mode 100644 index 21c283cc..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/RoomNode.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.AbstractRoom; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class RoomNode extends Renderable{ - - private final AbstractRoom room; - - public RoomNode(AbstractRoom room) { - this.room = room; - } - - @Override - public String getText() { - return room.getGmlId().getGmlString(); - } - - - @Override - public void visit(Renderer renderer) { - renderer.render(room); - } - - @Override - public void refreshTextColor() { - if (!room.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (room.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/StoreyNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/StoreyNode.java deleted file mode 100644 index c0b0fe0b..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/StoreyNode.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.Storey; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class StoreyNode extends Renderable{ - - private final Storey storey; - - public StoreyNode(Storey storey) { - this.storey = storey; - } - - @Override - public String getText() { - return storey.getGmlId().getGmlString(); - } - - - @Override - public void visit(Renderer renderer) { - renderer.render(storey); - } - - @Override - public void refreshTextColor() { - if (!storey.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (storey.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TinNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TinNode.java deleted file mode 100644 index 123d1dd4..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TinNode.java +++ /dev/null @@ -1,55 +0,0 @@ -/*- - * Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TinObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class TinNode extends Renderable { - - private final TinObject tin; - - public TinNode(TinObject tin) { - this.tin = tin; - } - - - @Override - public void refreshTextColor() { - if (!tin.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (tin.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - @Override - public String getText() { - return "[TINRelief] " + tin.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(tin); - } - -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TransportationObjectNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TransportationObjectNode.java deleted file mode 100644 index a54cdf27..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TransportationObjectNode.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class TransportationObjectNode extends Renderable { - - private final TransportationObject to; - - public TransportationObjectNode(TransportationObject to) { - this.to = to; - } - - @Override - public String getText() { - return to.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(to); - } - - @Override - public void refreshTextColor() { - if (!to.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (to.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelConstructiveElementNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelConstructiveElementNode.java deleted file mode 100644 index b11a3239..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelConstructiveElementNode.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TunnelConstructiveElement; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class TunnelConstructiveElementNode extends Renderable{ - - private final TunnelConstructiveElement tce; - - public TunnelConstructiveElementNode(TunnelConstructiveElement tce) { - this.tce = tce; - } - - @Override - public String getText() { - return tce.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(tce); - } - - @Override - public void refreshTextColor() { - if (!tce.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (tce.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelNode.java deleted file mode 100644 index 315bf0b2..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelNode.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; -import de.hft.stuttgart.citydoctor2.datastructure.Tunnel; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class TunnelNode extends Renderable implements FeatureNode { - - private final Tunnel tunnel; - - public TunnelNode(Tunnel tunnel) { - this.tunnel = tunnel; - } - - @Override - public String getText() { - return tunnel.getGmlId().getGmlString(); - } - - public Tunnel getTunnel() { - return tunnel; - } - - @Override - public void visit(Renderer renderer) { - renderer.render(tunnel); - } - - @Override - public void refreshTextColor() { - if (!tunnel.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (tunnel.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - @Override - public CityObject getFeature() { - return tunnel; - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelPartNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelPartNode.java deleted file mode 100644 index 04a9a9bb..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TunnelPartNode.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.TunnelPart; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class TunnelPartNode extends Renderable{ - - private final TunnelPart tp; - - public TunnelPartNode(TunnelPart tp) { - this.tp = tp; - } - - @Override - public String getText() { - return tp.getGmlId().getGmlString(); - } - - @Override - public void visit(Renderer renderer) { - renderer.render(tp); - } - - @Override - public void refreshTextColor() { - if (!tp.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (tp.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } -} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VegetationNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VegetationNode.java deleted file mode 100644 index d99e55f8..00000000 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VegetationNode.java +++ /dev/null @@ -1,61 +0,0 @@ -/*- - * Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.gui.tree; - -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; -import de.hft.stuttgart.citydoctor2.datastructure.Vegetation; -import de.hft.stuttgart.citydoctor2.gui.CheckStatus; -import de.hft.stuttgart.citydoctor2.gui.Renderer; - -public class VegetationNode extends Renderable implements FeatureNode { - - private final Vegetation veg; - private final String text; - - public VegetationNode(Vegetation veg) { - this.veg = veg; - text = "[" + veg.getVegetationType() + "] " + veg.getGmlId().getGmlString(); - } - - @Override - public void refreshTextColor() { - if (!veg.isValidated()) { - setStatus(CheckStatus.NOT_CHECKED); - } else if (veg.containsAnyError()) { - setStatus(CheckStatus.ERROR); - } else { - setStatus(CheckStatus.OK); - } - } - - @Override - public String getText() { - return text; - } - - @Override - public void visit(Renderer renderer) { - renderer.render(veg); - } - - @Override - public CityObject getFeature() { - return veg; - } -} -- GitLab From ed3818881e25344d1646ab9334ba19b46949da7c Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 17:03:55 +0200 Subject: [PATCH 14/51] Refactor: Move node classes into their own package --- .../stuttgart/citydoctor2/gui/CityDoctorController.java | 5 +++++ .../java/de/hft/stuttgart/citydoctor2/gui/Renderer.java | 6 ++++++ .../de/hft/stuttgart/citydoctor2/gui/ZipEntryManager.java | 2 +- .../stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java | 5 +++++ .../stuttgart/citydoctor2/gui/tree/ZipEntryListCell.java | 1 + .../gui/tree/{ => node}/CityObjectGroupNode.java | 3 ++- .../citydoctor2/gui/tree/{ => node}/CityObjectNode.java | 7 +++---- .../citydoctor2/gui/tree/{ => node}/EdgeNode.java | 3 ++- .../citydoctor2/gui/tree/{ => node}/ErrorNode.java | 3 ++- .../gui/tree/{ => node}/GenericAttributeNode.java | 3 ++- .../citydoctor2/gui/tree/{ => node}/GeometryNode.java | 3 ++- .../citydoctor2/gui/tree/{ => node}/LinearRingNode.java | 3 ++- .../citydoctor2/gui/tree/{ => node}/OpeningNode.java | 3 ++- .../citydoctor2/gui/tree/{ => node}/PolygonNode.java | 3 ++- .../citydoctor2/gui/tree/{ => node}/TextNode.java | 3 ++- .../gui/tree/{ => node}/TopLevelCityObjectNode.java | 2 +- .../citydoctor2/gui/tree/{ => node}/VertexNode.java | 3 ++- .../citydoctor2/gui/tree/{ => node}/ZipEntryNode.java | 2 +- 18 files changed, 43 insertions(+), 17 deletions(-) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/CityObjectGroupNode.java (88%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/CityObjectNode.java (84%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/EdgeNode.java (92%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/ErrorNode.java (81%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/GenericAttributeNode.java (82%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/GeometryNode.java (91%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/LinearRingNode.java (88%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/OpeningNode.java (87%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/PolygonNode.java (87%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/TextNode.java (78%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/TopLevelCityObjectNode.java (96%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/VertexNode.java (89%) rename CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/{ => node}/ZipEntryNode.java (95%) 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 d616cfe4..67704a12 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 @@ -9,6 +9,11 @@ import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException; import de.hft.stuttgart.citydoctor2.gui.table.ErrorStat; import de.hft.stuttgart.citydoctor2.gui.tree.*; +import de.hft.stuttgart.citydoctor2.gui.tree.node.CityObjectGroupNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.CityObjectNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.GeometryNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.OpeningNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.TopLevelCityObjectNode; import de.hft.stuttgart.citydoctor2.mapper.citygml3.GMLValidationHandler; import de.hft.stuttgart.citydoctor2.parser.*; import de.hft.stuttgart.citydoctor2.utils.ArchivePacker; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java index 56302b8a..94e35e3a 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java @@ -6,6 +6,12 @@ import de.hft.stuttgart.citydoctor2.checks.util.CityObjectCollector; import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter; import de.hft.stuttgart.citydoctor2.gui.tree.*; +import de.hft.stuttgart.citydoctor2.gui.tree.node.EdgeNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.ErrorNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.GenericAttributeNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.LinearRingNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.PolygonNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.VertexNode; import de.hft.stuttgart.citydoctor2.math.Triangle3d; import javafx.application.Platform; import javafx.scene.control.TreeItem; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ZipEntryManager.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ZipEntryManager.java index 2429a5ff..b27a3f37 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ZipEntryManager.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ZipEntryManager.java @@ -1,7 +1,7 @@ package de.hft.stuttgart.citydoctor2.gui; import de.hft.stuttgart.citydoctor2.gui.tree.ZipEntryListCell; -import de.hft.stuttgart.citydoctor2.gui.tree.ZipEntryNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.ZipEntryNode; import de.hft.stuttgart.citydoctor2.utils.Localization; import de.hft.stuttgart.citydoctor2.zip.CityGmlZipArchive; import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry; 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 d28cca5e..943954cc 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 @@ -46,6 +46,11 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.gui.CheckStatus; +import de.hft.stuttgart.citydoctor2.gui.tree.node.EdgeNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.LinearRingNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.PolygonNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.TextNode; +import de.hft.stuttgart.citydoctor2.gui.tree.node.VertexNode; import de.hft.stuttgart.citydoctor2.math.Triangle3d; import de.hft.stuttgart.citydoctor2.utils.Localization; import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ZipEntryListCell.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ZipEntryListCell.java index 7677a2fc..74547188 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ZipEntryListCell.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ZipEntryListCell.java @@ -1,5 +1,6 @@ package de.hft.stuttgart.citydoctor2.gui.tree; +import de.hft.stuttgart.citydoctor2.gui.tree.node.ZipEntryNode; import javafx.scene.control.ListCell; public class ZipEntryListCell extends ListCell { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectGroupNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectGroupNode.java similarity index 88% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectGroupNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectGroupNode.java index ff3f9c8b..492f1a47 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectGroupNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectGroupNode.java @@ -1,7 +1,8 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; import javafx.scene.paint.Color; import java.util.List; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectNode.java similarity index 84% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectNode.java index ef2cd58f..d15a674a 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectNode.java @@ -1,12 +1,13 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import de.hft.stuttgart.citydoctor2.gui.CheckStatus; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -public class CityObjectNode extends Renderable implements FeatureNode{ +public class CityObjectNode extends Renderable { private static final Logger logger = LogManager.getLogger(CityObjectNode.class); @@ -37,10 +38,8 @@ public class CityObjectNode extends Renderable implements FeatureNode{ renderer.render(co); } - @Override public CityObject getFeature() { return co; } - } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/EdgeNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/EdgeNode.java similarity index 92% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/EdgeNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/EdgeNode.java index af9a2858..2ae5e10d 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/EdgeNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/EdgeNode.java @@ -1,4 +1,4 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; @@ -6,6 +6,7 @@ import java.text.DecimalFormatSymbols; import de.hft.stuttgart.citydoctor2.datastructure.Edge; import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class EdgeNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/ErrorNode.java similarity index 81% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/ErrorNode.java index a3757cc3..caa947d9 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/ErrorNode.java @@ -1,7 +1,8 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class ErrorNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GenericAttributeNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/GenericAttributeNode.java similarity index 82% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GenericAttributeNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/GenericAttributeNode.java index 9f71ead8..10c6d3aa 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GenericAttributeNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/GenericAttributeNode.java @@ -1,7 +1,8 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.datastructure.GenericAttribute; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class GenericAttributeNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GeometryNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/GeometryNode.java similarity index 91% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GeometryNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/GeometryNode.java index 28cbc7f0..68c6582e 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/GeometryNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/GeometryNode.java @@ -1,9 +1,10 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.ImplicitGeometryHolder; import de.hft.stuttgart.citydoctor2.gui.CheckStatus; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class GeometryNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/LinearRingNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/LinearRingNode.java similarity index 88% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/LinearRingNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/LinearRingNode.java index ac1f4f83..8bcdded8 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/LinearRingNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/LinearRingNode.java @@ -1,8 +1,9 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.gui.CheckStatus; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class LinearRingNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/OpeningNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/OpeningNode.java similarity index 87% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/OpeningNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/OpeningNode.java index c0e425ab..81ebece1 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/OpeningNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/OpeningNode.java @@ -1,8 +1,9 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.datastructure.Opening; import de.hft.stuttgart.citydoctor2.gui.CheckStatus; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class OpeningNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/PolygonNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/PolygonNode.java similarity index 87% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/PolygonNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/PolygonNode.java index 768c4d07..0504e065 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/PolygonNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/PolygonNode.java @@ -1,8 +1,9 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.gui.CheckStatus; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class PolygonNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TextNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/TextNode.java similarity index 78% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TextNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/TextNode.java index d050e768..d12484ba 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TextNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/TextNode.java @@ -1,6 +1,7 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class TextNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TopLevelCityObjectNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/TopLevelCityObjectNode.java similarity index 96% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TopLevelCityObjectNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/TopLevelCityObjectNode.java index 11486cf1..7d59d780 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TopLevelCityObjectNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/TopLevelCityObjectNode.java @@ -1,4 +1,4 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import de.hft.stuttgart.citydoctor2.gui.MainWindow; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VertexNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/VertexNode.java similarity index 89% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VertexNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/VertexNode.java index c22b28cc..c8251e1f 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VertexNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/VertexNode.java @@ -1,10 +1,11 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.gui.Renderer; +import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; public class VertexNode extends Renderable { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ZipEntryNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/ZipEntryNode.java similarity index 95% rename from CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ZipEntryNode.java rename to CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/ZipEntryNode.java index ad555675..f4ba0875 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ZipEntryNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/ZipEntryNode.java @@ -1,4 +1,4 @@ -package de.hft.stuttgart.citydoctor2.gui.tree; +package de.hft.stuttgart.citydoctor2.gui.tree.node; import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry; import javafx.scene.paint.Color; -- GitLab From a4fc4e20bb0046dea513b7ece4551fa25a28ecde Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 17:05:15 +0200 Subject: [PATCH 15/51] Fix: Add Tunnel polygons to BBox calculation --- .../de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java | 1 + 1 file changed, 1 insertion(+) diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java index c0302026..0ec33b0f 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java @@ -86,6 +86,7 @@ public class TriangulatedGeometry { addPolygonDataFromCityObjects(model.getBuildings(), triGeom, Color.WHITE, filters); addPolygonDataFromCityObjects(model.getBridges(), triGeom, Color.CORAL, filters); + addPolygonDataFromCityObjects(model.getTunnels(), triGeom, Color.SLATEGRAY, filters); addPolygonDataFromCityObjects(model.getLand(), triGeom, Color.BROWN, filters); addPolygonDataFromCityObjects(model.getTransportation(), triGeom, Color.YELLOW, filters); addPolygonDataFromCityObjects(model.getVegetation(), triGeom, Color.LIGHTGREEN, filters); -- GitLab From 7ee416b972ae7b5181a825b5fcf6a3ff5879e169 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 8 Apr 2025 17:06:10 +0200 Subject: [PATCH 16/51] Refactor: Adjust Controller to new node implementation --- .../citydoctor2/gui/CityDoctorController.java | 110 ++++++++---------- 1 file changed, 47 insertions(+), 63 deletions(-) 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 67704a12..eba41663 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 @@ -274,15 +274,15 @@ public class CityDoctorController { public void buildTrees() { resetFeatureChunks(); buildBuildings(model); - buildVegetation(model.getVegetation()); - buildTransportation(model.getTransportation()); - buildTunnel(model.getTunnels()); + buildVegetation(model); + buildTransportation(model); + buildTunnel(model); buildBridges(model); buildWater(model); buildLand(model); buildCityFurniture(model); buildOtherCityObjects(model); - buildTunnel(model.getTunnels()); + buildTunnel(model); } private void resetFeatureChunks() { @@ -302,7 +302,8 @@ public class CityDoctorController { return; } TreeView landView = mainWindow.getTerrainView(); - TreeItem landRoot = new TreeItem<>(new AllTerrainNode(model.getLand())); + TreeItem landRoot = new TreeItem<>(new CityObjectGroupNode(model.getLand(), "Land", + Color.BROWN)); landRoot.setExpanded(true); landView.setRoot(landRoot); buildLandFromList(model.getLand(), landView.getRoot()); @@ -314,50 +315,26 @@ public class CityDoctorController { for (int i = landChunk * MAX_FEATURES_PER_CHUNK; i < (landChunk + 1) * MAX_FEATURES_PER_CHUNK && i < list.size(); i++) { CityObject land = list.get(i); - Renderable node; - if (land instanceof ReliefObject relief) { - node = new ReliefNode(relief); - } else if (land instanceof TinObject tin) { - node = new TinNode(tin); - } else { - node = new LandUseNode((LandObject) land); - } + CityObjectNode node = new CityObjectNode(land); TreeItem item = new TreeItem<>(node); item.setExpanded(true); root.getChildren().add(item); createGeometryNodes(land, item); - if (land instanceof ReliefObject relief) { - createTinNodes(relief, item); - } - } - } - - private void createTinNodes(ReliefObject relief, TreeItem item) { - if (relief.getComponents().isEmpty()) { - return; - } - AllTinNode allTinText = new AllTinNode(relief.getComponents()); - TreeItem allBpsTextItem = new TreeItem<>(allTinText); - item.getChildren().add(allBpsTextItem); - for (TinObject tin : relief.getComponents()) { - TinNode tinNode = new TinNode(tin); - TreeItem tinNodeItem = new TreeItem<>(tinNode); - tinNodeItem.setExpanded(true); - allBpsTextItem.getChildren().add(tinNodeItem); - createGeometryNodes(tin, tinNodeItem); } } + private void buildCityFurniture(CityDoctorModel model) { if (model.getCityFurniture().isEmpty()) { return; } TreeView cityFurnitureView = mainWindow.getCityFurnitureView(); - TreeItem cityFurnitureRoot = new TreeItem<>(new AllCityFurnitureNode(model.getCityFurniture())); + TreeItem cityFurnitureRoot = new TreeItem<>(new CityObjectGroupNode(model.getCityFurniture(), + "City Furniture", Color.BLUEVIOLET)); cityFurnitureRoot.setExpanded(true); cityFurnitureView.setRoot(cityFurnitureRoot); - buildTreeFromList(model.getCityFurniture(), cityFurnitureView.getRoot(), cityFurnitureChunkNr); + buildCityFurnitureTreeFromList(model.getCityFurniture(), cityFurnitureView.getRoot()); addMoreButtonIfNecessary(model.getCityFurniture(), cityFurnitureView, cityFurnitureRoot, cityFurnitureChunkNr); } @@ -366,10 +343,11 @@ public class CityDoctorController { return; } TreeView otherObjectsView = mainWindow.getGenericCityObjectView(); - TreeItem otherObjectsRoot = new TreeItem<>(new AllOtherObjectsNode(model.getGenericCityObjects())); + TreeItem otherObjectsRoot = new TreeItem<>(new CityObjectGroupNode(model.getGenericCityObjects(), + "Generic CityObjects", Color.DARKGRAY)); otherObjectsRoot.setExpanded(true); otherObjectsView.setRoot(otherObjectsRoot); - buildTreeFromList(model.getGenericCityObjects(), otherObjectsView.getRoot(), genericCityObjectsChunkNr); + buildGenericCityObjectTreeFromList(model.getGenericCityObjects(), otherObjectsView.getRoot()); addMoreButtonIfNecessary(model.getGenericCityObjects(), otherObjectsView, otherObjectsRoot, genericCityObjectsChunkNr); } @@ -378,10 +356,11 @@ public class CityDoctorController { return; } TreeView waterView = mainWindow.getWaterView(); - TreeItem waterRoot = new TreeItem<>(new AllWaterNode(model.getWater())); + TreeItem waterRoot = new TreeItem<>(new CityObjectGroupNode(model.getWater(), "Water", + Color.LIGHTSKYBLUE)); waterRoot.setExpanded(true); waterView.setRoot(waterRoot); - buildTreeFromList(model.getWater(), waterView.getRoot(), waterChunkNr); + buildWaterTreeFromList(model.getWater(), waterRoot); addMoreButtonIfNecessary(model.getWater(), waterView, waterRoot, waterChunkNr); } @@ -390,47 +369,51 @@ public class CityDoctorController { return; } TreeView bridgeView = mainWindow.getBridgeView(); - TreeItem bridgeRoot = new TreeItem<>(new AllBridgesNode(model.getBridges())); + TreeItem bridgeRoot = new TreeItem<>(new CityObjectGroupNode(model.getBridges(), "Bridges", + Color.CORAL)); bridgeRoot.setExpanded(true); bridgeView.setRoot(bridgeRoot); buildBridgeTreeFromList(model.getBridges(), bridgeView.getRoot()); addMoreButtonIfNecessary(model.getBridges(), bridgeView, bridgeRoot, bridgeChunkNr); } - private void buildTransportation(List trans) { - if (trans.isEmpty()) { + private void buildTransportation(CityDoctorModel model) { + if (model.getTransportation().isEmpty()) { return; } TreeView transView = mainWindow.getTransportationView(); - TreeItem transRoot = new TreeItem<>(new AllTransportationNode(model.getTransportation())); + TreeItem transRoot = new TreeItem<>(new CityObjectGroupNode(model.getTransportation(), + "Transportation", Color.YELLOW)); transRoot.setExpanded(true); transView.setRoot(transRoot); - buildTransportationTreeFromList(trans, transView.getRoot()); - addMoreButtonIfNecessary(trans, transView, transRoot, transportationChunkNr); + buildTransportationTreeFromList(model.getTransportation(), transView.getRoot()); + addMoreButtonIfNecessary(model.getTransportation(), transView, transRoot, transportationChunkNr); } - private void buildTunnel(List tunnels) { - if (tunnels.isEmpty()) { + private void buildTunnel(CityDoctorModel model) { + if (model.getTunnels().isEmpty()) { return; } - TreeView transView = mainWindow.getTunnelView(); - TreeItem transRoot = new TreeItem<>(new AllTunnelsNode(model.getTunnels())); - transRoot.setExpanded(true); - transView.setRoot(transRoot); - buildTreeFromList(tunnels, transView.getRoot(), tunnelChunkNr); - addMoreButtonIfNecessary(tunnels, transView, transRoot, tunnelChunkNr); + TreeView tunnelView = mainWindow.getTunnelView(); + TreeItem tunnelRoot = new TreeItem<>(new CityObjectGroupNode(model.getTunnels(), "Tunnel", + Color.SLATEGRAY)); + tunnelRoot.setExpanded(true); + tunnelView.setRoot(tunnelRoot); + buildTunnelTreeFromList(model.getTunnels(), tunnelRoot); + addMoreButtonIfNecessary(model.getTunnels(), tunnelView, tunnelRoot, tunnelChunkNr); } - private void buildVegetation(List veg) { - if (veg.isEmpty()) { + private void buildVegetation(CityDoctorModel model) { + if (model.getVegetation().isEmpty()) { return; } TreeView vegetationsView = mainWindow.getVegetationView(); - TreeItem vegRoot = new TreeItem<>(new AllVegetationNode(model.getVegetation())); + TreeItem vegRoot = new TreeItem<>(new CityObjectGroupNode(model.getVegetation(), + "Vegetation", Color.LIGHTGREEN)); vegRoot.setExpanded(true); vegetationsView.setRoot(vegRoot); - buildTreeFromListWithProducer(veg, vegetationsView.getRoot(), vegetationChunkNr, VegetationNode::new); - addMoreButtonIfNecessary(veg, vegetationsView, vegRoot, vegetationChunkNr); + buildVegetationTreeFromList(model.getVegetation(), vegRoot); + addMoreButtonIfNecessary(model.getVegetation(), vegetationsView, vegRoot, vegetationChunkNr); } private void addMoreButtonIfNecessary(List list, TreeView view, @@ -466,7 +449,8 @@ public class CityDoctorController { return; } TreeView buildingsView = mainWindow.getBuildingsView(); - TreeItem root = new TreeItem<>(new AllBuildingsNode(model.getBuildings())); + TreeItem root = new TreeItem<>(new CityObjectGroupNode(model.getBuildings(), "Buildings", + Color.WHITE)); root.setExpanded(true); buildingsView.setRoot(root); buildBuildingTreeFromList(model.getBuildings(), root); @@ -1554,7 +1538,7 @@ public class CityDoctorController { updateTree(mainWindow.getBuildingsView().getRoot()); break; case VEGETATION: - buildVegetation(model.getVegetation()); + buildVegetation(model); updateTree(mainWindow.getVegetationView().getRoot()); break; case BRIDGE: @@ -1566,15 +1550,14 @@ public class CityDoctorController { updateTree(mainWindow.getTerrainView().getRoot()); break; case TRANSPORTATION: - buildTransportation(model.getTransportation()); + buildTransportation(model); updateTree(mainWindow.getTransportationView().getRoot()); break; case TUNNEL: - buildTunnel(model.getTunnels()); + buildTunnel(model); updateTree(mainWindow.getTunnelView().getRoot()); break; case WATER: - buildWater(model); updateTree(mainWindow.getWaterView().getRoot()); break; @@ -1640,12 +1623,13 @@ public class CityDoctorController { public void delete(TreeItem selectedItem) { if (model == null) { return; - } + }/* TODO: Rework this properly via Renderable implementation Renderable render = selectedItem.getValue(); if (render instanceof BuildingNode node) { model.getBuildings().remove(node.getBuilding()); mainWindow.getBuildingsView().getRoot().getChildren().remove(selectedItem); } + */ } -- GitLab From 23051003707633ac7ecec5c70d53e4c960eb791c Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 9 Apr 2025 09:17:54 +0200 Subject: [PATCH 17/51] Fix: Add Tunnel features to error collector --- .../de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java | 1 + 1 file changed, 1 insertion(+) 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 eba41663..b7f209a2 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 @@ -1222,6 +1222,7 @@ public class CityDoctorController { addErrorStats(stats, model.getBridges()); addErrorStats(stats, model.getBuildings()); addErrorStats(stats, model.getLand()); + addErrorStats(stats, model.getTunnels()); addErrorStats(stats, model.getTransportation()); addErrorStats(stats, model.getVegetation()); addErrorStats(stats, model.getWater()); -- GitLab From 86336bdf5d62f8ac7c041c79a86cb9aef3f12fa9 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 9 Apr 2025 14:30:26 +0200 Subject: [PATCH 18/51] Fix: Fix parsing of Intersections --- .../de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 b7f209a2..3f5832d1 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 @@ -428,6 +428,7 @@ public class CityDoctorController { root.getChildren().remove(root.getChildren().size() - 1); chunkCounter.incrementAndGet(); int visibleFeatures = countVisibleNodes(view); + buildTreeFromList(list, root, chunkCounter); updateTree(root); if (selectedIndex >= 0) { @@ -675,7 +676,7 @@ public class CityDoctorController { } if (!top.getIntersections().isEmpty()) { - CityObjectGroupNode intersectionsGroupNode = new CityObjectGroupNode(top.getSections(), + CityObjectGroupNode intersectionsGroupNode = new CityObjectGroupNode(top.getIntersections(), "Intersections", Color.YELLOW); TreeItem intersectionsGroupItem = new TreeItem<>(intersectionsGroupNode); root.getChildren().add(intersectionsGroupItem); -- GitLab From a49ef71b12c79b6d51ba053b544ba95855903241 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 9 Apr 2025 14:31:49 +0200 Subject: [PATCH 19/51] Fix: Fix getGmlObject() in GenericCityObject --- .../stuttgart/citydoctor2/datastructure/GenericCityObject.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 40a8c416..4a4d76b3 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 @@ -198,7 +198,7 @@ public class GenericCityObject extends CityObject { @Override public AbstractCityObject getGmlObject() { - return null; + return cgmlGos; } @Override -- GitLab From 06712902cdcb686d569e5941f42b7b4248543e13 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 9 Apr 2025 14:32:29 +0200 Subject: [PATCH 20/51] Feat: Add TINRelief parsing --- .../datastructure/ReliefObject.java | 4 + .../citygml3/Citygml3FeatureMapper.java | 91 +++++++++++++++---- .../citygml3/Citygml3GeometryMapper.java | 6 ++ 3 files changed, 85 insertions(+), 16 deletions(-) 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 e96eacd3..261a4c42 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 @@ -156,6 +156,10 @@ public class ReliefObject extends CityObject { return FeatureType.LAND; } + public void addComponent(TinObject component) { + components.add(component); + } + public List getComponents() { return components; } 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 f3744e4d..faf07df1 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 @@ -46,6 +46,13 @@ import org.citygml4j.core.model.construction.AbstractConstruction; import org.citygml4j.core.model.core.*; import org.citygml4j.core.model.deprecated.transportation.TransportationComplex; import org.citygml4j.core.model.landuse.LandUse; +import org.citygml4j.core.model.relief.AbstractReliefComponentProperty; +import org.citygml4j.core.model.relief.BreaklineRelief; +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.relief.TinProperty; import org.citygml4j.core.model.transportation.*; import org.citygml4j.core.model.tunnel.Tunnel; import org.citygml4j.core.model.tunnel.*; @@ -118,9 +125,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { CityFurniture cf = new CityFurniture(); cf.setGmlObject(gmlCityFurniture); mapAbstractOccupiedSpace(gmlCityFurniture, cf); - resolveAndClearReferences(); - cf.unsetGmlGeometries(); - updateEdgesAndVertices(cf); + finishCityObjectConstruction(cf); model.addCityFurniture(cf); } @@ -141,9 +146,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { } } mapAbstractOccupiedSpace(gos, gco); - resolveAndClearReferences(); - gco.unsetGmlGeometries(); - updateEdgesAndVertices(gco); + finishCityObjectConstruction(gco); model.addGenericCityObject(gco); } @@ -158,6 +161,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { BuildingPart part = new BuildingPart(cdBuilding); readAbstractBuilding(bpProp.getObject(), part); } + finishCityObjectConstruction(cdBuilding); model.addBuilding(cdBuilding); } @@ -181,9 +185,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { wo.addBoundarySurface(bs); } - resolveAndClearReferences(); - wo.unsetGmlGeometries(); - updateEdgesAndVertices(wo); + finishCityObjectConstruction(wo); for (BoundarySurface bs : surfaceMapper.getSurfaces()) { updateEdgesAndVertices(bs); } @@ -200,6 +202,67 @@ public class Citygml3FeatureMapper extends ObjectWalker { model.addLand(lo); } + public void visit(ReliefFeature relief) { + ReliefObject ro = new ReliefObject(relief); + mapAbstractSpaceBoundary(relief, ro); + mapReliefFeature(relief, ro); + finishCityObjectConstruction(ro); + model.addRelief(ro); + } + + public void mapReliefFeature(ReliefFeature relief, ReliefObject reliefObject) { + if (relief.isSetReliefComponents()) { + for (AbstractReliefComponentProperty arcProp : relief.getReliefComponents()) { + if (arcProp.isSetObject()) { + ObjectWalker ow = new ObjectWalker() { + @Override + public void visit(TINRelief rel) { + mapTINRelief(rel, reliefObject); + } + + @Override + public void visit(MassPointRelief rel) { + //TODO: Check if implementation is required + } + + @Override + public void visit(BreaklineRelief rel) { + //TODO: Check if implementation is required + } + + @Override + public void visit(RasterRelief rel) { + //TODO: Check if implementation is required + } + + }; + arcProp.getObject().accept(ow); + } + } + } + } + + public void mapTINRelief(TINRelief relief, ReliefObject reliefObject) { + TinObject to = new TinObject(relief); + Lod reliefLod = switch (relief.getLod()) { + case 1 -> Lod.LOD1; + case 2 -> Lod.LOD2; + case 3 -> Lod.LOD3; + case 4 -> null; + default -> throw new IllegalStateException("TINRelief has unexpected LOD value: " + relief.getLod()); + }; + if (reliefLod == null) { + logger.warn("IllegalState: TINRelief {} has LOD value 4!", relief.getId()); + return; + } + reliefObject.addComponent(to); + Citygml3GeometryMapper tinMapper = new Citygml3GeometryMapper(config, vertexMap); + relief.getTin().getObject().accept(tinMapper); + Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, reliefLod); + tinMapper.getPolygons().forEach(geom::addPolygon); + to.addGeometry(geom); + } + @Override public void visit(PlantCover plantCover) { Vegetation veg = new Vegetation(VegetationType.PLANT_COVER); @@ -281,8 +344,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { mapAbstractBridge(gmlBridgePart, bPart); bo.addBridgePart(bPart); } - resolveAndClearReferences(); - updateEdgesAndVertices(bo); + finishCityObjectConstruction(bo); for (BridgeObject part : bo.getParts()) { updateEdgesAndVertices(part); } @@ -337,8 +399,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { for (BoundarySurface bs : bo.getBoundarySurfaces()) { updateEdgesAndVertices(bs); } - - bo.unsetGmlGeometries(); } private Installation mapBridgeInstallation(BridgeInstallation gmlBi) { @@ -392,8 +452,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { tu.addTunnelPart(tPart); } readAbstractTunnel(tunnel, tu); - resolveAndClearReferences(); - updateEdgesAndVertices(tu); + finishCityObjectConstruction(tu); for (TunnelPart part : tu.getTunnelParts()) { updateEdgesAndVertices(part); } @@ -739,6 +798,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { } private void finishCityObjectConstruction(CityObject co) { + parseId(co.getGmlObject(), co); co.unsetGmlGeometries(); resolveAndClearReferences(); updateEdgesAndVertices(co); @@ -974,7 +1034,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { AbstractBuilding cdBuilding) { mapAbstractOccupiedSpace(gmlAb, cdBuilding); cdBuilding.setGmlObject(gmlAb); - // parse deprecated geometries parseAndAddMultiSurface(gmlAb.getDeprecatedProperties().getLod1MultiSurface(), Lod.LOD1, cdBuilding); parseAndAddMultiSurface(gmlAb.getDeprecatedProperties().getLod4MultiSurface(), Lod.LOD4, cdBuilding); 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 1c9bf340..7b08ba8c 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 @@ -35,6 +35,7 @@ import org.xmlobjects.gml.visitor.GeometryWalker; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -76,6 +77,11 @@ public class Citygml3GeometryMapper extends GeometryWalker { public void visit(PolygonPatch patch) { parsePolygonPatch(patch, patchCollection); } + + @Override + public void visit(Triangle tri) { + parsePolygon(null, tri.getExterior(), Collections.emptyList()); + } }; surface.getPatches().getObjects().forEach(abstractSurfacePatch -> abstractSurfacePatch.accept(patchCollector)); } -- GitLab From 938e4b5ac973987122403c0c010d02ba68bb1ec8 Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 10 Apr 2025 12:00:35 +0200 Subject: [PATCH 21/51] Refactor: Rework selection of render color --- .../datastructure/AbstractFurniture.java | 8 +++++++- .../datastructure/AbstractTunnel.java | 6 ++++++ .../datastructure/BoundarySurface.java | 15 +++++++++++++++ .../BridgeConstructiveElement.java | 5 +++++ .../datastructure/BridgeObject.java | 6 ++++++ .../citydoctor2/datastructure/BridgeRoom.java | 8 +++++++- .../datastructure/BuildingRoom.java | 6 ++++++ .../datastructure/CityFurniture.java | 6 ++++++ .../citydoctor2/datastructure/CityObject.java | 13 +++++++++++++ .../datastructure/GenericCityObject.java | 6 ++++++ .../datastructure/Installation.java | 6 ++++++ .../citydoctor2/datastructure/LandObject.java | 6 ++++++ .../datastructure/ReliefObject.java | 6 ++++++ .../citydoctor2/datastructure/TinObject.java | 6 ++++++ .../TopLevelTransportFeature.java | 2 ++ .../datastructure/TrafficAreaObject.java | 13 ++++++++++++- .../datastructure/TrafficSpaceObject.java | 13 ++++++++++++- .../datastructure/TransportSection.java | 14 ++++++++++++++ .../datastructure/TransportationObject.java | 17 +++++++++++++++++ .../datastructure/TransportationSpace.java | 2 ++ .../TunnelConstructiveElement.java | 6 ++++++ .../datastructure/TunnelHollow.java | 8 +++++++- .../citydoctor2/datastructure/Vegetation.java | 6 ++++++ .../datastructure/WaterObject.java | 6 ++++++ .../citydoctor2/gui/TriangulatedGeometry.java | 19 ++++++++++++++----- .../gui/tree/node/CityObjectNode.java | 2 +- 26 files changed, 200 insertions(+), 11 deletions(-) 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 24243c31..c52765b8 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 @@ -7,6 +7,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; @@ -94,7 +95,7 @@ public abstract class AbstractFurniture extends CityObject { @Override public CityObject getTopLevelCityObject(){ - return parent; + return parent.getTopLevelCityObject(); } public void addBoundarySurface(BoundarySurface boundarySurface) { @@ -134,6 +135,11 @@ public abstract class AbstractFurniture extends CityObject { return parent; } + @Override + public Color getRenderColor() { + return parent.getRenderColor(); + } + @Override public void unsetGmlGeometries() { af.setLod0MultiSurface(null); 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 a84d5255..7b32b8e9 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 @@ -7,6 +7,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; @@ -54,6 +55,11 @@ public abstract class AbstractTunnel extends CityObject { return FeatureType.TUNNEL; } + @Override + public Color getRenderColor() { + return Color.SLATEGRAY; + } + @Override public void unsetGmlGeometries() { at.setLod1Solid(null); 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 890fe593..b2650b30 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 @@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractThematicSurface; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -86,6 +87,20 @@ public class BoundarySurface extends CityObject { return openings; } + @Override + public String getDisplayText() { + return String.format("[%s] %s", this.type.name(), this.getGmlId().toString()); + } + + @Override + public Color getRenderColor() { + return switch (type) { + case ROOF -> Color.RED; + case GROUND -> Color.KHAKI; + default -> Color.WHITE; + }; + } + @Override public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { if (gmlObject.getId() == null) { 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 cd3624ab..0324ed6a 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 @@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; @@ -66,6 +67,10 @@ public class BridgeConstructiveElement extends CityObject { return parent; } + @Override + public Color getRenderColor() { + return parent.getRenderColor().brighter(); + } @Override public Copyable createCopyInstance() { 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 2378f5a2..99995ce2 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 @@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.bridge.AbstractBridge; import org.citygml4j.core.model.bridge.BridgeInstallation; import org.citygml4j.core.model.bridge.BridgeInstallationProperty; @@ -97,6 +98,11 @@ public class BridgeObject extends CityObject { return bridgeFurniture; } + @Override + public Color getRenderColor() { + return Color.LIGHTSTEELBLUE; + } + @Override public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoom.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoom.java index 616aafce..caa11a38 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoom.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoom.java @@ -2,6 +2,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import java.io.Serial; @@ -39,7 +40,12 @@ public class BridgeRoom extends AbstractRoom { @Override public CityObject getTopLevelCityObject() { - return getParent(); + return parent.getTopLevelCityObject(); + } + + @Override + public Color getRenderColor() { + return parent.getRenderColor(); } @Override diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoom.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoom.java index 040cc768..485a75ae 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoom.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoom.java @@ -2,6 +2,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.building.BuildingFurnitureProperty; import java.io.Serial; @@ -55,6 +56,11 @@ public class BuildingRoom extends AbstractRoom { return getParent().getTopLevelCityObject(); } + @Override + public Color getRenderColor() { + return parent.getRenderColor(); + } + @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 e8e83d59..64132620 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 @@ -5,6 +5,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -35,6 +36,11 @@ public class CityFurniture extends CityObject { return cgmlCityFurniture; } + @Override + public Color getRenderColor() { + return Color.THISTLE; + } + public void setGmlObject(org.citygml4j.core.model.cityfurniture.CityFurniture gmlCityFurniture) { cgmlCityFurniture = gmlCityFurniture; } 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 86c6116d..e9a08596 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 @@ -24,6 +24,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -44,6 +45,7 @@ public abstract class CityObject extends GmlElement { @Serial private static final long serialVersionUID = 651712070755024188L; + private final List geometryList = new ArrayList<>(); private final List genericAttributeList = new ArrayList<>(); /** @@ -107,6 +109,17 @@ public abstract class CityObject extends GmlElement { */ public abstract CityObject getTopLevelCityObject(); + /** + * Returns the display text for this object + */ + public String getDisplayText() { + return String.format("[%s] %s", this.getClass().getSimpleName(), this.getGmlId().toString()); + } + + public Color getRenderColor() { + return Color.WHITE; + } + public void addGenericAttribute(GenericAttribute genericAttribute) { genericAttributeList.add(genericAttribute); } 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 4a4d76b3..937502b5 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 @@ -7,6 +7,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.core.AbstractCityObject; @@ -210,6 +211,11 @@ public class GenericCityObject extends CityObject { return boundarySurfaceList; } + @Override + public Color getRenderColor() { + return Color.DARKGOLDENROD; + } + @Override public void unsetGmlGeometries() { cgmlGos.setLod1Solid(null); 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 21a80666..916093df 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 @@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.bridge.BridgeInstallation; import org.citygml4j.core.model.construction.AbstractInstallation; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; @@ -177,6 +178,11 @@ public class Installation extends CityObject { return parent; } + @Override + public Color getRenderColor() { + return parent.getRenderColor().darker(); + } + public void addBoundarySurface(BoundarySurface bs) { boundarySurfaces.add(bs); bs.setParent(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 bee5b6d0..cce15c79 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 @@ -22,6 +22,7 @@ import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.landuse.LandUse; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -63,6 +64,11 @@ public class LandObject extends CityObject { return FeatureType.LAND; } + @Override + public Color getRenderColor() { + return Color.TAN; + } + private void setMultiSurfaceAccordingToLod(Geometry geom, MultiSurface ms) { switch (geom.getLod()) { case LOD0: 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 261a4c42..0e056eb8 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 @@ -24,6 +24,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.relief.ReliefFeature; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -156,6 +157,11 @@ public class ReliefObject extends CityObject { return FeatureType.LAND; } + @Override + public Color getRenderColor() { + return Color.TAN; + } + public void addComponent(TinObject component) { components.add(component); } 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 8d073aa0..1aad832f 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 @@ -21,6 +21,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; 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.relief.TINRelief; @@ -101,4 +102,9 @@ public class TinObject extends CityObject { return FeatureType.LAND; } + @Override + public Color getRenderColor() { + return Color.TAN; + } + } 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 7097ffd6..5897587f 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 @@ -65,10 +65,12 @@ public class TopLevelTransportFeature extends TransportationSpace { public void addSection(TransportSection section) { sections.add(section); + section.setParent(this); } public void addIntersection(TransportSection section) { intersections.add(section); + section.setParent(this); } public List getSections() { diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java index 28341a4c..fda9bb33 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java @@ -11,6 +11,9 @@ import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; public class TrafficAreaObject extends TransportationObject { + private TrafficSpaceObject parent; + + public enum TrafficAreaType { TRAFFIC_AREA, AUXILIARY_TRAFFIC_AREA } @@ -116,7 +119,15 @@ public class TrafficAreaObject extends TransportationObject { @Override public CityObject getTopLevelCityObject() { - return this; + return parent.getTopLevelCityObject(); + } + + public void setParent(TrafficSpaceObject parent) { + this.parent = parent; + } + + public TrafficSpaceObject getParent() { + return parent; } @Override 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 fb078433..1566d926 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 @@ -19,6 +19,8 @@ public class TrafficSpaceObject extends TransportationObject { private final List trafficAreas = new ArrayList<>(); + private TransportationSpace parent; + public enum TrafficSpaceType { TRAFFIC_SPACE, AUXILIARY_TRAFFIC_SPACE } @@ -37,6 +39,7 @@ public class TrafficSpaceObject extends TransportationObject { public void addTrafficArea(TrafficAreaObject trafficAreaObject) { trafficAreas.add(trafficAreaObject); + trafficAreaObject.setParent(this); } @Override @@ -138,10 +141,18 @@ public class TrafficSpaceObject extends TransportationObject { @Override public CityObject getTopLevelCityObject() { - return this; + return parent.getTopLevelCityObject(); } + public void setParent(TransportationSpace parent) { + this.parent = parent; + } + + public TransportationSpace getParent() { + return parent; + } + @Override public String toString() { return "TransportationSpaceObject [id=" + getGmlId() + "]"; diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportSection.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportSection.java index 86631f66..45592014 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportSection.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportSection.java @@ -2,6 +2,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; public class TransportSection extends TransportationSpace { + private TopLevelTransportFeature parent; + public enum SectionType { SECTION, INTERSECTION } @@ -13,5 +15,17 @@ public class TransportSection extends TransportationSpace { } } + public void setParent(TopLevelTransportFeature parent) { + this.parent = parent; + } + + public TopLevelTransportFeature getParent() { + return parent; + } + + @Override + public CityObject getTopLevelCityObject() { + return parent.getTopLevelCityObject(); + } } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObject.java index 9ca662dd..eafdf249 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObject.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObject.java @@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.core.AbstractSpace; import org.citygml4j.core.model.transportation.AbstractTransportationSpace; @@ -77,6 +78,17 @@ public abstract class TransportationObject extends CityObject { return ato; } + @Override + public Color getRenderColor() { + return switch (type) { + case TRACK -> Color.BROWN; + case WATERWAY -> Color.NAVY; + case SQUARE -> Color.DARKSLATEGRAY; + case AUXILLIARY_TRAFFIC_AREA, AUXILLIARY_TRAFFIC_SPACE -> Color.LIGHTSLATEGREY; + default -> Color.DIMGRAY; + }; + } + public void setGmlObject(AbstractCityObject tc) { ato = tc; @@ -92,6 +104,11 @@ public abstract class TransportationObject extends CityObject { return "TransportationObject [id=" + getGmlId() + "]"; } + @Override + public String getDisplayText() { + return String.format("[%s] %s", this.type.name(), this.getGmlId().toString()); + } + @Override public void fillValues(Copyable original, CopyHandler handler) { 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 c2c73715..b8eb89c6 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 @@ -35,10 +35,12 @@ public abstract class TransportationSpace extends TransportationObject { public void addTrafficSpace(TrafficSpaceObject t) { trafficSpaces.add(t); + t.setParent(this); } public void addAuxTrafficSpace(TrafficSpaceObject t) { auxTrafficSpaces.add(t); + t.setParent(this); } @Override 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 92554462..c9b95c3a 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 @@ -7,6 +7,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; @@ -45,6 +46,11 @@ public class TunnelConstructiveElement extends CityObject { return parent; } + @Override + public Color getRenderColor() { + return parent.getRenderColor(); + } + @Override public Copyable createCopyInstance() { return new TunnelConstructiveElement(gmlTunnelElement); diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelHollow.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelHollow.java index 12b12623..414c0703 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelHollow.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelHollow.java @@ -2,6 +2,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.tunnel.TunnelFurnitureProperty; import java.io.Serial; @@ -35,6 +36,11 @@ public class TunnelHollow extends AbstractRoom { return parent; } + @Override + public Color getRenderColor() { + return parent.getRenderColor(); + } + @Override public void fillValues(Copyable original, CopyHandler handler) { super.fillValues(original, handler); @@ -45,7 +51,7 @@ public class TunnelHollow extends AbstractRoom { @Override public CityObject getTopLevelCityObject() { - return getParent().getTopLevelCityObject(); + return parent.getTopLevelCityObject(); } @Override 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 29d38d2e..1eeb4e42 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 @@ -22,6 +22,7 @@ import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.vegetation.AbstractVegetationObject; import org.citygml4j.core.model.vegetation.PlantCover; @@ -181,6 +182,11 @@ public class Vegetation extends CityObject { return citygmlVegetation; } + @Override + public Color getRenderColor() { + return Color.LIGHTGREEN; + } + @Override public void unsetGmlGeometries() { if (type == VegetationType.SOLITARY_VEGETATION_OBJECT) { 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 f4c6af4b..3465d3ac 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 @@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.waterbody.WaterBody; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -100,6 +101,11 @@ public class WaterObject extends CityObject { return gmlWater; } + @Override + public Color getRenderColor() { + return Color.LIGHTSKYBLUE; + } + @Override public void unsetGmlGeometries() { gmlWater.setLod0MultiSurface(null); diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java index 0ec33b0f..c06abf5b 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java @@ -85,14 +85,14 @@ public class TriangulatedGeometry { triGeom.movedBy = triGeom.findCenter(points); addPolygonDataFromCityObjects(model.getBuildings(), triGeom, Color.WHITE, filters); - addPolygonDataFromCityObjects(model.getBridges(), triGeom, Color.CORAL, filters); + addPolygonDataFromCityObjects(model.getBridges(), triGeom, Color.LIGHTSTEELBLUE, filters); addPolygonDataFromCityObjects(model.getTunnels(), triGeom, Color.SLATEGRAY, filters); - addPolygonDataFromCityObjects(model.getLand(), triGeom, Color.BROWN, filters); - addPolygonDataFromCityObjects(model.getTransportation(), triGeom, Color.YELLOW, filters); + addPolygonDataFromCityObjects(model.getLand(), triGeom, Color.TAN, filters); + addPolygonDataFromCityObjects(model.getTransportation(), triGeom, Color.DIMGRAY, filters); addPolygonDataFromCityObjects(model.getVegetation(), triGeom, Color.LIGHTGREEN, filters); addPolygonDataFromCityObjects(model.getWater(), triGeom, Color.LIGHTSKYBLUE, filters); addPolygonDataFromCityObjects(model.getCityFurniture(), triGeom, Color.BLUEVIOLET, filters); - addPolygonDataFromCityObjects(model.getGenericCityObjects(), triGeom, Color.DARKGRAY, filters); + addPolygonDataFromCityObjects(model.getGenericCityObjects(), triGeom, Color.BLACK, filters); return triGeom; } @@ -176,7 +176,7 @@ public class TriangulatedGeometry { baseColor = Color.KHAKI; } } - + baseColor = determineColorDependingOnParentType(p, baseColor); double cos = normal.dot(AXIS); @@ -192,6 +192,15 @@ public class TriangulatedGeometry { private Color determineColorDependingOnParentType(Polygon p, Color baseColor) { p = p.getOriginal(); Polygon p1 = p.getLinkedFromPolygon(); + Color parentColor = null; + if (p1 != null) { + parentColor = p1.getParent().getParent().getRenderColor(); + } else { + parentColor = baseColor = p.getParent().getParent().getRenderColor(); + } + if (parentColor != null && parentColor != Color.WHITE) { + baseColor = parentColor; + } baseColor = changeBaseColorIfPolygonHasOpeningParent(p1, baseColor); baseColor = changeBaseColorIfPolygonHasOpeningParent(p, baseColor); return baseColor; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectNode.java index d15a674a..170891fe 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectNode.java @@ -30,7 +30,7 @@ public class CityObjectNode extends Renderable { @Override public String getText() { - return co.getGmlId().getGmlString(); + return co.getDisplayText(); } @Override -- GitLab From 17cca721bdf6541689b795159b8e52201d715ba7 Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 10 Apr 2025 12:02:49 +0200 Subject: [PATCH 22/51] Fix: Fix assignment of auxTrafficSpaces to node --- .../de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3f5832d1..7c80b871 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 @@ -704,7 +704,7 @@ public class CityDoctorController { } } if (!space.getAuxTrafficSpaces().isEmpty()) { - CityObjectGroupNode auxTrafficSpacesGroupNode = new CityObjectGroupNode(space.getTrafficSpaces(), + CityObjectGroupNode auxTrafficSpacesGroupNode = new CityObjectGroupNode(space.getAuxTrafficSpaces(), "AUXILIARY_TRAFFIC_SPACE", Color.YELLOW); TreeItem auxTrafficSpacesGroupItem = new TreeItem<>(auxTrafficSpacesGroupNode); root.getChildren().add(auxTrafficSpacesGroupItem); -- GitLab From e093a95aeb2d30bede1449fecedf91a8a07f69e9 Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 10 Apr 2025 12:03:10 +0200 Subject: [PATCH 23/51] Style: Add method stubs --- .../mapper/citygml3/Citygml3FeatureMapper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 faf07df1..c0989c72 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 @@ -222,17 +222,17 @@ public class Citygml3FeatureMapper extends ObjectWalker { @Override public void visit(MassPointRelief rel) { - //TODO: Check if implementation is required + //Method stub for implementation if requested } @Override public void visit(BreaklineRelief rel) { - //TODO: Check if implementation is required + //Method stub for implementation if requested } @Override public void visit(RasterRelief rel) { - //TODO: Check if implementation is required + //Method stub for implementation if requested } }; @@ -817,7 +817,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { if (atsp.isSetObject()) { TrafficSpaceObject atso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.AUXILIARY_TRAFFIC_SPACE); mapAuxiliaryTrafficSpace(atsp.getObject(), atso); - trsp.addTrafficSpace(atso); + trsp.addAuxTrafficSpace(atso); } } } -- GitLab From 7a2be924893d8705c26690214954eb1aa15c9848 Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 10 Apr 2025 16:41:12 +0200 Subject: [PATCH 24/51] Refactor: Implement UnsetGeometries with Visitor --- .../datastructure/AbstractBuilding.java | 19 ----------- .../AbstractBuildingSubdivision.java | 13 ------- .../datastructure/AbstractRoom.java | 6 ---- .../datastructure/AbstractTunnel.java | 19 ----------- .../datastructure/BoundarySurface.java | 4 --- .../BridgeConstructiveElement.java | 3 -- .../datastructure/BridgeObject.java | 19 ----------- .../datastructure/GenericCityObject.java | 3 -- .../datastructure/Installation.java | 34 +++++++++++-------- .../citydoctor2/datastructure/Storey.java | 7 ---- .../TopLevelTransportFeature.java | 17 ---------- .../datastructure/TrafficSpaceObject.java | 3 -- .../datastructure/TransportationSpace.java | 6 ---- .../TunnelConstructiveElement.java | 3 -- .../citygml3/Citygml3FeatureMapper.java | 3 +- .../utils}/CityObjectCollector.java | 2 +- .../utils/UnsetGeometriesVisitor.java | 15 ++++++++ .../stuttgart/citydoctor2/gui/Renderer.java | 2 +- .../citydoctor2/gui/TriangulatedGeometry.java | 3 +- 19 files changed, 40 insertions(+), 141 deletions(-) rename CityDoctorParent/{CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util => CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils}/CityObjectCollector.java (91%) create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/UnsetGeometriesVisitor.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 b92ed72b..b0de1941 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 @@ -88,25 +88,6 @@ public abstract class AbstractBuilding extends CityObject { ab.getDeprecatedProperties().setLod1MultiSurface(null); ab.getDeprecatedProperties().setLod4MultiSurface(null); ab.getDeprecatedProperties().setLod4Solid(null); - - for (BoundarySurface bs : boundarySurfaceList) { - bs.unsetGmlGeometries(); - } - for (Installation bi : buildingInstallations) { - bi.unsetGmlGeometries(); - } - for (BuildingRoom br : buildingRooms) { - br.unsetGmlGeometries(); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.unsetGmlGeometries(); - } - for (Storey storey : buildingStoreys) { - storey.unsetGmlGeometries(); - } - for (BuildingUnit bu : buildingUnits) { - bu.unsetGmlGeometries(); - } } @Override 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 95fecf24..c6bee3c7 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 @@ -73,19 +73,6 @@ public abstract class AbstractBuildingSubdivision extends CityObject { abs.setLod3Solid(null); abs.setLod2MultiSurface(null); abs.setLod3MultiSurface(null); - - for (BoundarySurface bs : boundarySurfaceList) { - bs.unsetGmlGeometries(); - } - for (Installation bi : buildingInstallations) { - bi.unsetGmlGeometries(); - } - for (BuildingRoom br : buildingRooms) { - br.unsetGmlGeometries(); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.unsetGmlGeometries(); - } } @Override 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 da4b71fc..69b1f31b 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 @@ -173,12 +173,6 @@ public abstract class AbstractRoom extends CityObject { cgmlRoom.setLod1Solid(null); cgmlRoom.setLod2Solid(null); cgmlRoom.setLod3Solid(null); - for (Installation roomInstallation : roomInstallations) { - roomInstallation.unsetGmlGeometries(); - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.unsetGmlGeometries(); - } } @Override 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 7b32b8e9..2e3862e0 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 @@ -70,25 +70,6 @@ public abstract class AbstractTunnel extends CityObject { at.getDeprecatedProperties().setLod1MultiSurface(null); at.getDeprecatedProperties().setLod4MultiSurface(null); at.getDeprecatedProperties().setLod4Solid(null); - - for (BoundarySurface bs : boundarySurfaceList) { - bs.unsetGmlGeometries(); - } - for (Installation bi : tunnelInstallations) { - bi.unsetGmlGeometries(); - } - for (TunnelHollow th : tunnelHollows) { - th.unsetGmlGeometries(); - } - for (TunnelFurniture tfr : tunnelFurnitureList) { - tfr.unsetGmlGeometries(); - } - for (TunnelConstructiveElement te : tunnelConstructiveElements) { - te.unsetGmlGeometries(); - } - for (TunnelPart tp : tunnelParts) { - tp.unsetGmlGeometries(); - } } @Override 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 b2650b30..967638d7 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 @@ -216,10 +216,6 @@ public class BoundarySurface extends CityObject { gmlObject.setLod2MultiSurface(null); gmlObject.setLod3MultiSurface(null); gmlObject.getDeprecatedProperties().setLod4MultiSurface(null); - - for (Opening o : openings) { - o.unsetGmlGeometries(); - } } @Override 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 0324ed6a..f3edf171 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 @@ -253,9 +253,6 @@ public class BridgeConstructiveElement extends CityObject { gmlBridgeElement.setLod1Solid(null); gmlBridgeElement.setLod2Solid(null); gmlBridgeElement.setLod3Solid(null); - for (BoundarySurface bs : boundarySurfaceList) { - bs.unsetGmlGeometries(); - } } @Override 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 99995ce2..38948696 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 @@ -400,25 +400,6 @@ public class BridgeObject extends CityObject { ab.getDeprecatedProperties().setLod1MultiSurface(null); ab.getDeprecatedProperties().setLod4MultiSurface(null); ab.getDeprecatedProperties().setLod4Solid(null); - for (BoundarySurface bs : boundarySurfaces) { - bs.unsetGmlGeometries(); - } - for (Installation bi : bridgeInstallations) { - bi.unsetGmlGeometries(); - } - for (BridgeObject part : parts) { - part.unsetGmlGeometries(); - } - for (BridgeConstructiveElement ele : elements) { - ele.unsetGmlGeometries(); - } - for (BridgeRoom br : bridgeRooms) { - br.unsetGmlGeometries(); - } - for (BridgeRoomFurniture bri : bridgeFurniture) { - bri.unsetGmlGeometries(); - } - } @Override 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 937502b5..b2d7e25f 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 @@ -223,9 +223,6 @@ public class GenericCityObject extends CityObject { cgmlGos.setLod3Solid(null); cgmlGos.setLod2MultiSurface(null); cgmlGos.setLod3MultiSurface(null); - for (BoundarySurface bs : boundarySurfaceList) { - bs.unsetGmlGeometries(); - } } @Override 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 916093df..de15c05f 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 @@ -29,6 +29,7 @@ import javafx.scene.paint.Color; import org.citygml4j.core.model.bridge.BridgeInstallation; import org.citygml4j.core.model.construction.AbstractInstallation; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; +import org.citygml4j.core.model.tunnel.TunnelInstallation; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.GeometryProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -188,16 +189,26 @@ public class Installation extends CityObject { bs.setParent(this); } + @Override public void unsetGmlGeometries() { - if (gmlBi instanceof org.citygml4j.core.model.building.BuildingInstallation localBi) { - localBi.getDeprecatedProperties().setLod2Geometry(null); - localBi.getDeprecatedProperties().setLod3Geometry(null); - localBi.getDeprecatedProperties().setLod4Geometry(null); - } else if (gmlBi instanceof BridgeInstallation localBi) { - removeGeometriesFromBridgeInstallation(localBi); - } - for (BoundarySurface bs : boundarySurfaces) { - bs.unsetGmlGeometries(); + gmlBi.setLod0MultiSurface(null); + gmlBi.setLod2MultiSurface(null); + gmlBi.setLod3MultiSurface(null); + gmlBi.setLod1Solid(null); + gmlBi.setLod2Solid(null); + gmlBi.setLod3Solid(null); + if (gmlBi instanceof org.citygml4j.core.model.building.BuildingInstallation buildingInstallation) { + buildingInstallation.getDeprecatedProperties().setLod2Geometry(null); + buildingInstallation.getDeprecatedProperties().setLod3Geometry(null); + buildingInstallation.getDeprecatedProperties().setLod4Geometry(null); + } else if (gmlBi instanceof BridgeInstallation bridgeInstallation) { + bridgeInstallation.getDeprecatedProperties().setLod2Geometry(null); + bridgeInstallation.getDeprecatedProperties().setLod3Geometry(null); + bridgeInstallation.getDeprecatedProperties().setLod4Geometry(null); + } else if (gmlBi instanceof TunnelInstallation tunnelInstallation) { + tunnelInstallation.getDeprecatedProperties().setLod2Geometry(null); + tunnelInstallation.getDeprecatedProperties().setLod3Geometry(null); + tunnelInstallation.getDeprecatedProperties().setLod4Geometry(null); } } @@ -206,11 +217,6 @@ public class Installation extends CityObject { return getParent().getTopLevelCityObject(); } - private void removeGeometriesFromBridgeInstallation(BridgeInstallation localBi) { - localBi.getDeprecatedProperties().setLod2Geometry(null); - localBi.getDeprecatedProperties().setLod3Geometry(null); - localBi.getDeprecatedProperties().setLod4Geometry(null); - } public void setGmlObject(AbstractInstallation gmlBi) { this.gmlBi = gmlBi; 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 55daa576..38d44b68 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 @@ -24,13 +24,6 @@ public class Storey extends AbstractBuildingSubdivision { return new Storey(); } - @Override - public void unsetGmlGeometries() { - super.unsetGmlGeometries(); - for (BuildingUnit buildingUnit : buildingUnits) { - buildingUnit.unsetGmlGeometries(); - } - } @Override public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { 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 5897587f..52c34b0e 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 @@ -168,23 +168,6 @@ public class TopLevelTransportFeature extends TransportationSpace { } - @Override - public void unsetGmlGeometries() { - super.unsetGmlGeometries(); - for (TransportSection section : sections) { - section.unsetGmlGeometries(); - } - for (TransportSection section : intersections) { - section.unsetGmlGeometries(); - } - } - - @Override - public CityObject getTopLevelCityObject() { - return this; - } - - @Override public String toString() { return "TopLevelTransportFeature [id=" + getGmlId() + "]"; 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 1566d926..dd0fc1db 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 @@ -134,9 +134,6 @@ public class TrafficSpaceObject extends TransportationObject { ats.setLod0MultiSurface(null); ats.setLod2MultiSurface(null); ats.setLod3MultiSurface(null); - for (TrafficAreaObject tao : trafficAreas) { - tao.unsetGmlGeometries(); - } } @Override 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 b8eb89c6..75256e3a 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 @@ -180,12 +180,6 @@ public abstract class TransportationSpace extends TransportationObject { ats.setLod0MultiSurface(null); ats.setLod2MultiSurface(null); ats.setLod3MultiSurface(null); - for (TrafficSpaceObject to : trafficSpaces) { - to.unsetGmlGeometries(); - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - to.unsetGmlGeometries(); - } } @Override 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 c9b95c3a..23db78d4 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 @@ -197,9 +197,6 @@ public class TunnelConstructiveElement extends CityObject { gmlTunnelElement.setLod1Solid(null); gmlTunnelElement.setLod2Solid(null); gmlTunnelElement.setLod3Solid(null); - for (BoundarySurface bs : boundarySurfaceList) { - bs.unsetGmlGeometries(); - } } @Override 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 c0989c72..ccbd39a3 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 @@ -34,6 +34,7 @@ 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.utils.UnsetGeometriesVisitor; import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -799,7 +800,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { private void finishCityObjectConstruction(CityObject co) { parseId(co.getGmlObject(), co); - co.unsetGmlGeometries(); + co.accept(new UnsetGeometriesVisitor()); resolveAndClearReferences(); updateEdgesAndVertices(co); } diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CityObjectCollector.java similarity index 91% rename from CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CityObjectCollector.java index 0ff1e832..ad568b2f 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CityObjectCollector.java @@ -1,4 +1,4 @@ -package de.hft.stuttgart.citydoctor2.checks.util; +package de.hft.stuttgart.citydoctor2.utils; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/UnsetGeometriesVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/UnsetGeometriesVisitor.java new file mode 100644 index 00000000..a41ed31d --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/UnsetGeometriesVisitor.java @@ -0,0 +1,15 @@ +package de.hft.stuttgart.citydoctor2.utils; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.datastructure.CityObject; + +public class UnsetGeometriesVisitor extends AbstractCheck { + + + @Override + public void check(CityObject cityObject) { + cityObject.unsetGmlGeometries(); + } + + +} diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java index 94e35e3a..a00c8c15 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java @@ -2,7 +2,7 @@ package de.hft.stuttgart.citydoctor2.gui; import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.Checkable; -import de.hft.stuttgart.citydoctor2.checks.util.CityObjectCollector; +import de.hft.stuttgart.citydoctor2.utils.CityObjectCollector; import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter; import de.hft.stuttgart.citydoctor2.gui.tree.*; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java index c06abf5b..bc5b0b82 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java @@ -1,6 +1,6 @@ package de.hft.stuttgart.citydoctor2.gui; -import de.hft.stuttgart.citydoctor2.checks.util.CityObjectCollector; +import de.hft.stuttgart.citydoctor2.utils.CityObjectCollector; import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter; @@ -13,7 +13,6 @@ import javafx.scene.paint.PhongMaterial; import javafx.scene.shape.*; import java.util.*; -import java.util.stream.Collectors; public class TriangulatedGeometry { -- GitLab From eebe787bc3c9ba39a1b4e7cf9d8a952882c52f1b Mon Sep 17 00:00:00 2001 From: Riegel Date: Fri, 11 Apr 2025 10:09:24 +0200 Subject: [PATCH 25/51] Test: Fix Testcase --- .../datastructure/AbstractBuildingTest.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) 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 7fac9afc..4ba0d8d3 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 @@ -23,12 +23,16 @@ import static org.junit.Assert.assertFalse; 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; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import de.hft.stuttgart.citydoctor2.utils.UnsetGeometriesVisitor; import org.citygml4j.core.model.construction.WallSurface; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -305,12 +309,22 @@ public class AbstractBuildingTest { @Test public void testUnsetGmlGeometries() { Installation biMock = mock(Installation.class); + doAnswer(invocation -> { + biMock.unsetGmlGeometries(); + return null; + }).when(biMock).accept(any(UnsetGeometriesVisitor.class)); + BoundarySurface bsMock = mock(BoundarySurface.class); + doAnswer(invocation -> { + bsMock.unsetGmlGeometries(); + return null; + }).when(bsMock).accept(any(UnsetGeometriesVisitor.class)); AbstractBuilding ab = createAbstractBuilding(); ab.addBoundarySurface(bsMock); ab.addBuildingInstallation(biMock); org.citygml4j.core.model.building.AbstractBuilding gmlAb = new org.citygml4j.core.model.building.Building(); + gmlAb.setLod1Solid(new SolidProperty()); gmlAb.setLod2Solid(new SolidProperty()); gmlAb.setLod3Solid(new SolidProperty()); @@ -320,9 +334,14 @@ public class AbstractBuildingTest { gmlAb.setLod3MultiSurface(new MultiSurfaceProperty()); gmlAb.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty()); ab.setCityGmlBuilding(gmlAb); - ab.unsetGmlGeometries(); - Mockito.verify(biMock).unsetGmlGeometries(); - Mockito.verify(bsMock).unsetGmlGeometries(); + + ab.accept(new UnsetGeometriesVisitor()); + + verify(biMock).accept(any(UnsetGeometriesVisitor.class)); + verify(bsMock).accept(any(UnsetGeometriesVisitor.class)); + verify(biMock).unsetGmlGeometries(); + verify(bsMock).unsetGmlGeometries(); + assertNull(gmlAb.getLod1Solid()); assertNull(gmlAb.getLod2Solid()); assertNull(gmlAb.getLod3Solid()); -- GitLab From ae344b1a1df433bf364f0bb56a9c2ed6abd3b2c1 Mon Sep 17 00:00:00 2001 From: Riegel Date: Fri, 11 Apr 2025 13:29:41 +0200 Subject: [PATCH 26/51] Test: adjust testcases --- .../datastructure/AbstractBuildingTest.java | 31 ++++++- .../datastructure/AbstractRoomTest.java | 84 +++++++++++++++++++ .../datastructure/BoundarySurfaceTest.java | 6 +- .../datastructure/BridgeObjectTest.java | 12 ++- .../datastructure/BuildingTest.java | 45 ++++++++++ 5 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java 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 4ba0d8d3..eb8bd38c 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 @@ -94,6 +94,35 @@ public class AbstractBuildingTest { assertEquals(2, biCounter.intValue()); } + @Test + public void testVisitorPropagation() { + AbstractBuilding ab = createAbstractBuilding(); + BuildingRoom mockRoom = mock(BuildingRoom.class); + Installation mockInstallation = mock(Installation.class); + BuildingRoomFurniture mockBuildingRoomFurniture = mock(BuildingRoomFurniture.class); + BuildingUnit mockBuildingUnit = mock(BuildingUnit.class); + Storey mockStorey = mock(Storey.class); + BoundarySurface mockBSurface = mock(BoundarySurface.class); + + ab.addBuildingRoom(mockRoom); + ab.addBuildingInstallation(mockInstallation); + ab.addBuildingRoomFurniture(mockBuildingRoomFurniture); + ab.addBuildingUnit(mockBuildingUnit); + ab.addStorey(mockStorey); + ab.addBoundarySurface(mockBSurface); + + AbstractCheck c = new AbstractCheck() { + }; + ab.accept(c); + + verify(mockRoom).accept(c); + verify(mockInstallation).accept(c); + verify(mockBuildingRoomFurniture).accept(c); + verify(mockBuildingUnit).accept(c); + verify(mockStorey).accept(c); + verify(mockBSurface).accept(c); + } + @Test public void testPrepareForChecking() { Installation biMock = mock(Installation.class); @@ -335,7 +364,7 @@ public class AbstractBuildingTest { gmlAb.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty()); ab.setCityGmlBuilding(gmlAb); - ab.accept(new UnsetGeometriesVisitor()); + ab.clearGmlGeometries(); verify(biMock).accept(any(UnsetGeometriesVisitor.class)); verify(bsMock).accept(any(UnsetGeometriesVisitor.class)); 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 new file mode 100644 index 00000000..842fce7f --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractRoomTest.java @@ -0,0 +1,84 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.utils.Copyable; +import org.citygml4j.core.model.core.AbstractSpaceBoundary; +import org.citygml4j.core.visitor.ObjectVisitor; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; +import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; + +import static org.junit.Assert.assertNull; + +public class AbstractRoomTest { + + AbstractRoom ab; + + @Before + public void setUp() { + ab = new AbstractRoom() { + @Override + public CityObject getTopLevelCityObject() { + return null; + } + + @Override + public Copyable createCopyInstance() { + return null; + } + }; + } + + @Test + public void testAbstractRoomVisitorPropagation() { + + Installation mockInstallation = Mockito.mock(Installation.class); + BoundarySurface mockBoundarySurface = Mockito.mock(BoundarySurface.class); + + ab.addRoomInstallation(mockInstallation); + ab.addBoundarySurface(mockBoundarySurface); + + AbstractCheck c = new AbstractCheck() { + }; + ab.accept(c); + + Mockito.verify(mockInstallation).accept(c); + Mockito.verify(mockBoundarySurface).accept(c); + } + + @Test + public void testUnsetGmlGeometries() { + org.citygml4j.core.model.core.AbstractUnoccupiedSpace gmlAUS = new org.citygml4j.core.model.core.AbstractUnoccupiedSpace() { + @Override + public void accept(ObjectVisitor visitor) { + return; + } + + @Override + public boolean isValidBoundary(Class type) { + return false; + } + }; + + gmlAUS.setLod1Solid(new SolidProperty()); + gmlAUS.setLod2Solid(new SolidProperty()); + gmlAUS.setLod3Solid(new SolidProperty()); + gmlAUS.setLod0MultiSurface(new MultiSurfaceProperty()); + gmlAUS.setLod2MultiSurface(new MultiSurfaceProperty()); + gmlAUS.setLod3MultiSurface(new MultiSurfaceProperty()); + ab.cgmlRoom = gmlAUS; + + ab.clearGmlGeometries(); + + assertNull(gmlAUS.getLod1Solid()); + assertNull(gmlAUS.getLod2Solid()); + assertNull(gmlAUS.getLod3Solid()); + assertNull(gmlAUS.getLod0MultiSurface()); + assertNull(gmlAUS.getLod2MultiSurface()); + assertNull(gmlAUS.getLod3MultiSurface()); + + } + +} 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 9ea3e42a..7adf9631 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 @@ -23,11 +23,13 @@ import static org.junit.Assert.assertFalse; 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 java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import de.hft.stuttgart.citydoctor2.utils.UnsetGeometriesVisitor; import org.citygml4j.core.model.construction.AbstractConstructionSurface; import org.citygml4j.core.model.construction.WallSurface; import org.citygml4j.core.model.core.AbstractThematicSurface; @@ -342,8 +344,8 @@ public class BoundarySurfaceTest { BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, ws); Opening oMock = Mockito.mock(Opening.class); bs.addOpening(oMock); - bs.unsetGmlGeometries(); - Mockito.verify(oMock).unsetGmlGeometries(); + bs.accept(new UnsetGeometriesVisitor()); + Mockito.verify(oMock).accept(any(UnsetGeometriesVisitor.class)); assertNull(ws.getLod2MultiSurface()); assertNull(ws.getLod3MultiSurface()); assertNull(ws.getDeprecatedProperties().getLod4MultiSurface()); 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 7c16663f..8b75c8ff 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 @@ -22,6 +22,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; 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; import static org.mockito.Mockito.when; @@ -29,6 +31,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.concurrent.atomic.AtomicInteger; +import de.hft.stuttgart.citydoctor2.utils.UnsetGeometriesVisitor; import org.citygml4j.core.model.bridge.AbstractBridge; import org.citygml4j.core.model.bridge.Bridge; import org.citygml4j.core.model.deprecated.bridge.DeprecatedPropertiesOfAbstractBridge; @@ -277,8 +280,13 @@ public class BridgeObjectTest { BridgeObject bo = new BridgeObject(abMock); BoundarySurface bsMock = mock(BoundarySurface.class); bo.addBoundarySurface(bsMock); - - bo.unsetGmlGeometries(); + doAnswer(invocation -> { + bsMock.unsetGmlGeometries(); + return null; + }).when(bsMock).accept(any(UnsetGeometriesVisitor.class)); + + bo.accept(new UnsetGeometriesVisitor()); + verify(bsMock).accept(any(UnsetGeometriesVisitor.class)); verify(bsMock).unsetGmlGeometries(); verify(propsMock).setLod1MultiSurface(null); verify(abMock).setLod2MultiSurface(null); 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 df1c0a73..bee20b00 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 @@ -22,9 +22,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; +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 org.citygml4j.core.model.construction.RoofSurface; import org.junit.Test; +import org.mockito.Mockito; import org.xmlobjects.gml.model.basictypes.Code; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; @@ -120,4 +125,44 @@ public class BuildingTest { return b; } + @Test + public void testVisitorPropagation() { + Building b = new Building(); + BuildingPart bp = new BuildingPart(b); + BuildingPart spyBp = Mockito.spy(bp); + b.getBuildingParts().remove(bp); + b.addBuildingPart(spyBp); + + BuildingRoom mockRoom = mock(BuildingRoom.class); + Installation mockInstallation = mock(Installation.class); + BuildingRoomFurniture mockBuildingRoomFurniture = mock(BuildingRoomFurniture.class); + BuildingUnit mockBuildingUnit = mock(BuildingUnit.class); + Storey mockStorey = mock(Storey.class); + + b.addBuildingRoom(mockRoom); + b.addBuildingInstallation(mockInstallation); + b.addBuildingRoomFurniture(mockBuildingRoomFurniture); + b.addBuildingUnit(mockBuildingUnit); + b.addStorey(mockStorey); + bp.addBuildingRoom(mockRoom); + bp.addBuildingInstallation(mockInstallation); + bp.addBuildingRoomFurniture(mockBuildingRoomFurniture); + bp.addBuildingUnit(mockBuildingUnit); + bp.addStorey(mockStorey); + + + AbstractCheck c = new AbstractCheck() { + }; + b.accept(c); + + verify(spyBp).accept(c); + verify(mockRoom, times(2)).accept(c); + verify(mockInstallation, times(2)).accept(c); + verify(mockBuildingRoomFurniture, times(2)).accept(c); + verify(mockBuildingUnit, times(2)).accept(c); + verify(mockStorey, times(2)).accept(c); + + + } + } -- GitLab From ca7193166dc04e1a7be462c7f65bf4f6eddbd9bc Mon Sep 17 00:00:00 2001 From: Riegel Date: Fri, 11 Apr 2025 13:30:25 +0200 Subject: [PATCH 27/51] Refactor: Use new method for clearing of GML-geometry --- .../datastructure/BuildingUnit.java | 7 ------- .../citydoctor2/datastructure/CityObject.java | 5 +++++ .../citygml3/Citygml3FeatureMapper.java | 20 +++---------------- .../citydoctor2/CityDoctorValidation.java | 3 +++ .../stuttgart/citydoctor2/healer/Healer.java | 2 +- 5 files changed, 12 insertions(+), 25 deletions(-) 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 c7bfb53c..a2d44d4f 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 @@ -25,13 +25,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { } - @Override - public void unsetGmlGeometries() { - super.unsetGmlGeometries(); - for (Storey storey : storeys) { - storey.unsetGmlGeometries(); - } - } @Override public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { 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 e9a08596..e6997e31 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 @@ -24,6 +24,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import de.hft.stuttgart.citydoctor2.utils.UnsetGeometriesVisitor; import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -73,6 +74,10 @@ public abstract class CityObject extends GmlElement { */ public abstract void unsetGmlGeometries(); + public final void clearGmlGeometries() { + this.accept(new UnsetGeometriesVisitor()); + } + public void addGeometry(Geometry geom) { Objects.requireNonNull(geom); geometryList.add(geom); 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 ccbd39a3..c0217c55 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 @@ -412,7 +412,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, bi); GeometryProperty lod4Prop = gmlBi.getDeprecatedProperties().getLod4Geometry(); parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, bi); - bi.unsetGmlGeometries(); SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config); for (AbstractSpaceBoundaryProperty surfaceProp : gmlBi.getBoundaries()) { @@ -484,11 +483,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { } } } - - - cdTunnel.unsetGmlGeometries(); - resolveAndClearReferences(); - updateEdgesAndVertices(cdTunnel); } private void parseTunnelBoundarySurfaces(org.citygml4j.core.model.tunnel.AbstractTunnel gmlTunnel) { @@ -563,7 +557,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, ti); GeometryProperty lod4Prop = gmlTi.getDeprecatedProperties().getLod4Geometry(); parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, ti); - ti.unsetGmlGeometries(); + SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config); for (AbstractSpaceBoundaryProperty surfaceProp : gmlTi.getBoundaries()) { @@ -635,7 +629,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { TunnelFurniture tf = new TunnelFurniture(); tf.setGmlObject(gmlTf); mapAbstractOccupiedSpace(gmlTf, tf); - tf.unsetGmlGeometries(); + SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config); for (AbstractSpaceBoundaryProperty surfaceProp : gmlTf.getBoundaries()) { if (!surfaceProp.isSetObject()) { @@ -659,7 +653,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { org.citygml4j.core.model.tunnel.TunnelConstructiveElement gmlTe) { TunnelConstructiveElement te = new TunnelConstructiveElement(gmlTe); mapAbstractOccupiedSpace(gmlTe, te); - te.unsetGmlGeometries(); SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config); for (AbstractSpaceBoundaryProperty surfaceProp : gmlTe.getBoundaries()) { if (!surfaceProp.isSetObject()) { @@ -800,7 +793,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { private void finishCityObjectConstruction(CityObject co) { parseId(co.getGmlObject(), co); - co.accept(new UnsetGeometriesVisitor()); + co.clearGmlGeometries(); resolveAndClearReferences(); updateEdgesAndVertices(co); } @@ -1069,9 +1062,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { } updatePartOfSurface(cdBuilding, surfaceMapper); - cdBuilding.unsetGmlGeometries(); - resolveAndClearReferences(); - updateEdgesAndVertices(cdBuilding); for (BoundarySurface bs : surfaceMapper.getSurfaces()) { updateEdgesAndVertices(bs); for (Opening o : bs.getOpenings()) { @@ -1174,7 +1164,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { BuildingRoomFurniture bf = new BuildingRoomFurniture(); bf.setGmlObject(gmlAF); mapAbstractOccupiedSpace(gmlAF, bf); - bf.unsetGmlGeometries(); SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config); for (AbstractSpaceBoundaryProperty surfaceProp : gmlAF.getBoundaries()) { if (!surfaceProp.isSetObject()) { @@ -1199,7 +1188,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { de.hft.stuttgart.citydoctor2.datastructure.Storey storey = new de.hft.stuttgart.citydoctor2.datastructure.Storey(); storey.setGmlObject(gmlStorey); mapAbstractSpace(gmlStorey, storey); - storey.unsetGmlGeometries(); SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config); for (AbstractSpaceBoundaryProperty surfaceProp : gmlStorey.getBoundaries()) { if (!surfaceProp.isSetObject()) { @@ -1223,7 +1211,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit bu = new de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit(); bu.setGmlObject(gmlBU); mapAbstractSpace(gmlBU, bu); - bu.unsetGmlGeometries(); SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config); for (AbstractSpaceBoundaryProperty surfaceProp : gmlBU.getBoundaries()) { if (!surfaceProp.isSetObject()) { @@ -1264,7 +1251,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { parseAndAddAbstractGeometry(lod3Prop, Lod.LOD3, bi); GeometryProperty lod4Prop = gmlBi.getDeprecatedProperties().getLod4Geometry(); parseAndAddAbstractGeometry(lod4Prop, Lod.LOD4, bi); - bi.unsetGmlGeometries(); SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, compositeMap, vertexMap, config); for (AbstractSpaceBoundaryProperty surfaceProp : gmlBi.getBoundaries()) { diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java index a85e8691..299a9aba 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java @@ -25,6 +25,8 @@ import java.nio.file.Path; import java.util.List; import de.hft.stuttgart.citydoctor2.zip.CityGmlZipArchive; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.citygml4j.core.ade.ADEException; @@ -160,6 +162,7 @@ public class CityDoctorValidation { logger.error("Input file '{}' does not exist.", input); System.exit(1); } + if (inputFile.getName().endsWith(".gml")) { startFileValidation(inputFile, xmlOutput, pdfOutput, config, outputFile); } else if (inputFile.getName().endsWith(".zip")) { 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 e068492b..544a6856 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 @@ -263,7 +263,7 @@ public class Healer { co.reCreateGeometries(factory, checker.getConfig().getParserConfiguration()); byte[] gml = writeCityGml(co.getGmlObject()); // remove them again to save memory - co.unsetGmlGeometries(); + co.clearGmlGeometries(); SvrlContentHandler handler = Checker.executeSchematronValidationIfAvailable(config, new ByteArrayInputStream(gml)); if (handler != null) { -- GitLab From e015765c444edc8e52caabaa1369e78a152c6fc9 Mon Sep 17 00:00:00 2001 From: Riegel Date: Mon, 14 Apr 2025 15:09:34 +0200 Subject: [PATCH 28/51] Docs: Update JavaDoc --- .../hft/stuttgart/citydoctor2/datastructure/CityObject.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 e6997e31..7c7b8d2f 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 @@ -70,10 +70,13 @@ public abstract class CityObject extends GmlElement { public abstract AbstractCityObject getGmlObject(); /** - * Remove the CityGML4j geometries from the data structure to save memory. + * Remove the CityGML4j geometries from this CityObject to save memory. */ public abstract void unsetGmlGeometries(); + /** + * Removes all CityGML4J geometries from this CityObject and all children in its datastructure. + */ public final void clearGmlGeometries() { this.accept(new UnsetGeometriesVisitor()); } -- GitLab From 67214f92074bdd3ed3ef2e2a217953aac79a54a4 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 11:59:12 +0200 Subject: [PATCH 29/51] Refactor: Add Visitors for ValidationError checking --- .../citydoctor2/check/Checkable.java | 23 +++++++++++++++- .../datastructure/LinkedPolygon.java | 4 +-- .../citydoctor2/utils/CheckErrorFound.java | 9 +++++++ .../utils/ContainsAnyErrorVisitor.java | 21 +++++++++++++++ .../utils/ContainsErrorVisitor.java | 27 +++++++++++++++++++ .../citydoctor2/utils/ThrowUtils.java | 21 +++++++++++++++ .../checks/geometry/NullAreaCheckTest.java | 4 +-- 7 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CheckErrorFound.java create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsAnyErrorVisitor.java create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsErrorVisitor.java create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ThrowUtils.java 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 26c7b53e..3695396e 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 @@ -24,6 +24,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound; +import de.hft.stuttgart.citydoctor2.utils.ContainsAnyErrorVisitor; +import de.hft.stuttgart.citydoctor2.utils.ContainsErrorVisitor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -106,6 +109,15 @@ public abstract class Checkable implements Serializable { * @return true if an error has been found with the given check */ public boolean containsError(CheckId checkIdentifier) { + try { + ContainsErrorVisitor.checkCityObject(this, checkIdentifier); + } catch (CheckErrorFound c) { + return true; + } + return false; + } + + public boolean hasError(CheckId checkIdentifier) { CheckResult cs = getCheckResult(checkIdentifier); if (cs == null) { return false; @@ -165,7 +177,7 @@ public abstract class Checkable implements Serializable { * * @return true if it has an error, otherwise false */ - public boolean hasAnyError() { + public boolean hasAnyErrorWithoutDependencies() { for (CheckResult cr : checkResults.values()) { if (cr.getResultStatus() == ResultStatus.ERROR) { return true; @@ -216,6 +228,15 @@ public abstract class Checkable implements Serializable { * have any error. */ public boolean containsAnyError() { + try { + ContainsAnyErrorVisitor.checkObject(this); + } catch (CheckErrorFound c) { + return true; + } + return false; + } + + public boolean hasAnyError() { for (CheckResult cr : checkResults.values()) { if (cr.getResultStatus() == ResultStatus.ERROR || cr.getResultStatus() == ResultStatus.DEPENDENCIES_NOT_MET) { 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 5f6a1675..a86002b6 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 @@ -77,8 +77,8 @@ public class LinkedPolygon extends Polygon { } @Override - public boolean hasAnyError() { - return poly.hasAnyError(); + public boolean hasAnyErrorWithoutDependencies() { + return poly.hasAnyErrorWithoutDependencies(); } @Override 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 new file mode 100644 index 00000000..82f0740e --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CheckErrorFound.java @@ -0,0 +1,9 @@ +package de.hft.stuttgart.citydoctor2.utils; + +public class CheckErrorFound extends Throwable { + + + public CheckErrorFound() { + super("CheckError was found", null, true, false); + } +} diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsAnyErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsAnyErrorVisitor.java new file mode 100644 index 00000000..15b2e8b0 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsAnyErrorVisitor.java @@ -0,0 +1,21 @@ +package de.hft.stuttgart.citydoctor2.utils; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.check.Checkable; + +public class ContainsAnyErrorVisitor extends AbstractCheck { + + + public static void checkObject(Checkable checkable) throws CheckErrorFound { + checkable.accept(new ContainsAnyErrorVisitor()); + } + + @Override + public void check(Checkable checkable) { + if (checkable.hasAnyErrorWithoutDependencies()) { + ThrowUtils.sneakyThrow(new CheckErrorFound()); + } + } + + +} diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsErrorVisitor.java new file mode 100644 index 00000000..b98e9b70 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsErrorVisitor.java @@ -0,0 +1,27 @@ +package de.hft.stuttgart.citydoctor2.utils; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.check.CheckId; +import de.hft.stuttgart.citydoctor2.check.Checkable; +import de.hft.stuttgart.citydoctor2.datastructure.CityObject; + +public class ContainsErrorVisitor extends AbstractCheck { + + private CheckId checkId; + + public static void checkCityObject(Checkable checkable, CheckId checkIdentifier) throws CheckErrorFound { + checkable.accept(new ContainsErrorVisitor(checkIdentifier)); + } + + @Override + public void check(Checkable checkable) { + if (checkable.hasError(checkId)) { + ThrowUtils.sneakyThrow(new CheckErrorFound()); + } + } + + public ContainsErrorVisitor(CheckId checkIdentifier) { + super(); + checkId = checkIdentifier; + } +} diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ThrowUtils.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ThrowUtils.java new file mode 100644 index 00000000..b4e6c54c --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ThrowUtils.java @@ -0,0 +1,21 @@ +package de.hft.stuttgart.citydoctor2.utils; + +public class ThrowUtils { + + private ThrowUtils() { + } + + @SuppressWarnings("unchecked") + private static void uncheckThrowable(Throwable t) throws T { + throw (T) t; + } + + /** + * Throws a Throwable as an unchecked generic Throwable + */ + public static void sneakyThrow(Throwable t) { + uncheckThrowable(t); + } + + +} 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 2cc05198..ea5d367a 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 @@ -90,7 +90,7 @@ public class NullAreaCheckTest { LinearRing r = setupErrorGeometry(); NullAreaCheck nac = new NullAreaCheck(); nac.check(r); - Assert.assertTrue(r.hasAnyError()); + Assert.assertTrue(r.hasAnyErrorWithoutDependencies()); } @@ -100,7 +100,7 @@ public class NullAreaCheckTest { LinearRing r = setupValidGeometry(); NullAreaCheck nac = new NullAreaCheck(); nac.check(r); - Assert.assertFalse(r.hasAnyError()); + Assert.assertFalse(r.hasAnyErrorWithoutDependencies()); } } -- GitLab From 3f3f5672cbdef85bc67a93a8335de18127d50f81 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 14:24:52 +0200 Subject: [PATCH 30/51] Refactor: Implement prepareForChecking with Visitor --- .../citydoctor2/check/Checkable.java | 4 ++- .../datastructure/AbstractBuilding.java | 23 ---------------- .../AbstractBuildingSubdivision.java | 16 ------------ .../datastructure/AbstractFurniture.java | 8 ------ .../datastructure/AbstractRoom.java | 11 -------- .../datastructure/AbstractTunnel.java | 22 ---------------- .../datastructure/BoundarySurface.java | 7 ----- .../BridgeConstructiveElement.java | 7 ----- .../datastructure/BridgeObject.java | 26 ------------------- .../citydoctor2/datastructure/Building.java | 8 ------ .../datastructure/BuildingUnit.java | 8 ------ .../citydoctor2/datastructure/CityObject.java | 7 ----- .../datastructure/ConcretePolygon.java | 5 ++-- .../datastructure/GenericCityObject.java | 8 ------ .../citydoctor2/datastructure/Geometry.java | 4 --- .../datastructure/ImplicitGeometryHolder.java | 5 ---- .../datastructure/Installation.java | 7 ----- .../citydoctor2/datastructure/LinearRing.java | 5 ++-- .../datastructure/LinkedPolygon.java | 4 +-- .../citydoctor2/datastructure/Polygon.java | 2 ++ .../datastructure/ReliefObject.java | 7 ----- .../citydoctor2/datastructure/Storey.java | 8 ------ .../TopLevelTransportFeature.java | 10 ------- .../datastructure/TrafficSpaceObject.java | 7 ----- .../datastructure/TransportationSpace.java | 10 ------- .../citydoctor2/datastructure/Tunnel.java | 8 ------ .../TunnelConstructiveElement.java | 7 ----- .../datastructure/WaterObject.java | 7 ----- .../visitors/PrepareForCheckingVisitor.java | 24 +++++++++++++++++ 29 files changed, 35 insertions(+), 240 deletions(-) create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java 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 3695396e..2c71ac32 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 @@ -92,7 +92,9 @@ public abstract class Checkable implements Serializable { * method has been enabled. This should create edges and additional meta * information necessary to perform checks. */ - public abstract void prepareForChecking(); + public void prepareForChecking() { + this.accept(new PrepareForCheckingVisitor()); + } /** * This should be called after checking has been done. This should remove any 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 b0de1941..e1955543 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 @@ -387,29 +387,6 @@ public abstract class AbstractBuilding extends CityObject { return buildingUnits; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (Installation bi : buildingInstallations) { - bi.prepareForChecking(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.prepareForChecking(); - } - for (BuildingRoom br : buildingRooms) { - br.prepareForChecking(); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.prepareForChecking(); - } - for (Storey storey : buildingStoreys) { - storey.prepareForChecking(); - } - for (BuildingUnit bu : buildingUnits) { - bu.prepareForChecking(); - } - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 c6bee3c7..8ab97b4d 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 @@ -302,22 +302,6 @@ public abstract class AbstractBuildingSubdivision extends CityObject { return buildingRoomFurnitureList; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (Installation bi : buildingInstallations) { - bi.prepareForChecking(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.prepareForChecking(); - } - for (BuildingRoom br : buildingRooms) { - br.prepareForChecking(); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 c52765b8..364798c3 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 @@ -183,14 +183,6 @@ public abstract class AbstractFurniture extends CityObject { } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.prepareForChecking(); - } - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 69b1f31b..8efaf51e 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 @@ -175,17 +175,6 @@ public abstract class AbstractRoom extends CityObject { cgmlRoom.setLod3Solid(null); } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (Installation roomInstallation : roomInstallations) { - roomInstallation.prepareForChecking(); - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.prepareForChecking(); - } - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 2e3862e0..1125f65c 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 @@ -368,28 +368,6 @@ public abstract class AbstractTunnel extends CityObject { return tunnelConstructiveElements; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (Installation bi : tunnelInstallations) { - bi.prepareForChecking(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.prepareForChecking(); - } - for (TunnelHollow th : tunnelHollows) { - th.prepareForChecking(); - } - for (TunnelFurniture tfr : tunnelFurnitureList) { - tfr.prepareForChecking(); - } - for (TunnelConstructiveElement te : tunnelConstructiveElements) { - te.prepareForChecking(); - } - for (TunnelPart tp : tunnelParts) { - tp.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 967638d7..c2d9be19 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 @@ -256,13 +256,6 @@ public class BoundarySurface extends CityObject { opening.setPartOfSurface(this); } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (Opening o : openings) { - o.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 f3edf171..32f9f5e3 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 @@ -274,13 +274,6 @@ public class BridgeConstructiveElement extends CityObject { return boundarySurfaceList; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 38948696..5b989db1 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 @@ -415,32 +415,6 @@ public class BridgeObject extends CityObject { return "BridgeObject [type=" + type + ", id=" + getGmlId() + "]"; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - - for (BridgeConstructiveElement e : elements) { - e.prepareForChecking(); - } - for (BridgeObject part : parts) { - part.prepareForChecking(); - } - for (BoundarySurface bs : boundarySurfaces) { - bs.prepareForChecking(); - } - for (Installation bi : bridgeInstallations) { - bi.prepareForChecking(); - } - for (BridgeObject part : parts) { - part.prepareForChecking(); - } - for (BridgeRoom br : bridgeRooms) { - br.prepareForChecking(); - } - for (BridgeRoomFurniture bri : bridgeFurniture) { - bri.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 0834f8f4..6b4f3f10 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 @@ -146,14 +146,6 @@ public class Building extends AbstractBuilding { } } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (BuildingPart part : buildingParts) { - part.prepareForChecking(); - } - } - @Override public void fillValues(Copyable original, CopyHandler handler) { super.fillValues(original, handler); 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 a2d44d4f..b5ffdb03 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 @@ -86,14 +86,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { return false; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (Storey storey : storeys) { - storey.prepareForChecking(); - } - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 7c7b8d2f..823d6b6d 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 @@ -202,13 +202,6 @@ public abstract class CityObject extends GmlElement { return null; } - @Override - public void prepareForChecking() { - for (Geometry geom : geometryList) { - geom.prepareForChecking(); - } - } - @Override public void clearMetaInformation() { for (Geometry geom : geometryList) { 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 d0c3ea97..3a35b910 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 @@ -195,7 +195,6 @@ public class ConcretePolygon extends Polygon { lr.accept(c); } } - setValidated(true); } @Override @@ -479,8 +478,8 @@ public class ConcretePolygon extends Polygon { } @Override - public void prepareForChecking() { - parent.prepareForChecking(); + public void prepareLowMemoryUsageMode() { + parent.updateEdgesAndVertices(); } @Override 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 b2d7e25f..af111788 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 @@ -165,14 +165,6 @@ public class GenericCityObject extends CityObject { return false; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.prepareForChecking(); - } - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 85357649..45a4146a 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 @@ -378,10 +378,6 @@ public class Geometry extends GmlElement { return false; } - @Override - public void prepareForChecking() { - updateEdgesAndVertices(); - } @Override public void clearMetaInformation() { 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 cf738010..70c914c4 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 @@ -82,11 +82,6 @@ public class ImplicitGeometryHolder extends Geometry { return prototypeGeometry.containsAnyError(); } - @Override - public void prepareForChecking() { - this.updateEdgesAndVertices(); - prototypeGeometry.prepareForChecking(); - } @Override public boolean isValidated() { 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 de15c05f..68454bb2 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 @@ -263,13 +263,6 @@ public class Installation extends CityObject { } } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (BoundarySurface bs : boundarySurfaces) { - bs.prepareForChecking(); - } - } @Override public void fillValues(Copyable original, CopyHandler handler) { 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 ff16150b..90cad357 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 @@ -313,9 +313,8 @@ public class LinearRing extends GmlElement { vertices.addAll(extRing); } - @Override - public void prepareForChecking() { - parent.getParent().prepareForChecking(); + public void prepareLowMemoryUsageMode() { + parent.prepareLowMemoryUsageMode(); } @Override 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 a86002b6..8ceb0442 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 @@ -258,8 +258,8 @@ public class LinkedPolygon extends Polygon { } @Override - public void prepareForChecking() { - poly.prepareForChecking(); + public void prepareLowMemoryUsageMode() { + poly.prepareLowMemoryUsageMode(); } @Override diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Polygon.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Polygon.java index 27e62aea..a7833aba 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Polygon.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Polygon.java @@ -80,6 +80,8 @@ public abstract class Polygon extends GmlElement { public abstract ConcretePolygon getOriginal(); + public abstract void prepareLowMemoryUsageMode(); + public abstract void remove(); public abstract double getArea(); 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 0e056eb8..1efcc912 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 @@ -75,13 +75,6 @@ public class ReliefObject extends CityObject { return new ReliefObject(feature); } - @Override - public void prepareForChecking() { - for (TinObject component : components) { - component.prepareForChecking(); - } - } - @Override public void clearMetaInformation() { for (TinObject component : components) { 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 38d44b68..e39219ec 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 @@ -85,14 +85,6 @@ public class Storey extends AbstractBuildingSubdivision { return false; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (BuildingUnit buildingUnit : buildingUnits) { - buildingUnit.prepareForChecking(); - } - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 52c34b0e..968087bc 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 @@ -173,16 +173,6 @@ public class TopLevelTransportFeature extends TransportationSpace { return "TopLevelTransportFeature [id=" + getGmlId() + "]"; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (TransportSection section : sections) { - section.prepareForChecking(); - } - for (TransportSection section : intersections) { - section.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 dd0fc1db..55707792 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 @@ -155,13 +155,6 @@ public class TrafficSpaceObject extends TransportationObject { return "TransportationSpaceObject [id=" + getGmlId() + "]"; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (TrafficAreaObject tao : trafficAreas) { - tao.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 75256e3a..736febc4 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 @@ -193,16 +193,6 @@ public abstract class TransportationSpace extends TransportationObject { return "TransportationSpace [id=" + getGmlId() + "]"; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (TrafficSpaceObject to : trafficSpaces) { - to.prepareForChecking(); - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - to.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 7f26db76..743b6cca 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 @@ -128,14 +128,6 @@ public class Tunnel extends AbstractTunnel { } } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (TunnelPart tp : tunnelParts) { - tp.prepareForChecking(); - } - } - @Override public void fillValues(Copyable original, CopyHandler handler) { super.fillValues(original, handler); 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 23db78d4..434ff446 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 @@ -218,13 +218,6 @@ public class TunnelConstructiveElement extends CityObject { return boundarySurfaceList; } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.prepareForChecking(); - } - } @Override public void clearMetaInformation() { 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 3465d3ac..d8317bbd 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 @@ -170,12 +170,5 @@ public class WaterObject extends CityObject { } } - @Override - public void prepareForChecking() { - super.prepareForChecking(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.prepareForChecking(); - } - } } 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 new file mode 100644 index 00000000..fe7b2a64 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/PrepareForCheckingVisitor.java @@ -0,0 +1,24 @@ +package de.hft.stuttgart.citydoctor2.utils.visitors; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.datastructure.Geometry; +import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; +import de.hft.stuttgart.citydoctor2.datastructure.Polygon; + +public class PrepareForCheckingVisitor extends AbstractCheck { + + @Override + public void check(Geometry geom) { + geom.updateEdgesAndVertices(); + } + + @Override + public void check(Polygon poly) { + poly.prepareLowMemoryUsageMode(); + } + + @Override + public void check(LinearRing ring) { + ring.prepareLowMemoryUsageMode(); + } +} -- GitLab From ddb1f17fa66a54a44c4443a159d3806c2a2a28f1 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 14:30:03 +0200 Subject: [PATCH 31/51] Refactor: Remove old contains(Any)Error functions --- .../datastructure/AbstractBuilding.java | 79 ------------------ .../AbstractBuildingSubdivision.java | 59 ------------- .../datastructure/AbstractFurniture.java | 30 ------- .../datastructure/AbstractRoom.java | 39 --------- .../datastructure/AbstractTunnel.java | 78 ----------------- .../datastructure/BoundarySurface.java | 29 ------- .../BridgeConstructiveElement.java | 29 ------- .../datastructure/BridgeObject.java | 83 ------------------- .../citydoctor2/datastructure/Building.java | 29 ------- .../datastructure/BuildingUnit.java | 29 ------- .../citydoctor2/datastructure/CityObject.java | 29 ------- .../datastructure/ConcretePolygon.java | 48 ----------- .../datastructure/GenericCityObject.java | 29 ------- .../citydoctor2/datastructure/Geometry.java | 28 ------- .../datastructure/ImplicitGeometryHolder.java | 8 -- .../datastructure/Installation.java | 29 ------- .../datastructure/ReliefObject.java | 29 ------- .../citydoctor2/datastructure/Storey.java | 29 ------- .../TopLevelTransportFeature.java | 40 --------- .../datastructure/TrafficSpaceObject.java | 29 ------- .../datastructure/TransportationSpace.java | 39 --------- .../citydoctor2/datastructure/Tunnel.java | 29 ------- .../TunnelConstructiveElement.java | 29 ------- .../citygml3/Citygml3FeatureMapper.java | 2 - 24 files changed, 881 deletions(-) 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 e1955543..ce448e16 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -251,84 +250,6 @@ public abstract class AbstractBuilding extends CityObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Installation bi : buildingInstallations) { - if (bi.containsError(checkIdentifier)) { - return true; - } - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsError(checkIdentifier)) { - return true; - } - } - for (BuildingRoom br : buildingRooms) { - if (br.containsError(checkIdentifier)) { - return true; - } - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - if (bfr.containsError(checkIdentifier)) { - return true; - } - } - for (Storey storey : buildingStoreys) { - if (storey.containsError(checkIdentifier)) { - return true; - } - } - for (BuildingUnit bu : buildingUnits) { - if (bu.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Installation bi : buildingInstallations) { - if (bi.containsAnyError()) { - return true; - } - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsAnyError()) { - return true; - } - } - for (BuildingRoom br : buildingRooms) { - if (br.containsAnyError()) { - return true; - } - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - if (bfr.containsAnyError()) { - return true; - } - } - for (Storey storey : buildingStoreys) { - if (storey.containsAnyError()) { - return true; - } - } - for (BuildingUnit bu : buildingUnits) { - if (bu.containsAnyError()) { - return true; - } - } - return false; - } - void setCityGmlBuilding(org.citygml4j.core.model.building.AbstractBuilding ab) { this.ab = ab; } 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 8ab97b4d..c8ca28fd 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -203,64 +202,6 @@ public abstract class AbstractBuildingSubdivision extends CityObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Installation bi : buildingInstallations) { - if (bi.containsError(checkIdentifier)) { - return true; - } - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsError(checkIdentifier)) { - return true; - } - } - for (BuildingRoom br : buildingRooms) { - if (br.containsError(checkIdentifier)) { - return true; - } - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - if (bfr.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Installation bi : buildingInstallations) { - if (bi.containsAnyError()) { - return true; - } - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsAnyError()) { - return true; - } - } - for (BuildingRoom br : buildingRooms) { - if (br.containsAnyError()) { - return true; - } - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - if (bfr.containsAnyError()) { - return true; - } - } - return false; - } - void setCityGmlBuilding(org.citygml4j.core.model.building.AbstractBuildingSubdivision abs) { this.abs = abs; } 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 364798c3..c94a7dff 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -59,35 +58,6 @@ public abstract class AbstractFurniture extends CityObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - if (boundarySurface.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - if (boundarySurface.containsAnyError()) { - return true; - } - } - return false; - } - - @Override public org.citygml4j.core.model.construction.AbstractFurniture getGmlObject() { return af; 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 8efaf51e..65565ba8 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -71,44 +70,6 @@ public abstract class AbstractRoom extends CityObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Installation roomInstallation : roomInstallations) { - if (roomInstallation.containsError(checkIdentifier)) { - return true; - } - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - if (boundarySurface.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Installation roomInstallation : roomInstallations) { - if (roomInstallation.containsAnyError()) { - return true; - } - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - if (boundarySurface.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { 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 1125f65c..07d7d1cd 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -233,83 +232,6 @@ public abstract class AbstractTunnel extends CityObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Installation bi : tunnelInstallations) { - if (bi.containsError(checkIdentifier)) { - return true; - } - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsError(checkIdentifier)) { - return true; - } - } - for (TunnelHollow th : tunnelHollows) { - if (th.containsError(checkIdentifier)) { - return true; - } - } - for (TunnelFurniture tfr : tunnelFurnitureList) { - if (tfr.containsError(checkIdentifier)) { - return true; - } - } - for (TunnelConstructiveElement te : tunnelConstructiveElements) { - if (te.containsError(checkIdentifier)) { - return true; - } - } - for (TunnelPart tp : tunnelParts) { - if (tp.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Installation bi : tunnelInstallations) { - if (bi.containsAnyError()) { - return true; - } - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsAnyError()) { - return true; - } - } - for (TunnelHollow th : tunnelHollows) { - if (th.containsAnyError()) { - return true; - } - } - for (TunnelFurniture tfr : tunnelFurnitureList) { - if (tfr.containsAnyError()) { - return true; - } - } - for (TunnelConstructiveElement te : tunnelConstructiveElements) { - if (te.containsAnyError()) { - return true; - } - } - for (TunnelPart tp : tunnelParts) { - if (tp.containsAnyError()) { - return true; - } - } - return false; - } void setCityGmlBuilding(org.citygml4j.core.model.tunnel.AbstractTunnel at) { this.at = at; 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 c2d9be19..5ee57544 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -162,34 +161,6 @@ public class BoundarySurface extends CityObject { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Opening o : openings) { - if (o.containsAnyError()) { - return true; - } - } - return false; - } - - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Opening o : openings) { - if (o.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - @Override public void accept(Check c) { super.accept(c); 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 32f9f5e3..fdb63e70 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -133,34 +132,6 @@ public class BridgeConstructiveElement extends CityObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsAnyError()) { - return true; - } - } - return false; - } - private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) { if (bs.getGeometries().isEmpty()) { for (AbstractSpaceBoundaryProperty bsp : gmlBridgeElement.getBoundaries()) { 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 5b989db1..4107ff4f 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 @@ -237,89 +237,6 @@ public class BridgeObject extends CityObject { } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Installation bi : bridgeInstallations) { - if (bi.containsAnyError()) { - return true; - } - } - for (BoundarySurface bs : boundarySurfaces) { - if (bs.containsAnyError()) { - return true; - } - } - if (doPartsContainAnyError()) { - return true; - } - for (BridgeConstructiveElement ele : elements) { - if (ele.containsAnyError()) { - return true; - } - } - for (BridgeRoom br : bridgeRooms) { - if (br.containsAnyError()) { - return true; - } - } - for (BridgeRoomFurniture bri : bridgeFurniture) { - if (bri.containsAnyError()) { - return true; - } - } - return false; - } - - private boolean doPartsContainAnyError() { - - for (BridgeObject part : parts) { - if (part.containsAnyError()) { - return true; - } - } - return false; - } - - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Installation bi : bridgeInstallations) { - if (bi.containsError(checkIdentifier)) { - return true; - } - } - for (BoundarySurface bs : boundarySurfaces) { - if (bs.containsError(checkIdentifier)) { - return true; - } - } - if (doPartsContainError(checkIdentifier)) { - return true; - } - for (BridgeConstructiveElement ele : elements) { - if (ele.containsError(checkIdentifier)) { - return true; - } - } - for (BridgeRoom br : bridgeRooms) { - if (br.containsError(checkIdentifier)) { - return true; - } - } - for (BridgeRoomFurniture bri : bridgeFurniture) { - if (bri.containsError(checkIdentifier)) { - return true; - } - } - return false; - } private boolean doPartsContainError(CheckId checkIdentifier) { 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 6b4f3f10..e3326dc9 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; @@ -84,34 +83,6 @@ public class Building extends AbstractBuilding { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (BuildingPart bp : buildingParts) { - if (bp.containsAnyError()) { - return true; - } - } - return false; - } - - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (BuildingPart bp : buildingParts) { - if (bp.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - public void addBuildingPart(BuildingPart buildingPart) { buildingParts.add(buildingPart); } 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 b5ffdb03..72ed81e6 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; @@ -58,34 +57,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Storey storey : storeys) { - if (storey.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Storey storey : storeys) { - if (storey.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 823d6b6d..55658f7d 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; @@ -149,20 +148,6 @@ public abstract class CityObject extends GmlElement { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Geometry geom : geometryList) { - if (geom.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - @Override public void clearAllContainedCheckResults() { super.clearCheckResults(); @@ -179,20 +164,6 @@ public abstract class CityObject extends GmlElement { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Geometry geom : geometryList) { - if (geom.containsAnyError()) { - return true; - } - } - return false; - } - public Geometry getGeometry(GeometryType type, Lod lod) { for (Geometry geom : geometryList) { if (geom.getType() == type && geom.getLod() == lod) { 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 3a35b910..df5eab91 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.check.Checkable; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.JoglTesselator; @@ -214,28 +213,6 @@ public class ConcretePolygon extends Polygon { return exterior.isRingConnectedViaPoint(other.getExteriorRing()); } - /* - * (non-Javadoc) - * - * @see de.hft.stuttgart.citydoctor2.datastructure.Polygon#containsAnyError() - */ - @Override - public boolean containsAnyError() { - if (super.containsAnyError()) { - return true; - } - if (exterior != null && exterior.containsAnyError()) { - return true; - } - if (innerRings != null) { - for (LinearRing lr : innerRings) { - if (lr.containsAnyError()) { - return true; - } - } - } - return false; - } /* * (non-Javadoc) @@ -276,31 +253,6 @@ public class ConcretePolygon extends Polygon { } } - /* - * (non-Javadoc) - * - * @see de.hft.stuttgart.citydoctor2.datastructure.Polygon#containsError(de.hft. - * stuttgart.citydoctor2.check.CheckId) - */ - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - if (exterior != null && exterior.containsError(checkIdentifier)) { - return true; - } - if (innerRings != null) { - for (LinearRing lr : innerRings) { - if (lr.containsError(checkIdentifier)) { - return true; - } - } - } - return false; - } - /* * (non-Javadoc) * 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 af111788..2db518b2 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -137,34 +136,6 @@ public class GenericCityObject extends CityObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 45a4146a..f546ac2a 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.Triangle3d; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; @@ -207,19 +206,6 @@ public class Geometry extends GmlElement { + a[0] * b[1] * c[2]; } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (Polygon p : polygons) { - if (p.containsError(checkIdentifier)) { - return true; - } - } - return false; - } @Override public void clearAllContainedCheckResults() { @@ -237,20 +223,6 @@ public class Geometry extends GmlElement { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (Polygon p : polygons) { - if (p.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void accept(Check c) { super.accept(c); 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 70c914c4..f90cd631 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 @@ -62,10 +62,6 @@ public class ImplicitGeometryHolder extends Geometry { prototypeGeometry.accept(c); } - @Override - public boolean containsError(CheckId checkIdentifier) { - return prototypeGeometry.containsError(checkIdentifier); - } @Override public void clearAllContainedCheckResults() { @@ -77,10 +73,6 @@ public class ImplicitGeometryHolder extends Geometry { prototypeGeometry.clearAllContainedCheckResults(); } - @Override - public boolean containsAnyError() { - return prototypeGeometry.containsAnyError(); - } @Override 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 68454bb2..db73d42e 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -143,34 +142,6 @@ public class Installation extends CityObject { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaces) { - if (bs.containsAnyError()) { - return true; - } - } - return false; - } - - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaces) { - if (bs.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - public void setParent(CityObject parent) { this.parent = parent; } 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 1efcc912..f103acff 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 @@ -20,7 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; @@ -97,34 +96,6 @@ public class ReliefObject extends CityObject { } } - @Override - public boolean containsAnyError() { - boolean containsError = super.containsAnyError(); - if (containsError) { - return true; - } - for (TinObject tin : components) { - if (tin.containsAnyError()) { - return true; - } - } - return false; - } - - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (TinObject tin : components) { - if (tin.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - @Override public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { // no geometries 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 e39219ec..b4641ac5 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; @@ -57,34 +56,6 @@ public class Storey extends AbstractBuildingSubdivision { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (BuildingUnit buildingUnit : buildingUnits) { - if (buildingUnit.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (BuildingUnit buildingUnit : buildingUnits) { - if (buildingUnit.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void clearMetaInformation() { super.clearMetaInformation(); 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 968087bc..0626c6ac 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; @@ -92,26 +91,6 @@ public class TopLevelTransportFeature extends TransportationSpace { } } - - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (TransportSection section : sections) { - if (section.containsError(checkIdentifier)) { - return true; - } - } - for (TransportSection section : intersections) { - if (section.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); @@ -134,25 +113,6 @@ public class TopLevelTransportFeature extends TransportationSpace { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (TransportSection section : sections) { - if (section.containsAnyError()) { - return true; - } - } - for (TransportSection section : intersections) { - if (section.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void accept(Check c) { super.accept(c); 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 55707792..5663f7a2 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -73,20 +72,6 @@ public class TrafficSpaceObject extends TransportationObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (TrafficAreaObject tao : trafficAreas) { - if (tao.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); @@ -103,20 +88,6 @@ public class TrafficSpaceObject extends TransportationObject { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (TrafficAreaObject tao : trafficAreas) { - if (tao.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void accept(Check c) { super.accept(c); 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 736febc4..2d19842d 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -99,25 +98,6 @@ public abstract class TransportationSpace extends TransportationObject { } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (TrafficSpaceObject to : trafficSpaces) { - if (to.containsError(checkIdentifier)) { - return true; - } - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - if (to.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); @@ -140,25 +120,6 @@ public abstract class TransportationSpace extends TransportationObject { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (TrafficSpaceObject to : trafficSpaces) { - if (to.containsAnyError()) { - return true; - } - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - if (to.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void accept(Check c) { super.accept(c); 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 743b6cca..edb3a696 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; @@ -66,34 +65,6 @@ public class Tunnel extends AbstractTunnel { } } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (TunnelPart tp : tunnelParts) { - if (tp.containsAnyError()) { - return true; - } - } - return false; - } - - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (TunnelPart tp : tunnelParts) { - if (tp.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - public void addTunnelPart(TunnelPart tunnelPart) { tunnelParts.add(tunnelPart); } 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 434ff446..fed3a05a 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 @@ -2,7 +2,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; @@ -110,34 +109,6 @@ public class TunnelConstructiveElement extends CityObject { } } - @Override - public boolean containsError(CheckId checkIdentifier) { - boolean hasError = super.containsError(checkIdentifier); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsAnyError()) { - return true; - } - } - return false; - } - private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) { if (bs.getGeometries().isEmpty()) { for (AbstractSpaceBoundaryProperty bsp : gmlTunnelElement.getBoundaries()) { 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 c0217c55..0754938d 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 @@ -34,7 +34,6 @@ 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.utils.UnsetGeometriesVisitor; import de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -53,7 +52,6 @@ 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.relief.TinProperty; import org.citygml4j.core.model.transportation.*; import org.citygml4j.core.model.tunnel.Tunnel; import org.citygml4j.core.model.tunnel.*; -- GitLab From 352901cb326f026be1d2b7d6bef5a93b4b6b09aa Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 14:32:39 +0200 Subject: [PATCH 32/51] Refactor: Move Util-Visitors to own package --- .../de/hft/stuttgart/citydoctor2/check/Checkable.java | 9 +++++---- .../stuttgart/citydoctor2/datastructure/CityObject.java | 2 +- .../utils/{ => visitors}/CityObjectCollector.java | 2 +- .../utils/{ => visitors}/ContainsAnyErrorVisitor.java | 5 +++-- .../utils/{ => visitors}/ContainsErrorVisitor.java | 7 ++++--- .../utils/{ => visitors}/UnsetGeometriesVisitor.java | 2 +- .../hft/stuttgart/citydoctor2/check/CheckableTest.java | 5 ----- .../citydoctor2/datastructure/AbstractBuildingTest.java | 2 +- .../citydoctor2/datastructure/BoundarySurfaceTest.java | 2 +- .../citydoctor2/datastructure/BridgeObjectTest.java | 2 +- .../java/de/hft/stuttgart/citydoctor2/gui/Renderer.java | 2 +- .../stuttgart/citydoctor2/gui/TriangulatedGeometry.java | 2 +- 12 files changed, 20 insertions(+), 22 deletions(-) rename CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/{ => visitors}/CityObjectCollector.java (91%) rename CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/{ => visitors}/ContainsAnyErrorVisitor.java (75%) rename CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/{ => visitors}/ContainsErrorVisitor.java (69%) rename CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/{ => visitors}/UnsetGeometriesVisitor.java (84%) 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 2c71ac32..087fa9e3 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 @@ -25,8 +25,9 @@ import java.util.List; import java.util.Map; import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound; -import de.hft.stuttgart.citydoctor2.utils.ContainsAnyErrorVisitor; -import de.hft.stuttgart.citydoctor2.utils.ContainsErrorVisitor; +import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsAnyErrorVisitor; +import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsErrorVisitor; +import de.hft.stuttgart.citydoctor2.utils.visitors.PrepareForCheckingVisitor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -86,7 +87,7 @@ public abstract class Checkable implements Serializable { * @return the GML-ID */ public abstract GmlId getGmlId(); - + /** * This should be called before executing a check if low memory consumption * method has been enabled. This should create edges and additional meta @@ -112,7 +113,7 @@ public abstract class Checkable implements Serializable { */ public boolean containsError(CheckId checkIdentifier) { try { - ContainsErrorVisitor.checkCityObject(this, checkIdentifier); + ContainsErrorVisitor.checkObject(this, checkIdentifier); } catch (CheckErrorFound c) { return true; } 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 55658f7d..00fd803b 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 @@ -23,7 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; -import de.hft.stuttgart.citydoctor2.utils.UnsetGeometriesVisitor; +import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor; import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CityObjectCollector.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java similarity index 91% rename from CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CityObjectCollector.java rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java index ad568b2f..1a72e9c6 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CityObjectCollector.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CityObjectCollector.java @@ -1,4 +1,4 @@ -package de.hft.stuttgart.citydoctor2.utils; +package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsAnyErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java similarity index 75% rename from CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsAnyErrorVisitor.java rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java index 15b2e8b0..6646a158 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsAnyErrorVisitor.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java @@ -1,11 +1,12 @@ -package de.hft.stuttgart.citydoctor2.utils; +package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.check.Checkable; +import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound; +import de.hft.stuttgart.citydoctor2.utils.ThrowUtils; public class ContainsAnyErrorVisitor extends AbstractCheck { - public static void checkObject(Checkable checkable) throws CheckErrorFound { checkable.accept(new ContainsAnyErrorVisitor()); } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java similarity index 69% rename from CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsErrorVisitor.java rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java index b98e9b70..4588eb6a 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/ContainsErrorVisitor.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ContainsErrorVisitor.java @@ -1,15 +1,16 @@ -package de.hft.stuttgart.citydoctor2.utils; +package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.Checkable; -import de.hft.stuttgart.citydoctor2.datastructure.CityObject; +import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound; +import de.hft.stuttgart.citydoctor2.utils.ThrowUtils; public class ContainsErrorVisitor extends AbstractCheck { private CheckId checkId; - public static void checkCityObject(Checkable checkable, CheckId checkIdentifier) throws CheckErrorFound { + public static void checkObject(Checkable checkable, CheckId checkIdentifier) throws CheckErrorFound { checkable.accept(new ContainsErrorVisitor(checkIdentifier)); } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/UnsetGeometriesVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java similarity index 84% rename from CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/UnsetGeometriesVisitor.java rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java index a41ed31d..7c632650 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/UnsetGeometriesVisitor.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/UnsetGeometriesVisitor.java @@ -1,4 +1,4 @@ -package de.hft.stuttgart.citydoctor2.utils; +package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; 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 0cd168a4..0358ab8f 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 @@ -48,11 +48,6 @@ public class CheckableTest { return null; } - @Override - public void prepareForChecking() { - - } - @Override public void clearMetaInformation() { 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 eb8bd38c..ad095ac6 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 @@ -32,7 +32,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import de.hft.stuttgart.citydoctor2.utils.UnsetGeometriesVisitor; +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; 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 7adf9631..942e14c4 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 @@ -29,7 +29,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import de.hft.stuttgart.citydoctor2.utils.UnsetGeometriesVisitor; +import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor; import org.citygml4j.core.model.construction.AbstractConstructionSurface; import org.citygml4j.core.model.construction.WallSurface; import org.citygml4j.core.model.core.AbstractThematicSurface; 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 8b75c8ff..53200fed 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 @@ -31,7 +31,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.concurrent.atomic.AtomicInteger; -import de.hft.stuttgart.citydoctor2.utils.UnsetGeometriesVisitor; +import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor; import org.citygml4j.core.model.bridge.AbstractBridge; import org.citygml4j.core.model.bridge.Bridge; import org.citygml4j.core.model.deprecated.bridge.DeprecatedPropertiesOfAbstractBridge; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java index a00c8c15..3563f21c 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java @@ -2,7 +2,7 @@ package de.hft.stuttgart.citydoctor2.gui; import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.Checkable; -import de.hft.stuttgart.citydoctor2.utils.CityObjectCollector; +import de.hft.stuttgart.citydoctor2.utils.visitors.CityObjectCollector; import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter; import de.hft.stuttgart.citydoctor2.gui.tree.*; diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java index bc5b0b82..c5d7ed3e 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java @@ -1,6 +1,6 @@ package de.hft.stuttgart.citydoctor2.gui; -import de.hft.stuttgart.citydoctor2.utils.CityObjectCollector; +import de.hft.stuttgart.citydoctor2.utils.visitors.CityObjectCollector; import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter; -- GitLab From 7471e87ccc7912da5ffedc54cd246a38e0f3932d Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 14:36:46 +0200 Subject: [PATCH 33/51] Style: Make isValidator() of AbstractCheck final --- .../java/de/hft/stuttgart/citydoctor2/check/AbstractCheck.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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/AbstractCheck.java index ae73cd97..7910cdb0 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/AbstractCheck.java @@ -53,7 +53,7 @@ public abstract class AbstractCheck extends Check { } @Override - public boolean isValidator() { + public final boolean isValidator() { return false; } -- GitLab From 6b8e786f5b8a731931cc81ce1235017d896eca33 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 14:57:27 +0200 Subject: [PATCH 34/51] Refactor: Add CheckError-collection visitor --- .../citydoctor2/check/Checkable.java | 11 ++++++++++ .../visitors/CheckableErrorCollector.java | 21 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java 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 087fa9e3..d5b99b48 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 @@ -25,6 +25,7 @@ import java.util.List; 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.ContainsAnyErrorVisitor; import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsErrorVisitor; import de.hft.stuttgart.citydoctor2.utils.visitors.PrepareForCheckingVisitor; @@ -256,6 +257,16 @@ public abstract class Checkable implements Serializable { * @param errors the collection in which the errors are added. */ public void collectContainedErrors(List errors) { + this.accept(new CheckableErrorCollector(errors)); + } + + /** + * Collects all errors from this checkable and adds + * them to the given list. DEPENDENCY_NOT_MET errors are excluded from this. + * + * @param errors the collection in which the errors are added. + */ + public void collectErrors(List errors) { for (CheckResult cr : checkResults.values()) { if (cr.getResultStatus() == ResultStatus.ERROR) { errors.add(cr.getError()); 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 new file mode 100644 index 00000000..ab69d623 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/CheckableErrorCollector.java @@ -0,0 +1,21 @@ +package de.hft.stuttgart.citydoctor2.utils.visitors; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.check.CheckError; +import de.hft.stuttgart.citydoctor2.check.Checkable; + +import java.util.List; + +public class CheckableErrorCollector extends AbstractCheck { + + List errors; + + public CheckableErrorCollector(List errors) { + this.errors = errors; + } + + @Override + public void check(Checkable checkable) { + checkable.collectErrors(errors); + } +} -- GitLab From bb86c38b37f9172cbf8952516ec19c0bf18df6bc Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 15:08:29 +0200 Subject: [PATCH 35/51] Refactor: Remove obsolete collection functions --- .../datastructure/AbstractBuilding.java | 23 ------------ .../AbstractBuildingSubdivision.java | 16 --------- .../datastructure/AbstractFurniture.java | 8 ----- .../datastructure/AbstractRoom.java | 11 ------ .../datastructure/AbstractTunnel.java | 23 ------------ .../datastructure/BoundarySurface.java | 8 ----- .../BridgeConstructiveElement.java | 8 ----- .../datastructure/BridgeObject.java | 35 ------------------- .../citydoctor2/datastructure/Building.java | 8 ----- .../datastructure/BuildingUnit.java | 8 ----- .../citydoctor2/datastructure/CityObject.java | 8 ----- .../datastructure/ConcretePolygon.java | 21 ----------- .../datastructure/GenericCityObject.java | 8 ----- .../citydoctor2/datastructure/Geometry.java | 8 ----- .../datastructure/ImplicitGeometryHolder.java | 7 ---- .../datastructure/Installation.java | 8 ----- .../datastructure/LinkedPolygon.java | 5 --- .../datastructure/ReliefObject.java | 8 ----- .../citydoctor2/datastructure/Storey.java | 8 ----- .../TopLevelTransportFeature.java | 11 ------ .../datastructure/TrafficSpaceObject.java | 8 ----- .../datastructure/TransportationSpace.java | 11 ------ .../citydoctor2/datastructure/Tunnel.java | 8 ----- .../TunnelConstructiveElement.java | 8 ----- 24 files changed, 275 deletions(-) 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 ce448e16..14571b55 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 @@ -204,29 +204,6 @@ public abstract class AbstractBuilding extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (Installation bi : buildingInstallations) { - bi.collectContainedErrors(errors); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.collectContainedErrors(errors); - } - for (BuildingRoom br : buildingRooms) { - br.collectContainedErrors(errors); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.collectContainedErrors(errors); - } - for (Storey storey : buildingStoreys) { - storey.collectContainedErrors(errors); - } - for (BuildingUnit bu : buildingUnits) { - bu.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); 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 c8ca28fd..8ce75a15 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 @@ -168,22 +168,6 @@ public abstract class AbstractBuildingSubdivision extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (Installation bi : buildingInstallations) { - bi.collectContainedErrors(errors); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.collectContainedErrors(errors); - } - for (BuildingRoom br : buildingRooms) { - br.collectContainedErrors(errors); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.collectContainedErrors(errors); - } - } @Override public void clearAllContainedCheckResults() { 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 c94a7dff..3787310b 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 @@ -42,14 +42,6 @@ public abstract class AbstractFurniture extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); 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 65565ba8..75a08d26 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 @@ -48,17 +48,6 @@ public abstract class AbstractRoom extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (Installation roomInstallation : roomInstallations) { - roomInstallation.collectContainedErrors(errors); - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); 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 07d7d1cd..b3a2ba71 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 @@ -186,29 +186,6 @@ public abstract class AbstractTunnel extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (Installation bi : tunnelInstallations) { - bi.collectContainedErrors(errors); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.collectContainedErrors(errors); - } - for (TunnelHollow th : tunnelHollows) { - th.collectContainedErrors(errors); - } - for (TunnelFurniture tfr : tunnelFurnitureList) { - tfr.collectContainedErrors(errors); - } - for (TunnelConstructiveElement te : tunnelConstructiveElements) { - te.collectContainedErrors(errors); - } - for (TunnelPart tp : tunnelParts) { - tp.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); 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 5ee57544..746a7645 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 @@ -153,14 +153,6 @@ public class BoundarySurface extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (Opening o : openings) { - o.collectContainedErrors(errors); - } - } - @Override public void accept(Check c) { super.accept(c); 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 fdb63e70..217c4e58 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 @@ -116,14 +116,6 @@ public class BridgeConstructiveElement extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (BoundarySurface bs : boundarySurfaceList) { - bs.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); 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 4107ff4f..0d857b83 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 @@ -213,41 +213,6 @@ public class BridgeObject extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (BoundarySurface bs : boundarySurfaces) { - bs.collectContainedErrors(errors); - } - for (Installation bi : bridgeInstallations) { - bi.collectContainedErrors(errors); - } - for (BridgeObject part : parts) { - part.collectContainedErrors(errors); - } - for (BridgeConstructiveElement ele : elements) { - ele.collectContainedErrors(errors); - } - for (BridgeRoom br : bridgeRooms) { - br.collectContainedErrors(errors); - } - for (BridgeRoomFurniture bri : bridgeFurniture) { - bri.collectContainedErrors(errors); - } - - } - - - private boolean doPartsContainError(CheckId checkIdentifier) { - - for (BridgeObject part : parts) { - if (part.containsError(checkIdentifier)) { - return true; - } - } - return false; - } - @Override public void accept(Check c) { super.accept(c); 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 e3326dc9..f22848ed 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 @@ -75,14 +75,6 @@ public class Building extends AbstractBuilding { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (BuildingPart bp : buildingParts) { - bp.collectContainedErrors(errors); - } - } - public void addBuildingPart(BuildingPart buildingPart) { buildingParts.add(buildingPart); } 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 72ed81e6..e604edd7 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 @@ -41,14 +41,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (Storey storey : storeys) { - storey.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); 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 00fd803b..0a617416 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 @@ -156,14 +156,6 @@ public abstract class CityObject extends GmlElement { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (Geometry geom : geometryList) { - geom.collectContainedErrors(errors); - } - } - public Geometry getGeometry(GeometryType type, Lod lod) { for (Geometry geom : geometryList) { if (geom.getType() == type && geom.getLod() == lod) { 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 df5eab91..d9150f38 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 @@ -213,27 +213,6 @@ public class ConcretePolygon extends Polygon { return exterior.isRingConnectedViaPoint(other.getExteriorRing()); } - - /* - * (non-Javadoc) - * - * @see - * de.hft.stuttgart.citydoctor2.datastructure.Polygon#collectContainedErrors( - * java.util.List) - */ - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - if (exterior != null) { - exterior.collectContainedErrors(errors); - } - if (innerRings != null) { - for (LinearRing lr : innerRings) { - lr.collectContainedErrors(errors); - } - } - } - /* * (non-Javadoc) * 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 2db518b2..f980b1bb 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 @@ -120,14 +120,6 @@ public class GenericCityObject extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (BoundarySurface bs : boundarySurfaceList) { - bs.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); 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 f546ac2a..422a331c 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 @@ -215,14 +215,6 @@ public class Geometry extends GmlElement { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (Polygon p : polygons) { - p.collectContainedErrors(errors); - } - } - @Override public void accept(Check c) { super.accept(c); 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 f90cd631..f223f439 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 @@ -68,13 +68,6 @@ public class ImplicitGeometryHolder extends Geometry { prototypeGeometry.clearAllContainedCheckResults(); } - @Override - public void collectContainedErrors(List errors) { - prototypeGeometry.clearAllContainedCheckResults(); - } - - - @Override public boolean isValidated() { return prototypeGeometry.isValidated(); 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 db73d42e..3cbc7226 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 @@ -134,14 +134,6 @@ public class Installation extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (BoundarySurface bs : boundarySurfaces) { - bs.collectContainedErrors(errors); - } - } - public void setParent(CityObject parent) { this.parent = parent; } 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 8ceb0442..d7a99494 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 @@ -117,11 +117,6 @@ public class LinkedPolygon extends Polygon { poly.addCheckResult(cr); } - @Override - public void collectContainedErrors(List errors) { - poly.collectContainedErrors(errors); - } - @Override public boolean containsAnyError() { return poly.containsAnyError(); 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 f103acff..b9d3dba6 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 @@ -88,14 +88,6 @@ public class ReliefObject extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (TinObject tin : components) { - tin.collectContainedErrors(errors); - } - } - @Override public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { // no geometries 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 b4641ac5..9bd672f7 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 @@ -40,14 +40,6 @@ public class Storey extends AbstractBuildingSubdivision { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (BuildingUnit buildingUnit : buildingUnits) { - buildingUnit.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); 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 0626c6ac..51314b85 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 @@ -102,17 +102,6 @@ public class TopLevelTransportFeature extends TransportationSpace { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (TransportSection section : sections) { - section.collectContainedErrors(errors); - } - for (TransportSection section : intersections) { - section.collectContainedErrors(errors); - } - } - @Override public void accept(Check c) { super.accept(c); 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 5663f7a2..715cfd4b 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 @@ -80,14 +80,6 @@ public class TrafficSpaceObject extends TransportationObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (TrafficAreaObject tao : trafficAreas) { - tao.collectContainedErrors(errors); - } - } - @Override public void accept(Check c) { super.accept(c); 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 2d19842d..f03d861b 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 @@ -109,17 +109,6 @@ public abstract class TransportationSpace extends TransportationObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (TrafficSpaceObject to : trafficSpaces) { - to.collectContainedErrors(errors); - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - to.collectContainedErrors(errors); - } - } - @Override public void accept(Check c) { super.accept(c); 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 edb3a696..92ecfb45 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 @@ -57,14 +57,6 @@ public class Tunnel extends AbstractTunnel { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (TunnelPart tp : tunnelParts) { - tp.collectContainedErrors(errors); - } - } - public void addTunnelPart(TunnelPart tunnelPart) { tunnelParts.add(tunnelPart); } 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 fed3a05a..c68c40fa 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 @@ -93,14 +93,6 @@ public class TunnelConstructiveElement extends CityObject { } } - @Override - public void collectContainedErrors(List errors) { - super.collectContainedErrors(errors); - for (BoundarySurface bs : boundarySurfaceList) { - bs.collectContainedErrors(errors); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); -- GitLab From 481b14295ab43c12da68ae5f5088390b3aa8b260 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 16:08:02 +0200 Subject: [PATCH 36/51] Fix: Fix near-infinite loop --- .../utils/visitors/PrepareForCheckingVisitor.java | 11 ----------- 1 file changed, 11 deletions(-) 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 fe7b2a64..56410305 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 @@ -2,8 +2,6 @@ package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.datastructure.Geometry; -import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; -import de.hft.stuttgart.citydoctor2.datastructure.Polygon; public class PrepareForCheckingVisitor extends AbstractCheck { @@ -12,13 +10,4 @@ public class PrepareForCheckingVisitor extends AbstractCheck { geom.updateEdgesAndVertices(); } - @Override - public void check(Polygon poly) { - poly.prepareLowMemoryUsageMode(); - } - - @Override - public void check(LinearRing ring) { - ring.prepareLowMemoryUsageMode(); - } } -- GitLab From 504844ee11b52e56ee4b88e3e471c873ae8a2f01 Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 16:08:25 +0200 Subject: [PATCH 37/51] Fix: Add missing super call --- .../hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java | 1 + 1 file changed, 1 insertion(+) 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 d9150f38..7c447c3c 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 @@ -183,6 +183,7 @@ public class ConcretePolygon extends Polygon { */ @Override public void accept(Check c) { + super.accept(c); if (c.canExecute(this)) { c.check(this); } -- GitLab From 5fd30ccc71a80ace369fb5e9ef8d2d6de51bea6f Mon Sep 17 00:00:00 2001 From: Riegel Date: Tue, 15 Apr 2025 16:09:35 +0200 Subject: [PATCH 38/51] Fix: Implement color coding for group nodes --- .../citydoctor2/gui/tree/node/CityObjectGroupNode.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectGroupNode.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectGroupNode.java index 492f1a47..79409dc4 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectGroupNode.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/node/CityObjectGroupNode.java @@ -1,6 +1,8 @@ package de.hft.stuttgart.citydoctor2.gui.tree.node; +import de.hft.stuttgart.citydoctor2.check.Checkable; import de.hft.stuttgart.citydoctor2.datastructure.CityObject; +import de.hft.stuttgart.citydoctor2.gui.CheckStatus; import de.hft.stuttgart.citydoctor2.gui.Renderer; import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; import javafx.scene.paint.Color; @@ -21,7 +23,13 @@ public class CityObjectGroupNode extends Renderable { @Override public void refreshTextColor() { - // no color changes + if (cityObjects.stream().anyMatch(cityObject -> !cityObject.isValidated())) { + setStatus(CheckStatus.NOT_CHECKED); + } else if (cityObjects.stream().anyMatch(Checkable::containsAnyError)) { + setStatus(CheckStatus.ERROR); + } else { + setStatus(CheckStatus.OK); + } } -- GitLab From 689a22394e06c3b2abf7bafd8250d46d9f0b2c0b Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 16 Apr 2025 09:45:21 +0200 Subject: [PATCH 39/51] Fix: Change method-call to correct implementation --- .../citydoctor2/utils/visitors/ContainsAnyErrorVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6646a158..09f0641c 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 @@ -13,7 +13,7 @@ public class ContainsAnyErrorVisitor extends AbstractCheck { @Override public void check(Checkable checkable) { - if (checkable.hasAnyErrorWithoutDependencies()) { + if (checkable.hasAnyError()) { ThrowUtils.sneakyThrow(new CheckErrorFound()); } } -- GitLab From 79a65e32918742b0215662a546785121b354dcb8 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 16 Apr 2025 09:46:08 +0200 Subject: [PATCH 40/51] Refactor: Add ClearMetaInformationVisitor --- .../utils/visitors/ClearMetaInformationVisitor.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java 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 new file mode 100644 index 00000000..369e5684 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearMetaInformationVisitor.java @@ -0,0 +1,13 @@ +package de.hft.stuttgart.citydoctor2.utils.visitors; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.datastructure.Geometry; + +public class ClearMetaInformationVisitor extends AbstractCheck { + + @Override + public void check(Geometry geometry) { + geometry.clearMetaInformation(); + } + +} -- GitLab From efa04ffbd1a1c4421831c22f76e97cb06b93be62 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 16 Apr 2025 10:59:01 +0200 Subject: [PATCH 41/51] Refactor: Rework clearMetaInformation with Visitor --- .../citydoctor2/check/Checkable.java | 7 +++-- .../datastructure/AbstractBuilding.java | 22 --------------- .../AbstractBuildingSubdivision.java | 17 ----------- .../datastructure/AbstractFurniture.java | 9 ------ .../datastructure/AbstractRoom.java | 12 -------- .../datastructure/AbstractTunnel.java | 24 ---------------- .../datastructure/BoundarySurface.java | 9 ------ .../BridgeConstructiveElement.java | 9 ------ .../datastructure/BridgeObject.java | 28 ------------------- .../citydoctor2/datastructure/Building.java | 8 ------ .../datastructure/BuildingUnit.java | 8 ------ .../citydoctor2/datastructure/CityObject.java | 7 ----- .../datastructure/ConcretePolygon.java | 6 +--- .../datastructure/GenericCityObject.java | 8 ------ .../citydoctor2/datastructure/Geometry.java | 3 +- .../datastructure/Installation.java | 9 ------ .../citydoctor2/datastructure/LinearRing.java | 5 ---- .../datastructure/LinkedPolygon.java | 10 ------- .../datastructure/ReliefObject.java | 7 ----- .../citydoctor2/datastructure/Storey.java | 8 ------ .../TopLevelTransportFeature.java | 11 -------- .../datastructure/TrafficSpaceObject.java | 8 ------ .../datastructure/TransportationSpace.java | 12 -------- .../citydoctor2/datastructure/Tunnel.java | 8 ------ .../TunnelConstructiveElement.java | 9 ------ .../datastructure/WaterObject.java | 23 --------------- .../visitors/ClearMetaInformationVisitor.java | 2 +- .../stuttgart/citydoctor2/gui/Renderer.java | 2 +- 28 files changed, 9 insertions(+), 282 deletions(-) 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 d5b99b48..d6b27ea5 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,6 +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.ClearMetaInformationVisitor; import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsAnyErrorVisitor; import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsErrorVisitor; import de.hft.stuttgart.citydoctor2.utils.visitors.PrepareForCheckingVisitor; @@ -102,7 +103,9 @@ public abstract class Checkable implements Serializable { * This should be called after checking has been done. This should remove any * created meta information like edges to free up additional memory space */ - public abstract void clearMetaInformation(); + public void clearMetaInformation() { + this.accept(new ClearMetaInformationVisitor()); + } /** * This method checks if the object or any object contained within this @@ -231,7 +234,7 @@ public abstract class Checkable implements Serializable { * @return false if the checkable or all checkables contained in this one don't * have any error. */ - public boolean containsAnyError() { + public final boolean containsAnyError() { try { ContainsAnyErrorVisitor.checkObject(this); } catch (CheckErrorFound c) { 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 14571b55..b130d267 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 @@ -285,28 +285,6 @@ public abstract class AbstractBuilding extends CityObject { return buildingUnits; } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (Installation bi : buildingInstallations) { - bi.clearMetaInformation(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearMetaInformation(); - } - for (BuildingRoom br : buildingRooms) { - br.clearMetaInformation(); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.clearMetaInformation(); - } - for (Storey storey : buildingStoreys) { - storey.clearMetaInformation(); - } - for (BuildingUnit bu : buildingUnits) { - bu.clearMetaInformation(); - } - } @Override public void collectInstances(CopyHandler handler) { 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 8ce75a15..7d88ee9e 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 @@ -228,23 +228,6 @@ public abstract class AbstractBuildingSubdivision extends CityObject { } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (Installation bi : buildingInstallations) { - bi.clearMetaInformation(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearMetaInformation(); - } - for (BuildingRoom br : buildingRooms) { - br.clearMetaInformation(); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 3787310b..697dda5c 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 @@ -145,15 +145,6 @@ public abstract class AbstractFurniture extends CityObject { } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.clearMetaInformation(); - } - } - - @Override public FeatureType getFeatureType() { return FeatureType.FURNITURE; 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 75a08d26..62d865e1 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 @@ -125,18 +125,6 @@ public abstract class AbstractRoom extends CityObject { cgmlRoom.setLod3Solid(null); } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (Installation roomInstallation : roomInstallations) { - roomInstallation.clearMetaInformation(); - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.clearMetaInformation(); - } - } - - @Override public AbstractCityObject getGmlObject() { return cgmlRoom; 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 b3a2ba71..890c40dd 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 @@ -267,30 +267,6 @@ public abstract class AbstractTunnel extends CityObject { return tunnelConstructiveElements; } - - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (Installation bi : tunnelInstallations) { - bi.clearMetaInformation(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearMetaInformation(); - } - for (TunnelHollow th : tunnelHollows) { - th.clearMetaInformation(); - } - for (TunnelFurniture tfr : tunnelFurnitureList) { - tfr.clearMetaInformation(); - } - for (TunnelConstructiveElement te : tunnelConstructiveElements) { - te.clearMetaInformation(); - } - for (TunnelPart tp : tunnelParts) { - tp.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 746a7645..67912acc 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 @@ -219,15 +219,6 @@ public class BoundarySurface extends CityObject { opening.setPartOfSurface(this); } - - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (Opening o : openings) { - o.clearMetaInformation(); - } - } - @Override public Copyable createCopyInstance() { return new BoundarySurface(gmlObject); 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 217c4e58..8e7fe2e4 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 @@ -237,15 +237,6 @@ public class BridgeConstructiveElement extends CityObject { return boundarySurfaceList; } - - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 0d857b83..cc0afcdb 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 @@ -298,34 +298,6 @@ public class BridgeObject extends CityObject { } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BoundarySurface bs : boundarySurfaces) { - bs.clearMetaInformation(); - } - for (Installation bi : bridgeInstallations) { - bi.clearMetaInformation(); - } - - for (BridgeObject part : parts) { - part.clearMetaInformation(); - } - - - for (BridgeConstructiveElement ele : elements) { - ele.clearMetaInformation(); - } - - for (BridgeRoom br : bridgeRooms) { - br.clearMetaInformation(); - } - for (BridgeRoomFurniture bri : bridgeFurniture) { - bri.clearMetaInformation(); - } - - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 f22848ed..ab6297d4 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 @@ -101,14 +101,6 @@ public class Building extends AbstractBuilding { setCityGmlBuilding(gmlB); } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BuildingPart part : buildingParts) { - part.clearMetaInformation(); - } - } - @Override public void fillValues(Copyable original, CopyHandler handler) { super.fillValues(original, handler); 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 e604edd7..1babf361 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 @@ -49,14 +49,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { } } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (Storey storey : storeys) { - storey.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 0a617416..c44f6595 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 @@ -165,13 +165,6 @@ public abstract class CityObject extends GmlElement { return null; } - @Override - public void clearMetaInformation() { - for (Geometry geom : geometryList) { - geom.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { for (Geometry geom : geometryList) { 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 7c447c3c..73ebf1b2 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 @@ -413,11 +413,7 @@ public class ConcretePolygon extends Polygon { public void prepareLowMemoryUsageMode() { parent.updateEdgesAndVertices(); } - - @Override - public void clearMetaInformation() { - parent.clearMetaInformation(); - } + @Override public void collectInstances(CopyHandler handler) { 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 f980b1bb..398f8eaf 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 @@ -128,14 +128,6 @@ public class GenericCityObject extends CityObject { } } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 422a331c..b92513d4 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 @@ -343,8 +343,7 @@ public class Geometry extends GmlElement { } - @Override - public void clearMetaInformation() { + public void clearMetaData() { if (vertices != null) { for (Vertex v : vertices) { v.clearAdjacentRings(); 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 3cbc7226..ccf82d65 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 @@ -218,15 +218,6 @@ public class Installation extends CityObject { return boundarySurfaces; } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BoundarySurface bs : boundarySurfaces) { - bs.clearMetaInformation(); - } - } - - @Override public void fillValues(Copyable original, CopyHandler handler) { super.fillValues(original, handler); 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 90cad357..af9b0a5f 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 @@ -317,11 +317,6 @@ public class LinearRing extends GmlElement { parent.prepareLowMemoryUsageMode(); } - @Override - public void clearMetaInformation() { - parent.getParent().clearMetaInformation(); - } - @Override public void fillValues(Copyable original, CopyHandler handler) { super.fillValues(original, handler); 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 d7a99494..29aa9c09 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 @@ -117,11 +117,6 @@ public class LinkedPolygon extends Polygon { poly.addCheckResult(cr); } - @Override - public boolean containsAnyError() { - return poly.containsAnyError(); - } - @Override public boolean containsError(CheckId checkIdentifier) { return poly.containsError(checkIdentifier); @@ -257,11 +252,6 @@ public class LinkedPolygon extends Polygon { poly.prepareLowMemoryUsageMode(); } - @Override - public void clearMetaInformation() { - poly.clearMetaInformation(); - } - @Override public boolean isLinkedTo() { return false; 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 b9d3dba6..9af38a23 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 @@ -74,13 +74,6 @@ public class ReliefObject extends CityObject { return new ReliefObject(feature); } - @Override - public void clearMetaInformation() { - for (TinObject component : components) { - component.clearMetaInformation(); - } - } - @Override public void clearAllContainedCheckResults() { for (TinObject component : components) { 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 9bd672f7..a8bb7497 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 @@ -48,14 +48,6 @@ public class Storey extends AbstractBuildingSubdivision { } } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BuildingUnit buildingUnit : buildingUnits) { - buildingUnit.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 51314b85..f60d7a43 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 @@ -123,17 +123,6 @@ public class TopLevelTransportFeature extends TransportationSpace { } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (TransportSection section : sections) { - section.clearMetaInformation(); - } - for (TransportSection section : intersections) { - section.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 715cfd4b..261bd1fa 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 @@ -119,14 +119,6 @@ public class TrafficSpaceObject extends TransportationObject { } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (TrafficAreaObject tao : trafficAreas) { - tao.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 f03d861b..994a1fd5 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 @@ -143,18 +143,6 @@ public abstract class TransportationSpace extends TransportationObject { return "TransportationSpace [id=" + getGmlId() + "]"; } - - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (TrafficSpaceObject to : trafficSpaces) { - to.clearMetaInformation(); - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - to.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 92ecfb45..e7e3f3c3 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 @@ -83,14 +83,6 @@ public class Tunnel extends AbstractTunnel { setCityGmlBuilding(gmlT); } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (TunnelPart tp : tunnelParts) { - tp.clearMetaInformation(); - } - } - @Override public void fillValues(Copyable original, CopyHandler handler) { super.fillValues(original, handler); 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 c68c40fa..24b5b2fb 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 @@ -181,15 +181,6 @@ public class TunnelConstructiveElement extends CityObject { return boundarySurfaceList; } - - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearMetaInformation(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 d8317bbd..cea2f4b4 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 @@ -142,33 +142,10 @@ public class WaterObject extends CityObject { } - @Override - public boolean containsAnyError() { - boolean hasError = super.containsAnyError(); - if (hasError) { - return true; - } - for (BoundarySurface bs : boundarySurfaceList) { - if (bs.containsAnyError()) { - return true; - } - } - return false; - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); handler.addInstance(boundarySurfaceList); } - @Override - public void clearMetaInformation() { - super.clearMetaInformation(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearMetaInformation(); - } - } - - } 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 369e5684..18e86496 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 @@ -7,7 +7,7 @@ public class ClearMetaInformationVisitor extends AbstractCheck { @Override public void check(Geometry geometry) { - geometry.clearMetaInformation(); + geometry.clearMetaData(); } } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java index 3563f21c..7c2279b3 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java @@ -248,7 +248,7 @@ public class Renderer { if (geom.getEdges() == null && currentGeometry != null) { // if there are no edges available low memory mode is enabled // clear the old geometry of all meta information - currentGeometry.clearMetaInformation(); + currentGeometry.clearMetaData(); } errVisitor.setGeometry(currentTriGeom); Platform.runLater(() -> { -- GitLab From 23ca32964f325328e1b4f1f8e2e7a211ea015093 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 23 Apr 2025 14:03:01 +0200 Subject: [PATCH 42/51] Refactor: Implement ReCreateGeometries as Visitor --- .../datastructure/AbstractBuilding.java | 39 ++---- .../AbstractBuildingSubdivision.java | 33 ++--- .../datastructure/AbstractFurniture.java | 2 +- .../datastructure/AbstractRoom.java | 8 +- .../datastructure/AbstractTunnel.java | 39 ++---- .../datastructure/BoundarySurface.java | 6 +- .../BridgeConstructiveElement.java | 5 +- .../datastructure/BridgeObject.java | 37 +++--- .../citydoctor2/datastructure/Building.java | 7 -- .../datastructure/BuildingUnit.java | 2 +- .../datastructure/CityFurniture.java | 2 +- .../citydoctor2/datastructure/CityObject.java | 8 +- .../datastructure/GenericCityObject.java | 24 ++-- .../datastructure/Installation.java | 20 ++- .../citydoctor2/datastructure/LandObject.java | 3 +- .../citydoctor2/datastructure/Opening.java | 2 +- .../datastructure/ReliefObject.java | 2 +- .../citydoctor2/datastructure/Storey.java | 2 +- .../citydoctor2/datastructure/TinObject.java | 2 +- .../TopLevelTransportFeature.java | 11 -- .../datastructure/TrafficAreaObject.java | 2 +- .../datastructure/TrafficSpaceObject.java | 5 +- .../datastructure/TransportationSpace.java | 8 +- .../citydoctor2/datastructure/Tunnel.java | 7 -- .../TunnelConstructiveElement.java | 16 ++- .../citydoctor2/datastructure/Vegetation.java | 2 +- .../datastructure/WaterObject.java | 23 +++- .../utils/visitors/GmlGeometryRebuilder.java | 22 ++++ .../citydoctor2/check/CheckableTest.java | 5 - .../datastructure/AbstractBuildingTest.java | 86 ++----------- .../datastructure/AbstractTunnelTest.java | 115 ++++++++++++++++++ .../datastructure/BoundarySurfaceTest.java | 37 ++---- .../datastructure/BridgeObjectTest.java | 48 ++++---- .../datastructure/CityFurnitureTest.java | 26 ++++ .../datastructure/CityObjectTest.java | 94 ++++++++++++++ .../datastructure/GenericCityObjectTest.java | 71 +++++++++++ .../datastructure/GeometryTest.java | 23 ++-- 37 files changed, 529 insertions(+), 315 deletions(-) create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.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 b130d267..f03700c5 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 @@ -90,7 +90,7 @@ public abstract class AbstractBuilding extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; @@ -103,38 +103,21 @@ public abstract class AbstractBuilding extends CityObject { setSolidAccordingToLod(geom, solid); } } - for (BoundarySurface bs : boundarySurfaceList) { - reCreateBoundarySurface(factory, config, bs); - } - for (Installation bi : buildingInstallations) { - bi.reCreateGeometries(factory, config); - } - for (BuildingRoom br : buildingRooms) { - br.reCreateGeometries(factory, config); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.reCreateGeometries(factory, config); - } - for (Storey storey : buildingStoreys) { - storey.reCreateGeometries(factory, config); - } - for (BuildingUnit bu : buildingUnits) { - bu.reCreateGeometries(factory, config); - } + removeEmptyBoundarySurfaces(); } - private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) { - if (bs.getGeometries().isEmpty()) { - for (AbstractSpaceBoundaryProperty bsp : ab.getBoundaries()) { - if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { - logger.warn("Found empty boundary surface: {}, removing from building", bs.getGmlId()); - ab.getBoundaries().remove(bsp); - break; + private void removeEmptyBoundarySurfaces() { + for (BoundarySurface bs : boundarySurfaceList) { + if (bs.getGeometries().isEmpty()) { + for (AbstractSpaceBoundaryProperty bsp : ab.getBoundaries()) { + if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { + logger.warn("Found empty boundary surface: {}, removing from building", bs.getGmlId()); + ab.getBoundaries().remove(bsp); + break; + } } } - return; } - bs.reCreateGeometries(factory, config); } private void setMultiSurfaceAccordingToLod(Geometry geom, MultiSurface ms) { 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 7d88ee9e..486d7ddc 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 @@ -75,7 +75,7 @@ public abstract class AbstractBuildingSubdivision extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; @@ -88,32 +88,21 @@ public abstract class AbstractBuildingSubdivision extends CityObject { setSolidAccordingToLod(geom, solid); } } - for (BoundarySurface bs : boundarySurfaceList) { - reCreateBoundarySurface(factory, config, bs); - } - for (Installation bi : buildingInstallations) { - bi.reCreateGeometries(factory, config); - } - for (BuildingRoom br : buildingRooms) { - br.reCreateGeometries(factory, config); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.reCreateGeometries(factory, config); - } + removeEmptyBoundarySurfaces(); } - private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) { - if (bs.getGeometries().isEmpty()) { - for (AbstractSpaceBoundaryProperty bsp : abs.getBoundaries()) { - if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { - logger.warn("Found empty boundary surface: {}, removing from building", bs.getGmlId()); - abs.getBoundaries().remove(bsp); - break; + private void removeEmptyBoundarySurfaces() { + for (BoundarySurface bs : boundarySurfaceList) { + if (bs.getGeometries().isEmpty()) { + for (AbstractSpaceBoundaryProperty bsp : abs.getBoundaries()) { + if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { + logger.warn("Found empty boundary surface: {}, removing from building-subdivision", bs.getGmlId()); + abs.getBoundaries().remove(bsp); + break; + } } } - return; } - bs.reCreateGeometries(factory, config); } private void setMultiSurfaceAccordingToLod(Geometry geom, MultiSurface ms) { 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 697dda5c..16cce914 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 @@ -70,7 +70,7 @@ public abstract class AbstractFurniture extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; 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 62d865e1..f194c163 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 @@ -60,7 +60,7 @@ public abstract class AbstractRoom extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; @@ -73,12 +73,6 @@ public abstract class AbstractRoom extends CityObject { setSolidAccordingToLod(geom, solid); } } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.reCreateGeometries(factory, config); - } - for (Installation roomInstallation : roomInstallations) { - roomInstallation.reCreateGeometries(factory, config); - } } 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 890c40dd..fc03e319 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 @@ -72,7 +72,7 @@ public abstract class AbstractTunnel extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; @@ -85,38 +85,21 @@ public abstract class AbstractTunnel extends CityObject { setSolidAccordingToLod(geom, solid); } } - for (BoundarySurface bs : boundarySurfaceList) { - reCreateBoundarySurface(factory, config, bs); - } - for (Installation bi : tunnelInstallations) { - bi.reCreateGeometries(factory, config); - } - for (TunnelHollow th : tunnelHollows) { - th.reCreateGeometries(factory, config); - } - for (TunnelFurniture tfr : tunnelFurnitureList) { - tfr.reCreateGeometries(factory, config); - } - for (TunnelConstructiveElement te : tunnelConstructiveElements) { - te.reCreateGeometries(factory, config); - } - for (TunnelPart tp : tunnelParts) { - tp.reCreateGeometries(factory, config); - } + removeEmptyBoundarySurfaces(); } - private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) { - if (bs.getGeometries().isEmpty()) { - for (AbstractSpaceBoundaryProperty bsp : at.getBoundaries()) { - if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { - logger.warn("Found empty boundary surface: {}, removing from building", bs.getGmlId()); - at.getBoundaries().remove(bsp); - break; + private void removeEmptyBoundarySurfaces() { + for (BoundarySurface bs : boundarySurfaceList) { + if (bs.getGeometries().isEmpty()) { + for (AbstractSpaceBoundaryProperty bsp : at.getBoundaries()) { + if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { + logger.warn("Found empty boundary surface: {}, removing from tunnel", bs.getGmlId()); + at.getBoundaries().remove(bsp); + break; + } } } - return; } - bs.reCreateGeometries(factory, config); } private void setMultiSurfaceAccordingToLod(Geometry geom, MultiSurface ms) { 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 67912acc..cf50e812 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 @@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; +import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; import org.citygml4j.core.model.core.AbstractThematicSurface; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -101,7 +102,7 @@ public class BoundarySurface extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { if (gmlObject.getId() == null) { gmlObject.setId(getGmlId().getGmlString()); } @@ -118,9 +119,6 @@ public class BoundarySurface extends CityObject { throw new IllegalStateException("BoundarySurfaces can only have MultiSurface geometries"); } } - for (Opening o : openings) { - o.reCreateGeometries(factory, config); - } } private void setGeometryAccordingToLod(Lod lod, MultiSurfaceProperty ms) { 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 8e7fe2e4..1b755626 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 @@ -77,7 +77,7 @@ public class BridgeConstructiveElement extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { // only handles CityGML2 for now // unknown which CityGML is handled here // need context information to decide @@ -100,9 +100,6 @@ public class BridgeConstructiveElement extends CityObject { break; } } - for (BoundarySurface bs : boundarySurfaceList) { - reCreateBoundarySurface(factory, config, bs); - } } @Override 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 cc0afcdb..ba884242 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 @@ -26,6 +26,8 @@ import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.bridge.AbstractBridge; import org.citygml4j.core.model.bridge.BridgeInstallation; import org.citygml4j.core.model.bridge.BridgeInstallationProperty; @@ -49,6 +51,9 @@ public class BridgeObject extends CityObject { @Serial private static final long serialVersionUID = 6301112640328373842L; + + private static final Logger logger = LogManager.getLogger(BridgeObject.class); + private final List parts = new ArrayList<>(2); private final List elements = new ArrayList<>(2); private final List boundarySurfaces = new ArrayList<>(2); @@ -104,7 +109,7 @@ public class BridgeObject extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; @@ -117,25 +122,21 @@ public class BridgeObject extends CityObject { setSolidAccordingToLod(geom, solid); } } + removeEmptyBoundarySurfaces(); + } + + private void removeEmptyBoundarySurfaces() { for (BoundarySurface bs : boundarySurfaces) { - bs.reCreateGeometries(factory, config); - } - for (Installation bi : bridgeInstallations) { - bi.reCreateGeometries(factory, config); - } - for (BridgeObject part : parts) { - part.reCreateGeometries(factory, config); - } - for (BridgeConstructiveElement ele : elements) { - ele.reCreateGeometries(factory, config); - } - for (BridgeRoom br : bridgeRooms) { - br.reCreateGeometries(factory, config); - } - for (BridgeRoomFurniture bri : bridgeFurniture) { - bri.reCreateGeometries(factory, config); + if (bs.getGeometries().isEmpty()) { + for (AbstractSpaceBoundaryProperty bsp : ab.getBoundaries()) { + if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { + logger.warn("Found empty boundary surface: {}, removing from bridge", bs.getGmlId()); + ab.getBoundaries().remove(bsp); + break; + } + } + } } - } private void setMultiSurfaceAccordingToLod(Geometry geom, MultiSurface ms) { 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 ab6297d4..21e22670 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 @@ -43,13 +43,6 @@ public class Building extends AbstractBuilding { return buildingParts; } - @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { - super.reCreateGeometries(factory, config); - for (BuildingPart bp : buildingParts) { - bp.reCreateGeometries(factory, config); - } - } @Override public CityObject getTopLevelCityObject() { 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 1babf361..f0c4269b 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 @@ -26,7 +26,7 @@ public class BuildingUnit extends AbstractBuildingSubdivision { @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { super.reCreateGeometries(factory, config); for (Storey storey : storeys) { storey.reCreateGeometries(factory, config); 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 64132620..9b7c4057 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 @@ -62,7 +62,7 @@ public class CityFurniture extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; 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 c44f6595..d9499a47 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 @@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder; import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor; import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; @@ -48,6 +49,7 @@ public abstract class CityObject extends GmlElement { private final List geometryList = new ArrayList<>(); private final List genericAttributeList = new ArrayList<>(); + /** * Recreates the CityGML4j geometry in this object. The CityGML4j geometry is * deleted from the data structure as was mapped to the city doctor data @@ -59,7 +61,11 @@ public abstract class CityObject extends GmlElement { * transformed to a different coordinate system. It would need to * be transformed to the original coordinate system */ - public abstract void reCreateGeometries(GeometryFactory factory, ParserConfiguration config); + public final void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + this.accept(new GmlGeometryRebuilder(factory, config)); + } + + public abstract void rebuildGeometries(GeometryFactory factory, ParserConfiguration config); /** * Getter for the CityGML4j data object 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 398f8eaf..cea8bc46 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 @@ -47,7 +47,7 @@ public class GenericCityObject extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; @@ -60,23 +60,21 @@ public class GenericCityObject extends CityObject { setSolidAccordingToLod(geom, solid); } } - for (BoundarySurface bs : boundarySurfaceList) { - reCreateBoundarySurface(factory, config, bs); - } + removeEmptyBoundarySurfaces(); } - private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) { - if (bs.getGeometries().isEmpty()) { - for (AbstractSpaceBoundaryProperty bsp : cgmlGos.getBoundaries()) { - if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { - logger.warn("Found empty boundary surface: {}, removing from generic object", bs.getGmlId()); - cgmlGos.getBoundaries().remove(bsp); - break; + private void removeEmptyBoundarySurfaces() { + for (BoundarySurface bs : boundarySurfaceList) { + if (bs.getGeometries().isEmpty()) { + for (AbstractSpaceBoundaryProperty bsp : cgmlGos.getBoundaries()) { + if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { + logger.warn("Found empty boundary surface: {}, removing from feature", bs.getGmlId()); + cgmlGos.getBoundaries().remove(bsp); + break; + } } } - return; } - bs.reCreateGeometries(factory, config); } private void setMultiSurfaceAccordingToLod(Geometry geom, MultiSurface ms) { 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 ccf82d65..dbf8cd0d 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 @@ -25,6 +25,8 @@ import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.bridge.BridgeInstallation; import org.citygml4j.core.model.construction.AbstractInstallation; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; @@ -45,13 +47,15 @@ public class Installation extends CityObject { @Serial private static final long serialVersionUID = 1576237433322680191L; + private static final Logger logger = LogManager.getLogger(Installation.class); + private List boundarySurfaces = new ArrayList<>(4); private AbstractInstallation gmlBi; private CityObject parent; - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom.getType() == GeometryType.MULTI_SURFACE) { MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); @@ -67,8 +71,20 @@ public class Installation extends CityObject { throw new IllegalStateException("BuildingInstallation not have Solid geometries"); } } + removeEmptyBoundarySurfaces(); + } + + private void removeEmptyBoundarySurfaces() { for (BoundarySurface bs : boundarySurfaces) { - bs.reCreateGeometries(factory, config); + if (bs.getGeometries().isEmpty()) { + for (AbstractSpaceBoundaryProperty bsp : gmlBi.getBoundaries()) { + if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { + logger.warn("Found empty boundary surface: {}, removing from feature", bs.getGmlId()); + gmlBi.getBoundaries().remove(bsp); + break; + } + } + } } } 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 cce15c79..21de0051 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 @@ -48,7 +48,7 @@ public class LandObject extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom.getType() == GeometryType.MULTI_SURFACE) { MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); @@ -104,6 +104,7 @@ public class LandObject extends CityObject { @Override public void unsetGmlGeometries() { + lu.setLod0MultiCurve(null); lu.setLod0MultiSurface(null); lu.setLod1MultiSurface(null); lu.setLod2MultiSurface(null); 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 c33a1858..651d529b 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 @@ -61,7 +61,7 @@ public class Opening extends CityObject { this.ao = ao; } - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { if (ao.getId() != null) { ao.setId(getGmlId().getGmlString()); } 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 9af38a23..8f850b29 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 @@ -82,7 +82,7 @@ public class ReliefObject extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { // no geometries } 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 a8bb7497..12ca8f16 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 @@ -25,7 +25,7 @@ public class Storey extends AbstractBuildingSubdivision { @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { super.reCreateGeometries(factory, config); for (BuildingUnit buildingUnit : buildingUnits) { buildingUnit.reCreateGeometries(factory, config); 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 1aad832f..e660a603 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 @@ -62,7 +62,7 @@ public class TinObject extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { if (getGeometries().isEmpty()) { return; } 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 f60d7a43..e28f385f 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 @@ -80,17 +80,6 @@ public class TopLevelTransportFeature extends TransportationSpace { return intersections; } - @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { - super.reCreateGeometries(factory, config); - for (TransportSection section : sections) { - section.reCreateGeometries(factory, config); - } - for (TransportSection section : intersections) { - section.reCreateGeometries(factory, config); - } - } - @Override public void clearAllContainedCheckResults() { super.clearAllContainedCheckResults(); diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java index fda9bb33..a54a1e6b 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java @@ -27,7 +27,7 @@ public class TrafficAreaObject extends TransportationObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; 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 261bd1fa..cdb2a420 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 @@ -42,7 +42,7 @@ public class TrafficSpaceObject extends TransportationObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; @@ -51,9 +51,6 @@ public class TrafficSpaceObject extends TransportationObject { AbstractSpace ats = (AbstractSpace) super.getGmlObject(); setMultiSurfaceAccordingToLod(ats, ms, geom.getLod()); } - for (TrafficAreaObject tao : trafficAreas) { - tao.reCreateGeometries(factory, config); - } } private void setMultiSurfaceAccordingToLod(AbstractSpace ats, MultiSurface ms, Lod lod) { 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 994a1fd5..df412c39 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 @@ -43,7 +43,7 @@ public abstract class TransportationSpace extends TransportationObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; @@ -61,12 +61,6 @@ public abstract class TransportationSpace extends TransportationObject { + ". Only MultiSurface allowed"); } } - for (TrafficSpaceObject spaces : trafficSpaces) { - spaces.reCreateGeometries(factory, config); - } - for (TrafficSpaceObject spaces : auxTrafficSpaces) { - spaces.reCreateGeometries(factory, config); - } } private void setMultiSurfaceAccordingToLod(AbstractTransportationSpace ats, MultiSurface ms, Lod lod) { 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 e7e3f3c3..705e1359 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 @@ -25,13 +25,6 @@ public class Tunnel extends AbstractTunnel { return tunnelParts; } - @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { - super.reCreateGeometries(factory, config); - for (TunnelPart tp : tunnelParts) { - tp.reCreateGeometries(factory, config); - } - } @Override public CityObject getTopLevelCityObject() { 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 24b5b2fb..f15717b4 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 @@ -56,7 +56,7 @@ public class TunnelConstructiveElement extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { // only handles CityGML2 for now // unknown which CityGML is handled here // need context information to decide @@ -77,8 +77,20 @@ public class TunnelConstructiveElement extends CityObject { throw new IllegalStateException("Tunnel constructive element cannot have a composite surface geometry"); } } + removeEmptyBoundarySurfaces(); + } + + private void removeEmptyBoundarySurfaces() { for (BoundarySurface bs : boundarySurfaceList) { - reCreateBoundarySurface(factory, config, bs); + if (bs.getGeometries().isEmpty()) { + for (AbstractSpaceBoundaryProperty bsp : gmlTunnelElement.getBoundaries()) { + if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { + logger.warn("Found empty boundary surface: {}, removing from feature", bs.getGmlId()); + gmlTunnelElement.getBoundaries().remove(bsp); + break; + } + } + } } } 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 1eeb4e42..ba46f4b2 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 @@ -65,7 +65,7 @@ public class Vegetation extends CityObject { } @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom instanceof ImplicitGeometryHolder) { continue; 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 cea2f4b4..138fc5de 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 @@ -24,7 +24,10 @@ import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.core.AbstractCityObject; +import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; import org.citygml4j.core.model.waterbody.WaterBody; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -44,11 +47,14 @@ public class WaterObject extends CityObject { @Serial private static final long serialVersionUID = -3821060595086337424L; + @Serial + private static final Logger logger = LogManager.getLogger(WaterObject.class); + private WaterBody gmlWater; private final List boundarySurfaceList = new ArrayList<>(); @Override - public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom.getType() == GeometryType.MULTI_SURFACE) { MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); @@ -64,6 +70,21 @@ public class WaterObject extends CityObject { throw new IllegalStateException("Cannot add Solid geometry to WaterBody"); } } + removeEmptyBoundarySurfaces(); + } + + private void removeEmptyBoundarySurfaces() { + for (BoundarySurface bs : boundarySurfaceList) { + if (bs.getGeometries().isEmpty()) { + for (AbstractSpaceBoundaryProperty bsp : gmlWater.getBoundaries()) { + if (bsp.getObject() != null && bsp.getObject() == bs.getGmlObject()) { + logger.warn("Found empty boundary surface: {}, removing from feature", bs.getGmlId()); + gmlWater.getBoundaries().remove(bsp); + break; + } + } + } + } } /** 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 new file mode 100644 index 00000000..615e9157 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/GmlGeometryRebuilder.java @@ -0,0 +1,22 @@ +package de.hft.stuttgart.citydoctor2.utils.visitors; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.datastructure.CityObject; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; +import org.citygml4j.core.util.geometry.GeometryFactory; + +public class GmlGeometryRebuilder extends AbstractCheck { + + private final GeometryFactory factory; + private final ParserConfiguration config; + + public GmlGeometryRebuilder(GeometryFactory factory, ParserConfiguration configuration) { + this.factory = factory; + this.config = configuration; + } + + @Override + public void check(CityObject cityObject) { + cityObject.rebuildGeometries(factory, config); + } +} 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 0358ab8f..9710bfcc 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 @@ -48,11 +48,6 @@ public class CheckableTest { return null; } - @Override - public void clearMetaInformation() { - - } - @Override public void clearAllContainedCheckResults() { } 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 ad095ac6..a37d3d03 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 @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +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; @@ -57,6 +58,9 @@ import de.hft.stuttgart.citydoctor2.utils.Copyable; public class AbstractBuildingTest { + //TODO: Restructure test with new Visitors + + @Test public void testAccept() { AbstractBuilding ab = createAbstractBuilding(); @@ -103,6 +107,7 @@ public class AbstractBuildingTest { BuildingUnit mockBuildingUnit = mock(BuildingUnit.class); Storey mockStorey = mock(Storey.class); BoundarySurface mockBSurface = mock(BoundarySurface.class); + Geometry mockGeometry = mock(Geometry.class); ab.addBuildingRoom(mockRoom); ab.addBuildingInstallation(mockInstallation); @@ -110,6 +115,7 @@ public class AbstractBuildingTest { ab.addBuildingUnit(mockBuildingUnit); ab.addStorey(mockStorey); ab.addBoundarySurface(mockBSurface); + ab.addGeometry(mockGeometry); AbstractCheck c = new AbstractCheck() { }; @@ -121,32 +127,7 @@ public class AbstractBuildingTest { verify(mockBuildingUnit).accept(c); verify(mockStorey).accept(c); verify(mockBSurface).accept(c); - } - - @Test - public void testPrepareForChecking() { - Installation biMock = mock(Installation.class); - BoundarySurface bsMock = mock(BoundarySurface.class); - - AbstractBuilding ab = createAbstractBuilding(); - ab.addBoundarySurface(bsMock); - ab.addBuildingInstallation(biMock); - ab.prepareForChecking(); - Mockito.verify(biMock, Mockito.times(1)).prepareForChecking(); - Mockito.verify(bsMock, Mockito.times(1)).prepareForChecking(); - } - - @Test - public void testClearMetaInformation() { - Installation biMock = mock(Installation.class); - BoundarySurface bsMock = mock(BoundarySurface.class); - - AbstractBuilding ab = createAbstractBuilding(); - ab.addBoundarySurface(bsMock); - ab.addBuildingInstallation(biMock); - ab.clearMetaInformation(); - Mockito.verify(biMock, Mockito.times(1)).clearMetaInformation(); - Mockito.verify(bsMock, Mockito.times(1)).clearMetaInformation(); + verify(mockGeometry).accept(c); } @Test @@ -157,25 +138,6 @@ public class AbstractBuildingTest { assertTrue(ab.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); } - @Test - public void testContainsErrorInBs() { - AbstractBuilding ab = createAbstractBuilding(); - BoundarySurface bsMock = mock(BoundarySurface.class); - ab.addBoundarySurface(bsMock); - assertFalse(ab.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - Mockito.when(bsMock.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)).thenReturn(true); - assertTrue(ab.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - } - - @Test - public void testContainsErrorInBi() { - AbstractBuilding ab = createAbstractBuilding(); - Installation biMock = mock(Installation.class); - ab.addBuildingInstallation(biMock); - assertFalse(ab.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - Mockito.when(biMock.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)).thenReturn(true); - assertTrue(ab.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - } @Test public void testClearAllContainedCheckResults() { @@ -205,39 +167,12 @@ public class AbstractBuildingTest { assertTrue(ab.containsAnyError()); } - @Test - public void testContainsAnyErrorInBs() { - AbstractBuilding ab = createAbstractBuilding(); - BoundarySurface bsMock = mock(BoundarySurface.class); - ab.addBoundarySurface(bsMock); - assertFalse(ab.containsAnyError()); - Mockito.when(bsMock.containsAnyError()).thenReturn(true); - assertTrue(ab.containsAnyError()); - } - - @Test - public void testContainsAnyErrorInBi() { - AbstractBuilding ab = createAbstractBuilding(); - Installation biMock = mock(Installation.class); - ab.addBuildingInstallation(biMock); - assertFalse(ab.containsAnyError()); - Mockito.when(biMock.containsAnyError()).thenReturn(true); - assertTrue(ab.containsAnyError()); - } - @Test public void testCollectContainedErrors() { - Installation biMock = mock(Installation.class); - BoundarySurface bsMock = mock(BoundarySurface.class); - AbstractBuilding ab = createAbstractBuilding(); - ab.addBoundarySurface(bsMock); - ab.addBuildingInstallation(biMock); ab.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); List errors = new ArrayList<>(); ab.collectContainedErrors(errors); - Mockito.verify(biMock, Mockito.times(1)).collectContainedErrors(errors); - Mockito.verify(bsMock, Mockito.times(1)).collectContainedErrors(errors); assertEquals(1, errors.size()); } @@ -264,8 +199,7 @@ public class AbstractBuildingTest { AbstractRing ring = gmlPoly.getExterior().getObject(); var gmlRing = (org.xmlobjects.gml.model.geometry.primitives.LinearRing) ring; List posList = gmlRing.toCoordinateList3D(); - double[] expectedValues = new double[] { 427583.301, 6003502.571, 9.711, 427583.304, 6003502.574, 9.713, - 427583.304, 6003502.574, 4.097, 427583.301, 6003502.571, 4.097, 427583.301, 6003502.571, 9.711 }; + double[] expectedValues = GeometryTestUtils.getExpectedValues(); for (int i = 0; i < posList.size(); i++) { assertEquals(expectedValues[i], posList.get(i), 0.00000001); } @@ -299,7 +233,7 @@ public class AbstractBuildingTest { GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); ab.reCreateGeometries(factory, config); - Mockito.verify(bsMock).reCreateGeometries(factory, config); + Mockito.verify(bsMock).accept(any(GmlGeometryRebuilder.class)); } @Test @@ -332,7 +266,7 @@ public class AbstractBuildingTest { org.citygml4j.core.model.building.AbstractBuilding gmlAb = new org.citygml4j.core.model.building.Building(); ab.setCityGmlBuilding(gmlAb); ab.reCreateGeometries(factory, config); - Mockito.verify(biMock).reCreateGeometries(factory, config); + Mockito.verify(biMock).accept(any(GmlGeometryRebuilder.class)); } @Test 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 new file mode 100644 index 00000000..aa68443f --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnelTest.java @@ -0,0 +1,115 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.utils.Copyable; +import org.citygml4j.core.visitor.ObjectVisitor; +import org.junit.Before; +import org.junit.Test; +import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; +import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class AbstractTunnelTest { + + // TODO: Implement recreateGeometriesTest + + AbstractTunnel at; + + @Before + public void setUp() { + at = new AbstractTunnel() { + @Override + public CityObject getTopLevelCityObject() { + return null; + } + + @Override + public Copyable createCopyInstance() { + return null; + } + }; + } + + @Test + public void testVisitorPropagation() { + Installation mockInstallation = mock(Installation.class); + TunnelHollow mockTunnelHollow = mock(TunnelHollow.class); + TunnelFurniture mockTunnelFurniture = mock(TunnelFurniture.class); + TunnelPart mockTunnelPart = mock(TunnelPart.class); + TunnelConstructiveElement mockTunnelConstructiveElement = mock(TunnelConstructiveElement.class); + BoundarySurface mockBoundarySurface = mock(BoundarySurface.class); + Geometry mockGeometry = mock(Geometry.class); + + at.addTunnelInstallation(mockInstallation); + at.addTunnelHollow(mockTunnelHollow); + at.addTunnelFurniture(mockTunnelFurniture); + at.addTunnelPart(mockTunnelPart); + at.addTunnelConstructiveElement(mockTunnelConstructiveElement); + at.addBoundarySurface(mockBoundarySurface); + at.addGeometry(mockGeometry); + + AbstractCheck c = new AbstractCheck() { + }; + at.accept(c); + + verify(mockInstallation).accept(c); + verify(mockTunnelHollow).accept(c); + verify(mockTunnelFurniture).accept(c); + verify(mockTunnelPart).accept(c); + verify(mockTunnelConstructiveElement).accept(c); + verify(mockBoundarySurface).accept(c); + verify(mockGeometry).accept(c); + } + + @Test + public void testUnsetGeometries() { + org.citygml4j.core.model.tunnel.AbstractTunnel gmlAt = new org.citygml4j.core.model.tunnel.AbstractTunnel() { + @Override + public void accept(ObjectVisitor visitor) { + + } + }; + + at.setGmlObject(gmlAt); + + gmlAt.setLod0MultiCurve(new MultiCurveProperty()); + gmlAt.setLod2MultiCurve(new MultiCurveProperty()); + gmlAt.setLod3MultiCurve(new MultiCurveProperty()); + gmlAt.getDeprecatedProperties().setLod4MultiCurve(new MultiCurveProperty()); + gmlAt.setLod0MultiSurface(new MultiSurfaceProperty()); + gmlAt.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty()); + gmlAt.setLod2MultiSurface(new MultiSurfaceProperty()); + gmlAt.setLod3MultiSurface(new MultiSurfaceProperty()); + gmlAt.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty()); + gmlAt.setLod1Solid(new SolidProperty()); + gmlAt.setLod2Solid(new SolidProperty()); + gmlAt.setLod3Solid(new SolidProperty()); + gmlAt.getDeprecatedProperties().setLod4Solid(new SolidProperty()); + + at.clearGmlGeometries(); + + assertNull(gmlAt.getLod0MultiCurve()); + assertNull(gmlAt.getLod2MultiCurve()); + assertNull(gmlAt.getLod3MultiCurve()); + assertNull(gmlAt.getDeprecatedProperties().getLod4MultiCurve()); + assertNull(gmlAt.getLod0MultiSurface()); + assertNull(gmlAt.getDeprecatedProperties().getLod1MultiSurface()); + assertNull(gmlAt.getLod2MultiSurface()); + assertNull(gmlAt.getLod3MultiSurface()); + assertNull(gmlAt.getDeprecatedProperties().getLod4MultiSurface()); + assertNull(gmlAt.getLod1Solid()); + assertNull(gmlAt.getLod2Solid()); + assertNull(gmlAt.getLod3Solid()); + assertNull(gmlAt.getDeprecatedProperties().getLod4Solid()); + } + + @Test + public void testReCreateGeometry() { + + } + +} \ No newline at end of file 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 942e14c4..a44b9f26 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 @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder; import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor; import org.citygml4j.core.model.construction.AbstractConstructionSurface; import org.citygml4j.core.model.construction.WallSurface; @@ -47,6 +48,8 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; public class BoundarySurfaceTest { + //Todo: Check this class for rework potential with the new Visitors + @Test public void testAccept() { BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null); @@ -86,19 +89,11 @@ public class BoundarySurfaceTest { @Test public void testPrepareForChecking() { BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null); - Opening oMock = Mockito.mock(Opening.class); - bs.addOpening(oMock); + Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2); + Geometry spyGeom = Mockito.spy(geom); + bs.addGeometry(spyGeom); bs.prepareForChecking(); - Mockito.verify(oMock).prepareForChecking(); - } - - @Test - public void testClearMetaInformation() { - BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null); - Opening oMock = Mockito.mock(Opening.class); - bs.addOpening(oMock); - bs.clearMetaInformation(); - Mockito.verify(oMock).clearMetaInformation(); + Mockito.verify(spyGeom).updateEdgesAndVertices(); } @Test @@ -139,36 +134,22 @@ public class BoundarySurfaceTest { @Test public void testContainsAnyError() { BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null); - Opening oMock = Mockito.mock(Opening.class); - bs.addOpening(oMock); assertFalse(bs.containsAnyError()); - Mockito.verify(oMock).containsAnyError(); bs.addCheckResult( new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, Mockito.mock(CheckError.class))); assertTrue(bs.containsAnyError()); } - @Test - public void testContainsAnyErrorInOpeing() { - BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null); - Opening oMock = Mockito.mock(Opening.class); - bs.addOpening(oMock); - Mockito.when(oMock.containsAnyError()).thenReturn(true); - assertTrue(bs.containsAnyError()); - } @Test public void testCollectContainedErrors() { BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null); - Opening oMock = Mockito.mock(Opening.class); bs.addCheckResult( new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, Mockito.mock(CheckError.class))); - bs.addOpening(oMock); - List errors = new ArrayList<>(); bs.collectContainedErrors(errors); assertEquals(1, errors.size()); - Mockito.verify(oMock).collectContainedErrors(errors); + ; } @Test @@ -322,7 +303,7 @@ public class BoundarySurfaceTest { GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); bs.reCreateGeometries(factory, config); - Mockito.verify(oMock).reCreateGeometries(factory, config); + Mockito.verify(oMock).accept(any(GmlGeometryRebuilder.class)); } @Test 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 53200fed..0eeceff7 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 @@ -31,9 +31,11 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.concurrent.atomic.AtomicInteger; +import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder; import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor; import org.citygml4j.core.model.bridge.AbstractBridge; import org.citygml4j.core.model.bridge.Bridge; +import org.citygml4j.core.model.core.AbstractThematicSurface; import org.citygml4j.core.model.deprecated.bridge.DeprecatedPropertiesOfAbstractBridge; import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; @@ -45,9 +47,12 @@ import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.ResultStatus; import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject.BridgeType; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; +import org.mockito.Mockito; public class BridgeObjectTest { + //TODO: Rework this class with the new Visitors + @Test public void testAccept() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); @@ -80,19 +85,13 @@ public class BridgeObjectTest { @Test public void testPrepareForChecking() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bsMock = mock(BoundarySurface.class); - bo.addBoundarySurface(bsMock); + Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2); + Geometry spyGeom = Mockito.spy(geom); + + bo.addGeometry(spyGeom); bo.prepareForChecking(); - verify(bsMock).prepareForChecking(); - } - @Test - public void testClearMetaInformation() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bsMock = mock(BoundarySurface.class); - bo.addBoundarySurface(bsMock); - bo.clearMetaInformation(); - verify(bsMock).clearMetaInformation(); + verify(spyGeom).updateEdgesAndVertices(); } @Test @@ -106,10 +105,10 @@ public class BridgeObjectTest { @Test public void testContainsError2() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bsMock = mock(BoundarySurface.class); - bo.addBoundarySurface(bsMock); + BoundarySurface bs = new BoundarySurface(mock(AbstractThematicSurface.class)); + bo.addBoundarySurface(bs); assertFalse(bo.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - when(bsMock.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)).thenReturn(true); + bs.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(bo.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); } @@ -125,12 +124,13 @@ public class BridgeObjectTest { @Test public void testContainsAnyError() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bsMock = mock(BoundarySurface.class); - bo.addBoundarySurface(bsMock); + BoundarySurface bs = new BoundarySurface(mock(AbstractThematicSurface.class)); + BoundarySurface spyBs = Mockito.spy(bs); + bo.addBoundarySurface(spyBs); bo.containsAnyError(); - verify(bsMock).containsAnyError(); - - when(bsMock.containsAnyError()).thenReturn(true); + verify(spyBs).hasAnyError(); + + bs.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(bo.containsAnyError()); BridgeObject bo2 = new BridgeObject(mock(AbstractBridge.class)); @@ -141,11 +141,13 @@ public class BridgeObjectTest { @Test public void testCollectContainedErrors() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bsMock = mock(BoundarySurface.class); - bo.addBoundarySurface(bsMock); + BoundarySurface bs = new BoundarySurface(mock(AbstractThematicSurface.class)); + BoundarySurface spyBs = Mockito.spy(bs); + bo.addBoundarySurface(spyBs); + ArrayList errors = new ArrayList<>(); bo.collectContainedErrors(errors); - verify(bsMock).collectContainedErrors(errors); + verify(spyBs).collectErrors(errors); } @Test @@ -156,7 +158,7 @@ public class BridgeObjectTest { GeometryFactory factoryMock = mock(GeometryFactory.class); ParserConfiguration configMock = mock(ParserConfiguration.class); bo.reCreateGeometries(factoryMock, configMock); - verify(bsMock).reCreateGeometries(factoryMock, configMock); + verify(bsMock).accept(any(GmlGeometryRebuilder.class)); } @Test diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java new file mode 100644 index 00000000..f4296711 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java @@ -0,0 +1,26 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class CityFurnitureTest { + + //TODO: Implement testcases + + @Test + public void accept() { + } + + @Test + public void unsetGmlGeometries() { + } + + @Test + public void getTopLevelCityObject() { + } + + @Test + public void reCreateGeometries() { + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..bb63bb46 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityObjectTest.java @@ -0,0 +1,94 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; +import de.hft.stuttgart.citydoctor2.utils.Copyable; +import org.citygml4j.core.model.core.AbstractCityObject; +import org.citygml4j.core.util.geometry.GeometryFactory; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class CityObjectTest { + + //TODO: Look for rework potential with visitors + + CityObject co; + + @Test + public void testVisitorPropagation() { + Geometry mockGeometry = mock(Geometry.class); + co.addGeometry(mockGeometry); + + AbstractCheck check = new AbstractCheck() { + }; + + co.accept(check); + + verify(mockGeometry).accept(check); + } + + + @Test + public void testClearGmlGeometries() { + } + + + @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); + + assertNull(co.getHighestLodGeometry()); + + co.addGeometry(geometryLod1); + assertEquals(geometryLod1, co.getHighestLodGeometry()); + + co.addGeometry(geometryLod2); + assertEquals(geometryLod2, co.getHighestLodGeometry()); + + co.addGeometry(geometryLod3); + + assertEquals(geometryLod3, co.getHighestLodGeometry()); + } + + @Before + public void setUp() { + co = new CityObject() { + @Override + public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { + + } + + @Override + public AbstractCityObject getGmlObject() { + return null; + } + + @Override + public void unsetGmlGeometries() { + + } + + @Override + public CityObject getTopLevelCityObject() { + return null; + } + + @Override + public FeatureType getFeatureType() { + return null; + } + + @Override + public Copyable createCopyInstance() { + return null; + } + }; + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..78d01667 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/GenericCityObjectTest.java @@ -0,0 +1,71 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import org.citygml4j.core.model.generics.GenericOccupiedSpace; +import org.junit.Test; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; +import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class GenericCityObjectTest { + + //TODO: Implement RecreateGeometries testcase + + @Test + public void testVisitorPropagation() { + GenericCityObject gco = new GenericCityObject(); + BoundarySurface mockSurface = mock(BoundarySurface.class); + Geometry mockGeometry = mock(Geometry.class); + + gco.addBoundarySurface(mockSurface); + gco.addGeometry(mockGeometry); + + AbstractCheck c = new AbstractCheck() { + }; + gco.accept(c); + + verify(mockSurface).accept(c); + verify(mockGeometry).accept(c); + + } + + @Test + public void testUnsetGmlGeometries() { + GenericCityObject gco = new GenericCityObject(); + GenericOccupiedSpace gmlGos = new GenericOccupiedSpace(); + gco.setGmlObject(gmlGos); + + gmlGos.setLod0MultiSurface(new MultiSurfaceProperty()); + gmlGos.setLod2MultiSurface(new MultiSurfaceProperty()); + gmlGos.setLod3MultiSurface(new MultiSurfaceProperty()); + gmlGos.setLod1Solid(new SolidProperty()); + gmlGos.setLod2Solid(new SolidProperty()); + gmlGos.setLod3Solid(new SolidProperty()); + gmlGos.getDeprecatedProperties().setLod1Geometry(new MultiSurfaceProperty()); + gmlGos.getDeprecatedProperties().setLod2Geometry(new MultiSurfaceProperty()); + gmlGos.getDeprecatedProperties().setLod3Geometry(new MultiSurfaceProperty()); + gmlGos.getDeprecatedProperties().setLod4Geometry(new MultiSurfaceProperty()); + + gco.unsetGmlGeometries(); + + assertNull(gmlGos.getLod0MultiSurface()); + assertNull(gmlGos.getLod2MultiSurface()); + assertNull(gmlGos.getLod3MultiSurface()); + assertNull(gmlGos.getLod1Solid()); + assertNull(gmlGos.getLod2Solid()); + assertNull(gmlGos.getLod3Solid()); + assertNull(gmlGos.getDeprecatedProperties().getLod1Geometry()); + assertNull(gmlGos.getDeprecatedProperties().getLod2Geometry()); + assertNull(gmlGos.getDeprecatedProperties().getLod3Geometry()); + assertNull(gmlGos.getDeprecatedProperties().getLod4Geometry()); + } + + @Test + public void testReCreateGmlGeometries() { + GenericCityObject gco = new GenericCityObject(); + } + +} \ No newline at end of file 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 6dc06fde..be25c2c7 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.ResultStatus; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; +import org.mockito.Mockito; /** * @@ -292,11 +293,15 @@ public class GeometryTest { 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)); - Polygon p = mock(Polygon.class); - geom.addPolygon(p); + + Polygon p = new ConcretePolygon(); + p.setExteriorRing(mock(LinearRing.class)); + Polygon spyPoly = Mockito.spy(p); + geom.addPolygon(spyPoly); + List errors = new ArrayList<>(); geom.collectContainedErrors(errors); - verify(p).collectContainedErrors(errors); + verify(spyPoly).collectErrors(errors); assertEquals(1, errors.size()); } @@ -306,12 +311,16 @@ public class GeometryTest { assertFalse(geom.containsAnyError()); geom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(geom.containsAnyError()); - Polygon p = mock(Polygon.class); - geom.addPolygon(p); + + Polygon p = new ConcretePolygon(); + p.setExteriorRing(mock(LinearRing.class)); + Polygon spyPoly = Mockito.spy(p); + geom.addPolygon(spyPoly); + geom.clearAllContainedCheckResults(); assertFalse(geom.containsAnyError()); - verify(p).containsAnyError(); - when(p.containsAnyError()).thenReturn(true); + verify(spyPoly).hasAnyError(); + spyPoly.addCheckResult((new CheckResult(CheckId.C_GE_R_NOT_CLOSED, ResultStatus.ERROR, mock(CheckError.class)))); assertTrue(geom.containsAnyError()); } -- GitLab From f4a005d3d17a006d7711ce2b3b3c234efe636912 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 23 Apr 2025 14:41:59 +0200 Subject: [PATCH 43/51] Refactor: Add ClearCheckResultsVisitor --- .../citydoctor2/check/Checkable.java | 5 +++- .../datastructure/AbstractBuilding.java | 23 ------------------- .../AbstractBuildingSubdivision.java | 18 --------------- .../datastructure/AbstractFurniture.java | 8 ------- .../datastructure/AbstractRoom.java | 11 --------- .../datastructure/AbstractTunnel.java | 23 ------------------- .../datastructure/BoundarySurface.java | 8 ------- .../BridgeConstructiveElement.java | 8 ------- .../datastructure/BridgeObject.java | 23 ------------------- .../citydoctor2/datastructure/Building.java | 8 ------- .../datastructure/BuildingUnit.java | 7 ------ .../citydoctor2/datastructure/CityObject.java | 8 ------- .../datastructure/ConcretePolygon.java | 19 --------------- .../datastructure/GenericCityObject.java | 8 ------- .../citydoctor2/datastructure/Geometry.java | 8 ------- .../datastructure/ImplicitGeometryHolder.java | 6 ----- .../datastructure/Installation.java | 8 ------- .../citydoctor2/datastructure/LinearRing.java | 5 ---- .../datastructure/LinkedPolygon.java | 5 ---- .../citydoctor2/datastructure/Opening.java | 5 ---- .../datastructure/ReliefObject.java | 6 ----- .../citydoctor2/datastructure/Storey.java | 8 ------- .../TopLevelTransportFeature.java | 11 --------- .../datastructure/TrafficSpaceObject.java | 8 ------- .../datastructure/TransportationSpace.java | 12 ---------- .../citydoctor2/datastructure/Tunnel.java | 8 ------- .../TunnelConstructiveElement.java | 8 ------- .../visitors/ClearCheckResultsVisitor.java | 13 +++++++++++ .../citydoctor2/check/CheckableTest.java | 4 ---- .../datastructure/AbstractBuildingTest.java | 5 ++-- .../datastructure/BoundarySurfaceTest.java | 3 ++- .../datastructure/BridgeObjectTest.java | 3 ++- .../datastructure/GeometryTest.java | 4 +++- .../TransportationObjectTest.java | 22 ++++++++++-------- 34 files changed, 39 insertions(+), 290 deletions(-) create mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearCheckResultsVisitor.java 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 d6b27ea5..e7abe717 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,6 +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.ClearMetaInformationVisitor; import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsAnyErrorVisitor; import de.hft.stuttgart.citydoctor2.utils.visitors.ContainsErrorVisitor; @@ -227,7 +228,9 @@ public abstract class Checkable implements Serializable { /** * Removes all errors from this instance and all contained checkables. */ - public abstract void clearAllContainedCheckResults(); + public final void clearAllContainedCheckResults() { + this.accept(new ClearCheckResultsVisitor()); + } /** * 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 f03700c5..d5c92e2c 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 @@ -187,29 +187,6 @@ public abstract class AbstractBuilding extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (Installation bi : buildingInstallations) { - bi.clearAllContainedCheckResults(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearAllContainedCheckResults(); - } - for (BuildingRoom br : buildingRooms) { - br.clearAllContainedCheckResults(); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.clearAllContainedCheckResults(); - } - for (Storey storey : buildingStoreys) { - storey.clearAllContainedCheckResults(); - } - for (BuildingUnit bu : buildingUnits) { - bu.clearAllContainedCheckResults(); - } - } - void setCityGmlBuilding(org.citygml4j.core.model.building.AbstractBuilding ab) { this.ab = ab; } 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 486d7ddc..b39fb785 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 @@ -157,24 +157,6 @@ public abstract class AbstractBuildingSubdivision extends CityObject { } } - - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (Installation bi : buildingInstallations) { - bi.clearAllContainedCheckResults(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearAllContainedCheckResults(); - } - for (BuildingRoom br : buildingRooms) { - br.clearAllContainedCheckResults(); - } - for (BuildingRoomFurniture bfr : buildingRoomFurnitureList) { - bfr.clearAllContainedCheckResults(); - } - } - void setCityGmlBuilding(org.citygml4j.core.model.building.AbstractBuildingSubdivision abs) { this.abs = abs; } 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 16cce914..a67b6da8 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 @@ -42,14 +42,6 @@ public abstract class AbstractFurniture extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.clearAllContainedCheckResults(); - } - } - @Override public org.citygml4j.core.model.construction.AbstractFurniture getGmlObject() { return af; 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 f194c163..5dfede58 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 @@ -48,17 +48,6 @@ public abstract class AbstractRoom extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (Installation roomInstallation : roomInstallations) { - roomInstallation.clearAllContainedCheckResults(); - } - for (BoundarySurface boundarySurface : boundarySurfaceList) { - boundarySurface.clearAllContainedCheckResults(); - } - } - @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { 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 fc03e319..dd9178b6 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 @@ -169,29 +169,6 @@ public abstract class AbstractTunnel extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (Installation bi : tunnelInstallations) { - bi.clearAllContainedCheckResults(); - } - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearAllContainedCheckResults(); - } - for (TunnelHollow th : tunnelHollows) { - th.clearAllContainedCheckResults(); - } - for (TunnelFurniture tfr : tunnelFurnitureList) { - tfr.clearAllContainedCheckResults(); - } - for (TunnelConstructiveElement te : tunnelConstructiveElements) { - te.clearAllContainedCheckResults(); - } - for (TunnelPart tp : tunnelParts) { - tp.clearAllContainedCheckResults(); - } - } - void setCityGmlBuilding(org.citygml4j.core.model.tunnel.AbstractTunnel at) { this.at = at; 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 cf50e812..4954d49a 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 @@ -143,14 +143,6 @@ public class BoundarySurface extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (Opening o : openings) { - o.clearAllContainedCheckResults(); - } - } - @Override public void accept(Check c) { super.accept(c); 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 1b755626..407c82d3 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 @@ -113,14 +113,6 @@ public class BridgeConstructiveElement extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearAllContainedCheckResults(); - } - } - private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) { if (bs.getGeometries().isEmpty()) { for (AbstractSpaceBoundaryProperty bsp : gmlBridgeElement.getBoundaries()) { 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 ba884242..998a5e48 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 @@ -191,29 +191,6 @@ public class BridgeObject extends CityObject { furniture.setParent(this); } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (BoundarySurface bs : boundarySurfaces) { - bs.clearAllContainedCheckResults(); - } - for (Installation bi : bridgeInstallations) { - bi.clearAllContainedCheckResults(); - } - for (BridgeObject part : parts) { - part.clearAllContainedCheckResults(); - } - for (BridgeConstructiveElement ele : elements) { - ele.clearAllContainedCheckResults(); - } - for (BridgeRoom br : bridgeRooms) { - br.clearAllContainedCheckResults(); - } - for (BridgeRoomFurniture bri : bridgeFurniture) { - bri.clearAllContainedCheckResults(); - } - } - @Override public void accept(Check c) { super.accept(c); 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 21e22670..90a56c70 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 @@ -60,14 +60,6 @@ public class Building extends AbstractBuilding { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (BuildingPart bp : buildingParts) { - bp.clearAllContainedCheckResults(); - } - } - public void addBuildingPart(BuildingPart buildingPart) { buildingParts.add(buildingPart); } 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 f0c4269b..30e4b7ef 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 @@ -41,13 +41,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (Storey storey : storeys) { - storey.clearAllContainedCheckResults(); - } - } @Override public void collectInstances(CopyHandler handler) { 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 d9499a47..b36619d8 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 @@ -154,14 +154,6 @@ public abstract class CityObject extends GmlElement { } } - @Override - public void clearAllContainedCheckResults() { - super.clearCheckResults(); - for (Geometry geom : geometryList) { - geom.clearAllContainedCheckResults(); - } - } - public Geometry getGeometry(GeometryType type, Lod lod) { for (Geometry geom : geometryList) { if (geom.getType() == type && geom.getLod() == lod) { 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 73ebf1b2..7833f540 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 @@ -214,25 +214,6 @@ public class ConcretePolygon extends Polygon { return exterior.isRingConnectedViaPoint(other.getExteriorRing()); } - /* - * (non-Javadoc) - * - * @see de.hft.stuttgart.citydoctor2.datastructure.Polygon# - * clearAllContainedCheckResults() - */ - @Override - public void clearAllContainedCheckResults() { - super.clearCheckResults(); - if (exterior != null) { - exterior.clearAllContainedCheckResults(); - } - if (innerRings != null) { - for (LinearRing lr : innerRings) { - lr.clearAllContainedCheckResults(); - } - } - } - /* * (non-Javadoc) * 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 cea8bc46..226e6ea6 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 @@ -118,14 +118,6 @@ public class GenericCityObject extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearAllContainedCheckResults(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 b92513d4..badef8ba 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 @@ -207,14 +207,6 @@ public class Geometry extends GmlElement { } - @Override - public void clearAllContainedCheckResults() { - super.clearCheckResults(); - for (Polygon p : polygons) { - p.clearAllContainedCheckResults(); - } - } - @Override public void accept(Check c) { super.accept(c); 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 f223f439..49e07c81 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 @@ -62,12 +62,6 @@ public class ImplicitGeometryHolder extends Geometry { prototypeGeometry.accept(c); } - - @Override - public void clearAllContainedCheckResults() { - prototypeGeometry.clearAllContainedCheckResults(); - } - @Override public boolean isValidated() { return prototypeGeometry.isValidated(); 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 dbf8cd0d..d177b58a 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 @@ -142,14 +142,6 @@ public class Installation extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (BoundarySurface bs : boundarySurfaces) { - bs.clearAllContainedCheckResults(); - } - } - public void setParent(CityObject parent) { this.parent = parent; } 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 af9b0a5f..a3978662 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 @@ -235,11 +235,6 @@ public class LinearRing extends GmlElement { } } - @Override - public void clearAllContainedCheckResults() { - super.clearCheckResults(); - } - public void setParent(Polygon polygon) { parent = polygon; } 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 29aa9c09..f08c9b3e 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 @@ -237,11 +237,6 @@ public class LinkedPolygon extends Polygon { poly.anonymize(); } - @Override - public void clearAllContainedCheckResults() { - poly.clearAllContainedCheckResults(); - } - @Override public ConcretePolygon getOriginal() { return poly; 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 651d529b..01817971 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 @@ -122,11 +122,6 @@ public class Opening extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearCheckResults(); - } - public void unsetGmlGeometries() { ao.setLod0MultiSurface(null); ao.setLod1MultiSurface(null); 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 8f850b29..8d530b3a 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 @@ -74,12 +74,6 @@ public class ReliefObject extends CityObject { return new ReliefObject(feature); } - @Override - public void clearAllContainedCheckResults() { - for (TinObject component : components) { - component.clearAllContainedCheckResults(); - } - } @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { 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 12ca8f16..3eaefb03 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 @@ -40,14 +40,6 @@ public class Storey extends AbstractBuildingSubdivision { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (BuildingUnit buildingUnit : buildingUnits) { - buildingUnit.clearAllContainedCheckResults(); - } - } - @Override public void collectInstances(CopyHandler handler) { super.collectInstances(handler); 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 e28f385f..961ffc7d 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 @@ -80,17 +80,6 @@ public class TopLevelTransportFeature extends TransportationSpace { return intersections; } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (TransportSection section : sections) { - section.clearAllContainedCheckResults(); - } - for (TransportSection section : intersections) { - section.clearAllContainedCheckResults(); - } - } - @Override public void accept(Check c) { super.accept(c); 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 cdb2a420..5746328c 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 @@ -69,14 +69,6 @@ public class TrafficSpaceObject extends TransportationObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (TrafficAreaObject tao : trafficAreas) { - tao.clearAllContainedCheckResults(); - } - } - @Override public void accept(Check c) { super.accept(c); 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 df412c39..99b9404b 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 @@ -91,18 +91,6 @@ public abstract class TransportationSpace extends TransportationObject { } } - - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (TrafficSpaceObject to : trafficSpaces) { - to.clearAllContainedCheckResults(); - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - to.clearAllContainedCheckResults(); - } - } - @Override public void accept(Check c) { super.accept(c); 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 705e1359..6d124247 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 @@ -42,14 +42,6 @@ public class Tunnel extends AbstractTunnel { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (TunnelPart tp : tunnelParts) { - tp.clearAllContainedCheckResults(); - } - } - public void addTunnelPart(TunnelPart tunnelPart) { tunnelParts.add(tunnelPart); } 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 f15717b4..0c597ed5 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 @@ -105,14 +105,6 @@ public class TunnelConstructiveElement extends CityObject { } } - @Override - public void clearAllContainedCheckResults() { - super.clearAllContainedCheckResults(); - for (BoundarySurface bs : boundarySurfaceList) { - bs.clearAllContainedCheckResults(); - } - } - private void reCreateBoundarySurface(GeometryFactory factory, ParserConfiguration config, BoundarySurface bs) { if (bs.getGeometries().isEmpty()) { for (AbstractSpaceBoundaryProperty bsp : gmlTunnelElement.getBoundaries()) { 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/ClearCheckResultsVisitor.java new file mode 100644 index 00000000..01bbb277 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/visitors/ClearCheckResultsVisitor.java @@ -0,0 +1,13 @@ +package de.hft.stuttgart.citydoctor2.utils.visitors; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.check.Checkable; + +public class ClearCheckResultsVisitor extends AbstractCheck { + + @Override + public void check(Checkable checkable) { + checkable.clearCheckResults(); + } + +} 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 9710bfcc..715bec55 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 @@ -48,10 +48,6 @@ public class CheckableTest { return null; } - @Override - public void clearAllContainedCheckResults() { - } - @Override public Class getCheckClass() { return Building.class; 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 a37d3d03..4671f6c2 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 @@ -32,6 +32,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; @@ -151,8 +152,8 @@ public class AbstractBuildingTest { assertEquals(1, ab.getAllCheckResults().size()); ab.clearAllContainedCheckResults(); - Mockito.verify(biMock, Mockito.times(1)).clearAllContainedCheckResults(); - Mockito.verify(bsMock, Mockito.times(1)).clearAllContainedCheckResults(); + Mockito.verify(biMock).accept(any(ClearCheckResultsVisitor.class)); + Mockito.verify(bsMock).accept(any(ClearCheckResultsVisitor.class)); assertTrue(ab.getAllCheckResults().isEmpty()); } 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 a44b9f26..da2976b9 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 @@ -29,6 +29,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.AbstractConstructionSurface; @@ -127,7 +128,7 @@ public class BoundarySurfaceTest { assertFalse(bs.getAllCheckResults().isEmpty()); bs.addOpening(oMock); bs.clearAllContainedCheckResults(); - Mockito.verify(oMock).clearAllContainedCheckResults(); + Mockito.verify(oMock).accept(any(ClearCheckResultsVisitor.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 0eeceff7..6ff98de1 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 @@ -31,6 +31,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; 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.bridge.AbstractBridge; @@ -118,7 +119,7 @@ public class BridgeObjectTest { BoundarySurface bsMock = mock(BoundarySurface.class); bo.addBoundarySurface(bsMock); bo.clearAllContainedCheckResults(); - verify(bsMock).clearAllContainedCheckResults(); + verify(bsMock).accept(any(ClearCheckResultsVisitor.class)); } @Test 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 be25c2c7..4e713494 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 @@ -24,6 +24,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; 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 static org.mockito.Mockito.when; @@ -31,6 +32,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; +import de.hft.stuttgart.citydoctor2.utils.visitors.ClearCheckResultsVisitor; import org.citygml4j.core.model.construction.AbstractConstructionSurface; import org.citygml4j.core.model.construction.WallSurface; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -283,7 +285,7 @@ public class GeometryTest { Polygon p = mock(Polygon.class); geom.addPolygon(p); geom.clearAllContainedCheckResults(); - verify(p).clearAllContainedCheckResults(); + verify(p).accept(any(ClearCheckResultsVisitor.class)); assertFalse(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); } diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java index b558cfe8..5413fbe9 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java @@ -31,6 +31,8 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; +import de.hft.stuttgart.citydoctor2.utils.visitors.ClearCheckResultsVisitor; +import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder; import org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractCityObject; import org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractThematicSurface; import org.citygml4j.core.model.deprecated.transportation.DeprecatedPropertiesOfAbstractTransportationSpace; @@ -106,10 +108,10 @@ public class TransportationObjectTest { top.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(roadMock).setLod2MultiSurface(any()); - verify(sectionMock).reCreateGeometries(any(), any()); - verify(intersectionMock).reCreateGeometries(any(), any()); - verify(tsMock).reCreateGeometries(any(), any()); - verify(auxTsMock).reCreateGeometries(any(), any()); + verify(sectionMock).accept(any(GmlGeometryRebuilder.class)); + verify(intersectionMock).accept(any(GmlGeometryRebuilder.class)); + verify(tsMock).accept(any(GmlGeometryRebuilder.class)); + verify(auxTsMock).accept(any(GmlGeometryRebuilder.class)); } @Test @@ -126,7 +128,7 @@ public class TransportationObjectTest { tso.reCreateGeometries(factory, mock(ParserConfiguration.class)); verify(tsMock).setLod2MultiSurface(any()); - verify(taoMock).reCreateGeometries(any(), any()); + verify(taoMock).accept(any(GmlGeometryRebuilder.class)); } @Test @@ -359,10 +361,10 @@ public class TransportationObjectTest { top.clearAllContainedCheckResults(); assertFalse(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - verify(sectionMock).clearAllContainedCheckResults(); - verify(intersectionMock).clearAllContainedCheckResults(); - verify(tsMock).clearAllContainedCheckResults(); - verify(auxTsMock).clearAllContainedCheckResults(); + verify(sectionMock).accept(any(ClearCheckResultsVisitor.class)); + verify(intersectionMock).accept(any(ClearCheckResultsVisitor.class)); + verify(tsMock).accept(any(ClearCheckResultsVisitor.class)); + verify(auxTsMock).accept(any(ClearCheckResultsVisitor.class)); } @Test @@ -380,7 +382,7 @@ public class TransportationObjectTest { tso.clearAllContainedCheckResults(); assertFalse(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - verify(taMock).clearAllContainedCheckResults(); + verify(taMock).accept(any(ClearCheckResultsVisitor.class)); } @Test -- GitLab From 21d23e3bba6b53556505edb543ae057e6e8dec0b Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 23 Apr 2025 14:51:44 +0200 Subject: [PATCH 44/51] Test: Update Testcases for Visitor implementations --- .../datastructure/AbstractBuilding.java | 3 + .../datastructure/AbstractRoom.java | 3 + .../datastructure/AbstractTunnel.java | 10 +- .../datastructure/GenericCityObject.java | 5 + .../citydoctor2/datastructure/Vegetation.java | 18 +++- .../datastructure/WaterObject.java | 10 ++ .../datastructure/AbstractRoomTest.java | 12 +++ .../datastructure/GeometryTestUtils.java | 9 +- .../datastructure/LandObjectTest.java | 66 +++++++++++++ .../TransportationObjectTest.java | 61 +----------- .../datastructure/VegetationTest.java | 95 +++++++++++++++++++ .../citydoctor2/datastructure/WaterTest.java | 74 +++++++++++++++ .../healing/HealHoleOutsideErrorTest.java | 10 +- .../healer/genetic/NonPlanarGenetic.java | 4 +- 14 files changed, 312 insertions(+), 68 deletions(-) create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandObjectTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.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 d5c92e2c..67da70ad 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 @@ -87,6 +87,9 @@ public abstract class AbstractBuilding extends CityObject { ab.getDeprecatedProperties().setLod1MultiSurface(null); ab.getDeprecatedProperties().setLod4MultiSurface(null); ab.getDeprecatedProperties().setLod4Solid(null); + ab.setLod0MultiCurve(null); + ab.setLod2MultiCurve(null); + ab.setLod3MultiCurve(null); } @Override 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 5dfede58..fb661ab7 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 @@ -106,6 +106,9 @@ public abstract class AbstractRoom extends CityObject { cgmlRoom.setLod1Solid(null); cgmlRoom.setLod2Solid(null); cgmlRoom.setLod3Solid(null); + cgmlRoom.setLod0MultiCurve(null); + cgmlRoom.setLod2MultiCurve(null); + cgmlRoom.setLod3MultiCurve(null); } @Override 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 dd9178b6..ba05e34a 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 @@ -61,14 +61,20 @@ public abstract class AbstractTunnel extends CityObject { @Override public void unsetGmlGeometries() { + at.setLod0MultiCurve(null); + at.setLod2MultiCurve(null); + at.setLod3MultiCurve(null); + at.getDeprecatedProperties().setLod4MultiCurve(null); at.setLod1Solid(null); at.setLod2Solid(null); at.setLod3Solid(null); + at.getDeprecatedProperties().setLod4Solid(null); + at.setLod0MultiSurface(null); + at.getDeprecatedProperties().setLod1MultiSurface(null); at.setLod2MultiSurface(null); at.setLod3MultiSurface(null); - at.getDeprecatedProperties().setLod1MultiSurface(null); at.getDeprecatedProperties().setLod4MultiSurface(null); - at.getDeprecatedProperties().setLod4Solid(null); + } @Override 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 226e6ea6..2e4ae131 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 @@ -158,8 +158,13 @@ public class GenericCityObject extends CityObject { cgmlGos.setLod1Solid(null); cgmlGos.setLod2Solid(null); cgmlGos.setLod3Solid(null); + cgmlGos.setLod0MultiSurface(null); cgmlGos.setLod2MultiSurface(null); cgmlGos.setLod3MultiSurface(null); + cgmlGos.getDeprecatedProperties().setLod1Geometry(null); + cgmlGos.getDeprecatedProperties().setLod2Geometry(null); + cgmlGos.getDeprecatedProperties().setLod3Geometry(null); + cgmlGos.getDeprecatedProperties().setLod4Geometry(null); } @Override 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 ba46f4b2..945eaea6 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 @@ -189,18 +189,32 @@ public class Vegetation extends CityObject { @Override public void unsetGmlGeometries() { + citygmlVegetation.setLod0MultiSurface(null); + citygmlVegetation.setLod2MultiSurface(null); + citygmlVegetation.setLod3MultiSurface(null); + citygmlVegetation.setLod1Solid(null); + citygmlVegetation.setLod2Solid(null); + citygmlVegetation.setLod3Solid(null); if (type == VegetationType.SOLITARY_VEGETATION_OBJECT) { SolitaryVegetationObject svo = (SolitaryVegetationObject) citygmlVegetation; + svo.setLod0MultiCurve(null); + svo.setLod2MultiCurve(null); + svo.setLod3MultiCurve(null); svo.getDeprecatedProperties().setLod1Geometry(null); svo.getDeprecatedProperties().setLod2Geometry(null); svo.getDeprecatedProperties().setLod3Geometry(null); svo.getDeprecatedProperties().setLod4Geometry(null); } else { PlantCover pc = (PlantCover) citygmlVegetation; + pc.setLod0MultiCurve(null); + pc.setLod2MultiCurve(null); + pc.setLod3MultiCurve(null); pc.getDeprecatedProperties().setLod1MultiSurface(null); - pc.setLod2MultiSurface(null); - pc.setLod3MultiSurface(null); pc.getDeprecatedProperties().setLod4MultiSurface(null); + pc.getDeprecatedProperties().setLod1MultiSolid(null); + pc.getDeprecatedProperties().setLod2MultiSolid(null); + pc.getDeprecatedProperties().setLod3MultiSolid(null); + pc.getDeprecatedProperties().setLod4MultiSolid(null); } } 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 138fc5de..94709e7e 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 @@ -131,6 +131,16 @@ public class WaterObject extends CityObject { public void unsetGmlGeometries() { gmlWater.setLod0MultiSurface(null); gmlWater.getDeprecatedProperties().setLod1MultiSurface(null); + gmlWater.setLod2MultiSurface(null); + gmlWater.setLod3MultiSurface(null); + gmlWater.setLod1Solid(null); + gmlWater.setLod2Solid(null); + gmlWater.setLod3Solid(null); + gmlWater.getDeprecatedProperties().setLod4Solid(null); + gmlWater.setLod0MultiCurve(null); + gmlWater.getDeprecatedProperties().setLod1MultiCurve(null); + gmlWater.setLod2MultiCurve(null); + gmlWater.setLod3MultiCurve(null); } @Override 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 842fce7f..7a6b258e 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 @@ -2,11 +2,13 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.utils.Copyable; +import org.citygml4j.core.model.building.BuildingRoom; import org.citygml4j.core.model.core.AbstractSpaceBoundary; import org.citygml4j.core.visitor.ObjectVisitor; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; @@ -14,6 +16,8 @@ import static org.junit.Assert.assertNull; public class AbstractRoomTest { + //TODO: Add RecreateGeometries test + AbstractRoom ab; @Before @@ -68,6 +72,10 @@ public class AbstractRoomTest { gmlAUS.setLod0MultiSurface(new MultiSurfaceProperty()); gmlAUS.setLod2MultiSurface(new MultiSurfaceProperty()); gmlAUS.setLod3MultiSurface(new MultiSurfaceProperty()); + gmlAUS.setLod0MultiCurve(new MultiCurveProperty()); + gmlAUS.setLod2MultiCurve(new MultiCurveProperty()); + gmlAUS.setLod3MultiCurve(new MultiCurveProperty()); + ab.cgmlRoom = gmlAUS; ab.clearGmlGeometries(); @@ -78,6 +86,10 @@ public class AbstractRoomTest { assertNull(gmlAUS.getLod0MultiSurface()); assertNull(gmlAUS.getLod2MultiSurface()); assertNull(gmlAUS.getLod3MultiSurface()); + assertNull(gmlAUS.getLod0MultiCurve()); + assertNull(gmlAUS.getLod2MultiCurve()); + assertNull(gmlAUS.getLod3MultiCurve()); + } 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 15640163..8a259253 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 @@ -21,9 +21,16 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; public class GeometryTestUtils { - + + private static final double[] expectedValues = new double[]{427583.301, 6003502.571, 9.711, 427583.304, 6003502.574, 9.713, + 427583.304, 6003502.574, 4.097, 427583.301, 6003502.571, 4.097, 427583.301, 6003502.571, 9.711}; + private GeometryTestUtils() { } + + public static double[] getExpectedValues() { + return expectedValues; + } public static Geometry createDummyGeometry(GeometryType type) { return createDummyGeometry(type, Lod.LOD2); diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandObjectTest.java new file mode 100644 index 00000000..7fadaf37 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandObjectTest.java @@ -0,0 +1,66 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import org.citygml4j.core.model.landuse.LandUse; +import org.citygml4j.core.model.relief.ReliefFeature; +import org.citygml4j.core.model.relief.TINRelief; +import org.citygml4j.core.model.relief.TinProperty; +import org.junit.Test; +import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class LandObjectTest { + + @Test + public void testVisitorPropagationReliefObject() { + ReliefFeature mockRelief = new ReliefFeature(); + ReliefObject relief = new ReliefObject(mockRelief); + TinObject mockTin = mock(TinObject.class); + relief.addComponent(mockTin); + + AbstractCheck c = new AbstractCheck() { + }; + relief.accept(c); + + verify(mockTin).accept(c); + } + + @Test + public void testUnsetGeometriesTinObject() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + + tir.setTin(new TinProperty()); + + tin.clearGmlGeometries(); + + assertNull(tir.getTin()); + } + + @Test + public void testUnsetGeometriesLandUse() { + LandUse lu = new LandUse(); + LandObject land = new LandObject(lu); + + lu.setLod0MultiCurve(new MultiCurveProperty()); + lu.setLod0MultiSurface(new MultiSurfaceProperty()); + lu.setLod1MultiSurface(new MultiSurfaceProperty()); + lu.setLod2MultiSurface(new MultiSurfaceProperty()); + lu.setLod3MultiSurface(new MultiSurfaceProperty()); + lu.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty()); + + land.clearGmlGeometries(); + + assertNull(lu.getLod0MultiCurve()); + assertNull(lu.getLod0MultiSurface()); + assertNull(lu.getLod1MultiSurface()); + assertNull(lu.getLod2MultiSurface()); + assertNull(lu.getLod3MultiSurface()); + assertNull(lu.getDeprecatedProperties().getLod4MultiSurface()); + } + +} \ No newline at end of file diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java index 5413fbe9..2f9b7cac 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java @@ -59,6 +59,9 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; public class TransportationObjectTest { + //TODO: Visitor Propagation testing + //TODO: Rework this class to be more in line with the other datastructure tests + @Test public void testGetFeatureType() { TopLevelTransportFeature to = TopLevelTransportFeature.from(Mockito.mock(Road.class)); @@ -293,40 +296,22 @@ public class TransportationObjectTest { Road roadMock = mock(Road.class); TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); top.setGmlObject(roadMock); - TransportSection sectionMock = Mockito.mock(TransportSection.class); - TransportSection intersectionMock = Mockito.mock(TransportSection.class); - TrafficSpaceObject tsMock = Mockito.mock(TrafficSpaceObject.class); - TrafficSpaceObject auxTsMock = Mockito.mock(TrafficSpaceObject.class); - - top.addSection(sectionMock); - top.addIntersection(intersectionMock); - top.addTrafficSpace(tsMock); - top.addAuxTrafficSpace(auxTsMock); top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); assertFalse(top.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); - verify(sectionMock).containsError(any()); - verify(intersectionMock).containsError(any()); - verify(tsMock).containsError(any()); - verify(auxTsMock).containsError(any()); + } @Test public void testContainsErrorTrafficSpace() { TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TrafficSpace tsMock = mock(TrafficSpace.class); - tso.setGmlObject(tsMock); - TrafficAreaObject taMock = mock(TrafficAreaObject.class); - - tso.addTrafficArea(taMock); tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); assertFalse(tso.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); - verify(taMock).containsError(any()); } @Test @@ -404,42 +389,23 @@ public class TransportationObjectTest { Road roadMock = mock(Road.class); TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); top.setGmlObject(roadMock); - TransportSection sectionMock = Mockito.mock(TransportSection.class); - TransportSection intersectionMock = Mockito.mock(TransportSection.class); - TrafficSpaceObject tsMock = Mockito.mock(TrafficSpaceObject.class); - TrafficSpaceObject auxTsMock = Mockito.mock(TrafficSpaceObject.class); - - top.addSection(sectionMock); - top.addIntersection(intersectionMock); - top.addTrafficSpace(tsMock); - top.addAuxTrafficSpace(auxTsMock); top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); List errors = new ArrayList<>(); top.collectContainedErrors(errors); assertEquals(1, errors.size()); - verify(sectionMock).collectContainedErrors(errors); - verify(intersectionMock).collectContainedErrors(errors); - verify(tsMock).collectContainedErrors(errors); - verify(auxTsMock).collectContainedErrors(errors); } @Test public void testCollectContainedErrorsTrafficSpace() { TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TrafficSpace tsMock = mock(TrafficSpace.class); - tso.setGmlObject(tsMock); - TrafficAreaObject taMock = mock(TrafficAreaObject.class); - - tso.addTrafficArea(taMock); tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); List errors = new ArrayList<>(); tso.collectContainedErrors(errors); assertEquals(1, errors.size()); - verify(taMock).collectContainedErrors(errors); } @Test @@ -459,15 +425,6 @@ public class TransportationObjectTest { Road r = mock(Road.class); TopLevelTransportFeature top = TopLevelTransportFeature.from(r); top.setGmlObject(r); - TransportSection mockSection = mock(TransportSection.class); - TransportSection mockInterestSection = mock(TransportSection.class); - TrafficSpaceObject mockSpace = mock(TrafficSpaceObject.class); - TrafficSpaceObject auxMockSpace = mock(TrafficSpaceObject.class); - - top.addSection(mockSection); - top.addIntersection(mockInterestSection); - top.addTrafficSpace(mockSpace); - top.addAuxTrafficSpace(auxMockSpace); DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class); when(r.getDeprecatedProperties()).thenReturn(dSpace); @@ -483,11 +440,6 @@ public class TransportationObjectTest { assertNull(r.getLod3MultiSurface()); assertNull(dSpace.getLod4MultiSurface()); - verify(mockSection).unsetGmlGeometries(); - verify(mockInterestSection).unsetGmlGeometries(); - verify(mockSpace).unsetGmlGeometries(); - verify(auxMockSpace).unsetGmlGeometries(); - } @Test @@ -495,9 +447,6 @@ public class TransportationObjectTest { TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); TrafficSpace t = mock(TrafficSpace.class); tso.setGmlObject(t); - TrafficAreaObject mockArea = mock(TrafficAreaObject.class); - - tso.addTrafficArea(mockArea); DeprecatedPropertiesOfAbstractCityObject dSpace = mock(DeprecatedPropertiesOfAbstractCityObject.class); when(t.getDeprecatedProperties()).thenReturn(dSpace); @@ -511,8 +460,6 @@ public class TransportationObjectTest { assertNull(t.getLod2MultiSurface()); assertNull(t.getLod3MultiSurface()); - verify(mockArea).unsetGmlGeometries(); - } @Test diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java new file mode 100644 index 00000000..4d0b90ac --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java @@ -0,0 +1,95 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import org.citygml4j.core.model.vegetation.PlantCover; +import org.citygml4j.core.model.vegetation.SolitaryVegetationObject; +import org.junit.Test; +import org.xmlobjects.gml.model.geometry.GeometryProperty; +import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSolidProperty; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; +import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; + +import static org.junit.Assert.assertNull; + +public class VegetationTest { + + //TODO: Recreate geometries tests + + @Test + public void testUnsetGmlGeometriesPlantCover() { + Vegetation plantCover = new Vegetation(Vegetation.VegetationType.PLANT_COVER); + PlantCover gmlCover = new PlantCover(); + plantCover.setGmlObject(gmlCover); + + gmlCover.setLod0MultiCurve(new MultiCurveProperty()); + gmlCover.setLod2MultiCurve(new MultiCurveProperty()); + gmlCover.setLod3MultiCurve(new MultiCurveProperty()); + gmlCover.setLod0MultiSurface(new MultiSurfaceProperty()); + gmlCover.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty()); + gmlCover.setLod2MultiSurface(new MultiSurfaceProperty()); + gmlCover.setLod3MultiSurface(new MultiSurfaceProperty()); + gmlCover.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty()); + gmlCover.setLod1Solid(new SolidProperty()); + gmlCover.setLod2Solid(new SolidProperty()); + gmlCover.setLod3Solid(new SolidProperty()); + gmlCover.getDeprecatedProperties().setLod1MultiSolid(new MultiSolidProperty()); + gmlCover.getDeprecatedProperties().setLod2MultiSolid(new MultiSolidProperty()); + gmlCover.getDeprecatedProperties().setLod3MultiSolid(new MultiSolidProperty()); + gmlCover.getDeprecatedProperties().setLod4MultiSolid(new MultiSolidProperty()); + + plantCover.clearGmlGeometries(); + + assertNull(gmlCover.getLod0MultiCurve()); + assertNull(gmlCover.getLod2MultiCurve()); + assertNull(gmlCover.getLod3MultiCurve()); + assertNull(gmlCover.getLod0MultiSurface()); + assertNull(gmlCover.getDeprecatedProperties().getLod1MultiSurface()); + assertNull(gmlCover.getLod2MultiSurface()); + assertNull(gmlCover.getLod3MultiSurface()); + assertNull(gmlCover.getDeprecatedProperties().getLod4MultiSurface()); + assertNull(gmlCover.getLod1Solid()); + assertNull(gmlCover.getLod2Solid()); + assertNull(gmlCover.getLod3Solid()); + assertNull(gmlCover.getDeprecatedProperties().getLod1MultiSolid()); + assertNull(gmlCover.getDeprecatedProperties().getLod2MultiSolid()); + assertNull(gmlCover.getDeprecatedProperties().getLod3MultiSolid()); + assertNull(gmlCover.getDeprecatedProperties().getLod4MultiSolid()); + } + + @Test + public void testUnsetGmlGeometriesSolitaryVegetationObject() { + Vegetation solitary = new Vegetation(Vegetation.VegetationType.SOLITARY_VEGETATION_OBJECT); + SolitaryVegetationObject gmlSolitary = new SolitaryVegetationObject(); + solitary.setGmlObject(gmlSolitary); + + gmlSolitary.setLod0MultiCurve(new MultiCurveProperty()); + gmlSolitary.setLod2MultiCurve(new MultiCurveProperty()); + gmlSolitary.setLod3MultiCurve(new MultiCurveProperty()); + gmlSolitary.setLod0MultiSurface(new MultiSurfaceProperty()); + gmlSolitary.setLod2MultiSurface(new MultiSurfaceProperty()); + gmlSolitary.setLod3MultiSurface(new MultiSurfaceProperty()); + gmlSolitary.setLod1Solid(new SolidProperty()); + gmlSolitary.setLod2Solid(new SolidProperty()); + gmlSolitary.setLod3Solid(new SolidProperty()); + gmlSolitary.getDeprecatedProperties().setLod1Geometry(new GeometryProperty<>()); + gmlSolitary.getDeprecatedProperties().setLod2Geometry(new GeometryProperty<>()); + gmlSolitary.getDeprecatedProperties().setLod3Geometry(new GeometryProperty<>()); + gmlSolitary.getDeprecatedProperties().setLod4Geometry(new GeometryProperty<>()); + + solitary.clearGmlGeometries(); + + assertNull(gmlSolitary.getLod0MultiCurve()); + assertNull(gmlSolitary.getLod2MultiCurve()); + assertNull(gmlSolitary.getLod3MultiCurve()); + assertNull(gmlSolitary.getLod0MultiSurface()); + assertNull(gmlSolitary.getLod2MultiSurface()); + assertNull(gmlSolitary.getLod3MultiSurface()); + assertNull(gmlSolitary.getLod1Solid()); + assertNull(gmlSolitary.getLod2Solid()); + assertNull(gmlSolitary.getLod3Solid()); + assertNull(gmlSolitary.getDeprecatedProperties().getLod1Geometry()); + assertNull(gmlSolitary.getDeprecatedProperties().getLod2Geometry()); + assertNull(gmlSolitary.getDeprecatedProperties().getLod3Geometry()); + assertNull(gmlSolitary.getDeprecatedProperties().getLod4Geometry()); + } +} 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 new file mode 100644 index 00000000..01a85e09 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/WaterTest.java @@ -0,0 +1,74 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import org.citygml4j.core.model.waterbody.WaterBody; +import org.junit.Test; +import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; +import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; + +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class WaterTest { + + @Test + public void testVisitorPropagation() { + WaterObject water = new WaterObject(); + BoundarySurface bsMock = mock(BoundarySurface.class); + BoundarySurface bsMock2 = mock(BoundarySurface.class); + water.addBoundarySurface(bsMock); + water.addBoundarySurface(bsMock2); + + AbstractCheck c = new AbstractCheck() { + }; + water.accept(c); + + verify(bsMock).accept(c); + verify(bsMock2).accept(c); + } + + @Test + public void testUnsetGmlGeometries() { + WaterObject water = new WaterObject(); + WaterBody gmlWater = new WaterBody(); + water.setGmlObject(gmlWater); + + gmlWater.setLod0MultiCurve(new MultiCurveProperty()); + gmlWater.getDeprecatedProperties().setLod1MultiCurve(new MultiCurveProperty()); + gmlWater.setLod2MultiCurve(new MultiCurveProperty()); + gmlWater.setLod3MultiCurve(new MultiCurveProperty()); + gmlWater.setLod0MultiSurface(new MultiSurfaceProperty()); + gmlWater.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty()); + gmlWater.setLod2MultiSurface(new MultiSurfaceProperty()); + gmlWater.setLod3MultiSurface(new MultiSurfaceProperty()); + gmlWater.setLod1Solid(new SolidProperty()); + gmlWater.setLod2Solid(new SolidProperty()); + gmlWater.setLod3Solid(new SolidProperty()); + gmlWater.getDeprecatedProperties().setLod4Solid(new SolidProperty()); + + water.clearGmlGeometries(); + + assertNull(gmlWater.getLod0MultiCurve()); + assertNull(gmlWater.getDeprecatedProperties().getLod1MultiCurve()); + assertNull(gmlWater.getLod2MultiCurve()); + assertNull(gmlWater.getLod3MultiCurve()); + assertNull(gmlWater.getLod0MultiSurface()); + assertNull(gmlWater.getDeprecatedProperties().getLod1MultiSurface()); + assertNull(gmlWater.getLod2MultiSurface()); + assertNull(gmlWater.getLod3MultiSurface()); + assertNull(gmlWater.getLod1Solid()); + assertNull(gmlWater.getLod2Solid()); + assertNull(gmlWater.getLod3Solid()); + assertNull(gmlWater.getDeprecatedProperties().getLod4Solid()); + } + + + @Test + public void testRecreateGmlGeometries() { + WaterObject water = new WaterObject(); + // TODO: Implement test + } + +} 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 a929bcf8..b5118c94 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,6 +2,8 @@ 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; @@ -24,14 +26,14 @@ public class HealHoleOutsideErrorTest { Checker c = new Checker(config, model); c.runChecks(); - - Geometry geom = model.getBuildings().get(0).getGeometries().get(0); - Assert.assertTrue(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + + Building building = model.getBuildings().get(0); + Assert.assertTrue(building.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); Healer healer = new Healer(c); healer.healCityObject(model.getBuildings().get(0)); - Assert.assertFalse(geom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + Assert.assertFalse(building.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); } } 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 9d7f9e65..aad5053d 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 @@ -66,9 +66,9 @@ public class NonPlanarGenetic { private static final int ERROR_PENALTY = 100000; private Random r = new Random(); - private Map> durationMap = new HashMap<>(); + private Map> durationMap = new HashMap<>(); - @Test + //@Test public void findVerticesForNonPlanarTest() throws CityGmlParseException, InvalidGmlFileException, IOException { ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig(); config.setNumberOfRoundingPlacesInGlobalParameters(8); -- GitLab From 93ddbe87a1d2b281587c8e7f2fd78887990d7c9b Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 23 Apr 2025 16:45:36 +0200 Subject: [PATCH 45/51] Refactor: Delete Copyable and CopyHandler CopyHandler and the Copyable-Interface are obsolete due to Copy.copy offering the object-copying functionality with serialization. --- .../datastructure/AbstractBuilding.java | 40 --------- .../AbstractBuildingSubdivision.java | 32 ------- .../datastructure/AbstractFurniture.java | 10 +-- .../datastructure/AbstractRoom.java | 23 ----- .../datastructure/AbstractTunnel.java | 38 -------- .../datastructure/BoundarySurface.java | 33 ------- .../BridgeConstructiveElement.java | 23 ----- .../datastructure/BridgeObject.java | 68 --------------- .../citydoctor2/datastructure/BridgeRoom.java | 19 ---- .../datastructure/BridgeRoomFurniture.java | 6 -- .../citydoctor2/datastructure/Building.java | 27 ------ .../datastructure/BuildingPart.java | 21 ----- .../datastructure/BuildingRoom.java | 21 ----- .../datastructure/BuildingRoomFurniture.java | 6 -- .../datastructure/BuildingUnit.java | 26 ------ .../datastructure/CityFurniture.java | 13 --- .../citydoctor2/datastructure/CityObject.java | 17 ---- .../datastructure/ConcretePolygon.java | 40 --------- .../citydoctor2/datastructure/Edge.java | 33 +------ .../datastructure/GenericCityObject.java | 25 ------ .../citydoctor2/datastructure/Geometry.java | 58 +------------ .../citydoctor2/datastructure/GmlElement.java | 10 +-- .../datastructure/Installation.java | 30 +------ .../citydoctor2/datastructure/LandObject.java | 6 -- .../citydoctor2/datastructure/LinearRing.java | 25 ------ .../datastructure/LinkedPolygon.java | 21 ----- .../citydoctor2/datastructure/Opening.java | 23 ----- .../datastructure/ReliefObject.java | 23 ----- .../citydoctor2/datastructure/Storey.java | 26 ------ .../citydoctor2/datastructure/TinObject.java | 4 - .../TopLevelTransportFeature.java | 36 -------- .../datastructure/TrafficSpaceObject.java | 28 ------ .../datastructure/TransportationObject.java | 28 +----- .../datastructure/TransportationSpace.java | 27 ------ .../citydoctor2/datastructure/Tunnel.java | 26 ------ .../TunnelConstructiveElement.java | 22 ----- .../datastructure/TunnelFurniture.java | 6 -- .../datastructure/TunnelHollow.java | 20 ----- .../citydoctor2/datastructure/TunnelPart.java | 21 ----- .../citydoctor2/datastructure/Vegetation.java | 5 -- .../citydoctor2/datastructure/Vertex.java | 34 +------- .../datastructure/WaterObject.java | 24 ------ .../hft/stuttgart/citydoctor2/utils/Copy.java | 3 +- .../citydoctor2/utils/CopyHandler.java | 86 ------------------- .../stuttgart/citydoctor2/utils/Copyable.java | 27 ------ .../datastructure/AbstractBuildingTest.java | 9 +- .../datastructure/AbstractRoomTest.java | 7 -- .../datastructure/AbstractTunnelTest.java | 6 -- .../datastructure/CityObjectTest.java | 6 -- 49 files changed, 11 insertions(+), 1157 deletions(-) delete mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CopyHandler.java delete mode 100644 CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/Copyable.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 67da70ad..01c12c92 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 @@ -19,11 +19,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; @@ -248,41 +245,4 @@ public abstract class AbstractBuilding extends CityObject { return buildingUnits; } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(boundarySurfaceList); - handler.addInstance(buildingInstallations); - handler.addInstance(buildingRooms); - handler.addInstance(buildingRoomFurnitureList); - handler.addInstance(buildingStoreys); - handler.addInstance(buildingUnits); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - AbstractBuilding originalAb = (AbstractBuilding) original; - for (BoundarySurface originalBs : originalAb.boundarySurfaceList) { - boundarySurfaceList.add(handler.getCopyInstance(originalBs)); - } - for (Installation originalBi : originalAb.buildingInstallations) { - buildingInstallations.add(handler.getCopyInstance(originalBi)); - } - for (BuildingRoom originalBr : originalAb.buildingRooms) { - buildingRooms.add(handler.getCopyInstance(originalBr)); - } - for (BuildingRoomFurniture originalBFR : originalAb.buildingRoomFurnitureList) { - buildingRoomFurnitureList.add(handler.getCopyInstance(originalBFR)); - } - for (Storey originalBStoreys : originalAb.buildingStoreys) { - buildingStoreys.add(handler.getCopyInstance(originalBStoreys)); - } - for (BuildingUnit originalBun : originalAb.buildingUnits) { - buildingUnits.add(handler.getCopyInstance(originalBun)); - } - ab = originalAb.ab; - } - } 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 b39fb785..e8e978b2 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,11 +1,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; @@ -198,35 +195,6 @@ public abstract class AbstractBuildingSubdivision extends CityObject { return buildingRoomFurnitureList; } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(boundarySurfaceList); - handler.addInstance(buildingInstallations); - handler.addInstance(buildingRooms); - handler.addInstance(buildingRoomFurnitureList); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - AbstractBuildingSubdivision originalAbs = (AbstractBuildingSubdivision) original; - for (BoundarySurface originalBs : originalAbs.boundarySurfaceList) { - boundarySurfaceList.add(handler.getCopyInstance(originalBs)); - } - for (Installation originalBi : originalAbs.buildingInstallations) { - buildingInstallations.add(handler.getCopyInstance(originalBi)); - } - for (BuildingRoom originalBr : originalAbs.buildingRooms) { - buildingRooms.add(handler.getCopyInstance(originalBr)); - } - for (BuildingRoomFurniture originalBFR : originalAbs.buildingRoomFurnitureList) { - buildingRoomFurnitureList.add(handler.getCopyInstance(originalBFR)); - } - abs = originalAbs.abs; - } - } 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 a67b6da8..774ca2bb 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,11 +1,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; + import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -142,10 +140,4 @@ public abstract class AbstractFurniture extends CityObject { return FeatureType.FURNITURE; } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - AbstractFurniture originalAf = (AbstractFurniture) original; - af = originalAf.af; - } } 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 fb661ab7..3dc88a12 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,11 +1,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -142,24 +139,4 @@ public abstract class AbstractRoom extends CityObject { return FeatureType.ROOM; } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(roomInstallations); - handler.addInstance(boundarySurfaceList); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - AbstractRoom originalAr = (AbstractRoom) original; - for (BoundarySurface originalBs : originalAr.boundarySurfaceList) { - boundarySurfaceList.add(handler.getCopyInstance(originalBs)); - } - for (Installation originalRi : originalAr.roomInstallations) { - roomInstallations.add(handler.getCopyInstance(originalRi)); - } - cgmlRoom = originalAr.cgmlRoom; - } - } 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 ba05e34a..3e63e734 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,11 +1,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -233,39 +230,4 @@ public abstract class AbstractTunnel extends CityObject { return tunnelConstructiveElements; } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(boundarySurfaceList); - handler.addInstance(tunnelInstallations); - handler.addInstance(tunnelHollows); - handler.addInstance(tunnelFurnitureList); - handler.addInstance(tunnelConstructiveElements); - handler.addInstance(tunnelParts); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - AbstractTunnel originalAt = (AbstractTunnel) original; - for (BoundarySurface originalBs : originalAt.boundarySurfaceList) { - boundarySurfaceList.add(handler.getCopyInstance(originalBs)); - } - for (Installation originalTi : originalAt.tunnelInstallations) { - tunnelInstallations.add(handler.getCopyInstance(originalTi)); - } - for (TunnelHollow originalTh : originalAt.tunnelHollows) { - tunnelHollows.add(handler.getCopyInstance(originalTh)); - } - for (TunnelFurniture originalTFR : originalAt.tunnelFurnitureList) { - tunnelFurnitureList.add(handler.getCopyInstance(originalTFR)); - } - for (TunnelConstructiveElement originalTE : originalAt.tunnelConstructiveElements) { - tunnelConstructiveElements.add(handler.getCopyInstance(originalTE)); - } - for (TunnelPart originalTp : originalAt.tunnelParts) { - tunnelParts.add(handler.getCopyInstance(originalTp)); - } - at = originalAt.at; - } } 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 4954d49a..a68fd833 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 @@ -19,18 +19,13 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; -import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; import org.citygml4j.core.model.core.AbstractThematicSurface; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; - import java.io.Serial; import java.util.ArrayList; import java.util.List; @@ -208,32 +203,4 @@ public class BoundarySurface extends CityObject { openings.add(opening); opening.setPartOfSurface(this); } - - @Override - public Copyable createCopyInstance() { - return new BoundarySurface(gmlObject); - } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (Opening o : openings) { - handler.addInstance(o); - } - handler.addInstance(parent); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - BoundarySurface originalBs = (BoundarySurface) original; - featureType = originalBs.featureType; - type = originalBs.type; - for (Opening originalOpening : originalBs.openings) { - openings.add(handler.getCopyInstance(originalOpening)); - } - parent = handler.getCopyInstance(originalBs.parent); - gmlObject = originalBs.gmlObject; - } - } 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 407c82d3..6eeea1c7 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 @@ -19,11 +19,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -71,11 +68,6 @@ public class BridgeConstructiveElement extends CityObject { return parent.getRenderColor().brighter(); } - @Override - public Copyable createCopyInstance() { - return new BridgeConstructiveElement(gmlBridgeElement); - } - @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { // only handles CityGML2 for now @@ -226,19 +218,4 @@ public class BridgeConstructiveElement extends CityObject { return boundarySurfaceList; } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(boundarySurfaceList); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - BridgeConstructiveElement originalBce = (BridgeConstructiveElement) original; - for (BoundarySurface originalBs : originalBce.boundarySurfaceList) { - boundarySurfaceList.add(handler.getCopyInstance(originalBs)); - } - } - } 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 998a5e48..b0fb5979 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 @@ -19,12 +19,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -276,35 +272,6 @@ public class BridgeObject extends CityObject { } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (BoundarySurface bs : boundarySurfaces) { - handler.addInstance(bs); - } - for (Installation bi : bridgeInstallations) { - handler.addInstance(bi); - } - - for (BridgeObject part : parts) { - handler.addInstance(part); - } - - - for (BridgeConstructiveElement ele : elements) { - handler.addInstance(ele); - } - - for (BridgeRoom br : bridgeRooms) { - handler.addInstance(br); - } - - for (BridgeRoomFurniture bri : bridgeFurniture) { - handler.addInstance(bri); - } - - } - public void anonymize() { for (Geometry geom : getGeometries()) { geom.anonymize(); @@ -322,36 +289,6 @@ public class BridgeObject extends CityObject { this.ab = gmlB; } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - BridgeObject originalBo = (BridgeObject) original; - for (BoundarySurface originalBs : originalBo.boundarySurfaces) { - boundarySurfaces.add(handler.getCopyInstance(originalBs)); - } - for (Installation originalBi : originalBo.bridgeInstallations) { - bridgeInstallations.add(handler.getCopyInstance(originalBi)); - } - - for (BridgeObject part : originalBo.parts) { - getParts().add(handler.getCopyInstance(part)); - } - - - for (BridgeConstructiveElement ele : originalBo.elements) { - getConstructiveElements().add(handler.getCopyInstance(ele)); - } - - for (BridgeRoom br : originalBo.bridgeRooms) { - getBridgeRooms().add(handler.getCopyInstance(br)); - } - - for (BridgeRoomFurniture bri : originalBo.bridgeFurniture) { - getBridgeFurniture().add(handler.getCopyInstance(bri)); - } - - } - public List getBoundarySurfaces() { return boundarySurfaces; } @@ -361,11 +298,6 @@ public class BridgeObject extends CityObject { element.setParent(this); } - @Override - public Copyable createCopyInstance() { - return new BridgeObject(type, ab, parent); - } - public List getParts() { return parts; } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoom.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoom.java index caa11a38..036f84c1 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoom.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoom.java @@ -1,7 +1,5 @@ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import java.io.Serial; @@ -31,13 +29,6 @@ public class BridgeRoom extends AbstractRoom { return parent; } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - BridgeRoom oRoom = (BridgeRoom) original; - parent = handler.getCopyInstance(oRoom.getParent()); - } - @Override public CityObject getTopLevelCityObject() { return parent.getTopLevelCityObject(); @@ -48,14 +39,4 @@ public class BridgeRoom extends AbstractRoom { return parent.getRenderColor(); } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(parent); - } - - @Override - public Copyable createCopyInstance() { - return new BridgeRoom(); - } } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoomFurniture.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoomFurniture.java index 6bcc1041..02dbc071 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoomFurniture.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BridgeRoomFurniture.java @@ -1,6 +1,5 @@ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.bridge.BridgeFurniture; import java.io.Serial; @@ -13,9 +12,4 @@ public class BridgeRoomFurniture extends AbstractFurniture { public void setGmlObject(BridgeFurniture gmlObject) { super.setGmlObject(gmlObject); } - - @Override - public Copyable createCopyInstance() { - return new BridgeRoomFurniture(); - } } 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 90a56c70..dcd6073e 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 @@ -19,14 +19,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; -import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.building.BuildingInstallation; import org.citygml4j.core.model.building.BuildingInstallationProperty; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; -import org.citygml4j.core.util.geometry.GeometryFactory; import java.io.Serial; import java.util.ArrayList; @@ -86,26 +81,4 @@ public class Building extends AbstractBuilding { setCityGmlBuilding(gmlB); } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - Building originalBuilding = (Building) original; - for (BuildingPart originalBp : originalBuilding.buildingParts) { - buildingParts.add(handler.getCopyInstance(originalBp)); - } - } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (BuildingPart bp : buildingParts) { - handler.addInstance(bp); - } - } - - @Override - public Copyable createCopyInstance() { - return new Building(); - } - } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingPart.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingPart.java index 45fe7d18..f92c2401 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingPart.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingPart.java @@ -18,9 +18,6 @@ */ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; - import java.io.Serial; public class BuildingPart extends AbstractBuilding { @@ -57,22 +54,4 @@ public class BuildingPart extends AbstractBuilding { return "BuildingPart [id=" + getGmlId() + "]"; } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - BuildingPart originalPart = (BuildingPart) original; - parent = handler.getCopyInstance(originalPart.parent); - } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(parent); - } - - @Override - public Copyable createCopyInstance() { - return new BuildingPart(); - } - } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoom.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoom.java index 485a75ae..c19978fd 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoom.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoom.java @@ -1,7 +1,5 @@ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.citygml4j.core.model.building.BuildingFurnitureProperty; @@ -43,14 +41,6 @@ public class BuildingRoom extends AbstractRoom { return parent; } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - - BuildingRoom oRoom = (BuildingRoom) original; - parent = handler.getCopyInstance(oRoom.getParent()); - } - @Override public CityObject getTopLevelCityObject() { return getParent().getTopLevelCityObject(); @@ -60,15 +50,4 @@ public class BuildingRoom extends AbstractRoom { public Color getRenderColor() { return parent.getRenderColor(); } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(parent); - } - - @Override - public Copyable createCopyInstance() { - return new BuildingRoom(); - } } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoomFurniture.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoomFurniture.java index 19897cdf..a5b2d5dd 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoomFurniture.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BuildingRoomFurniture.java @@ -1,7 +1,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.building.BuildingFurniture; import java.io.Serial; @@ -15,10 +14,5 @@ public class BuildingRoomFurniture extends AbstractFurniture { super.setGmlObject(gmlObject); } - @Override - public Copyable createCopyInstance() { - return new BuildingRoomFurniture(); - } - } 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 30e4b7ef..269fa4fe 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,10 +1,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.util.geometry.GeometryFactory; import java.io.Serial; @@ -18,12 +15,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { private final List storeys = new ArrayList<>(); - @Override - public Copyable createCopyInstance() { - return new BuildingUnit(); - } - - @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { @@ -42,23 +33,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (Storey storey : storeys) { - storey.collectInstances(handler); - } - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - BuildingUnit originalBu = (BuildingUnit) original; - for (Storey storey : originalBu.storeys) { - storeys.add(handler.getCopyInstance(storey)); - } - this.abs = originalBu.abs; - } public List getStoreys() { return storeys; 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 9b7c4057..4fb60367 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 @@ -3,8 +3,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -122,15 +120,4 @@ public class CityFurniture extends CityObject { return FeatureType.CITY_FURNITURE; } - @Override - public Copyable createCopyInstance() { - return new CityFurniture(); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - CityFurniture originalCF = (CityFurniture) original; - cgmlCityFurniture = originalCF.cgmlCityFurniture; - } } 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 b36619d8..86474604 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 @@ -19,10 +19,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder; import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor; import javafx.scene.paint.Color; @@ -163,19 +160,5 @@ public abstract class CityObject extends GmlElement { return null; } - @Override - public void collectInstances(CopyHandler handler) { - for (Geometry geom : geometryList) { - handler.addInstance(geom); - } - } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - CityObject originalCo = (CityObject) original; - for (Geometry geom : originalCo.geometryList) { - geometryList.add(handler.getCopyInstance(geom)); - } - } } 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 7833f540..9449a98b 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 @@ -19,13 +19,10 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.Checkable; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.JoglTesselator; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import java.io.Serial; import java.util.ArrayList; @@ -396,43 +393,6 @@ public class ConcretePolygon extends Polygon { } - @Override - public void collectInstances(CopyHandler handler) { - handler.addInstance(exterior); - if (innerRings != null) { - for (LinearRing lr : innerRings) { - handler.addInstance(lr); - } - } - handler.addInstance(partOfSurface); - handler.addInstance(partfOfInstallation); - handler.addInstance(parent); - handler.addInstance(linkedFromPolygon); - } - - - @Override - public Copyable createCopyInstance() { - return new ConcretePolygon(); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - ConcretePolygon originalPoly = (ConcretePolygon) original; - exterior = handler.getCopyInstance(originalPoly.exterior); - if (originalPoly.innerRings != null) { - innerRings = new ArrayList<>(originalPoly.innerRings.size()); - for (LinearRing originalRing : originalPoly.innerRings) { - innerRings.add(handler.getCopyInstance(originalRing)); - } - } - parent = handler.getCopyInstance(originalPoly.parent); - partfOfInstallation = handler.getCopyInstance(originalPoly.partfOfInstallation); - partOfSurface = handler.getCopyInstance(originalPoly.partOfSurface); - linkedFromPolygon = handler.getCopyInstance(originalPoly.linkedFromPolygon); - } - @Override public void remove() { parent.removePolygon(this); 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 4df5da10..0af9643f 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 @@ -18,9 +18,6 @@ */ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; - import java.io.Serial; import java.io.Serializable; import java.util.ArrayList; @@ -31,7 +28,7 @@ import java.util.List; * * @author Matthias Betz */ -public class Edge implements Serializable, Copyable { +public class Edge implements Serializable { @Serial private static final long serialVersionUID = -504694863498128296L; @@ -186,33 +183,7 @@ public class Edge implements Serializable, Copyable { } return null; } +} - @Override - public void collectInstances(CopyHandler handler) { - handler.addInstance(from); - handler.addInstance(to); - handler.addInstance(adjacentPolygons); - handler.addInstance(adjacentRings); - } - - @Override - public Copyable createCopyInstance() { - return new Edge(); - } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - Edge originalEdge = (Edge) original; - from = handler.getCopyInstance(originalEdge.from); - to = handler.getCopyInstance(originalEdge.to); - numberOfHalfEdges = originalEdge.numberOfHalfEdges; - numberOfOppositeHalfEdges = originalEdge.numberOfOppositeHalfEdges; - for (Polygon originalPoly : originalEdge.adjacentPolygons) { - adjacentPolygons.add(handler.getCopyInstance(originalPoly)); - } - for (LinearRing originalRing : originalEdge.adjacentRings) { - adjacentRings.add(handler.getCopyInstance(originalRing)); - } - } -} 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 2e4ae131..e55e6363 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,11 +1,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -117,23 +114,6 @@ public class GenericCityObject extends CityObject { throw new IllegalStateException("Cannot add " + geom.getLod() + " solid to buildings"); } } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(boundarySurfaceList); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - GenericCityObject originalGos = (GenericCityObject) original; - for (BoundarySurface originalBs : originalGos.boundarySurfaceList) { - boundarySurfaceList.add(handler.getCopyInstance(originalBs)); - } - cgmlGos = originalGos.cgmlGos; - } - @Override public AbstractCityObject getGmlObject() { return cgmlGos; @@ -181,9 +161,4 @@ public class GenericCityObject extends CityObject { bs.setParent(this); } - - @Override - public Copyable createCopyInstance() { - return new GenericCityObject(); - } } 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 badef8ba..8b4eb6d2 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 @@ -19,13 +19,11 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; + import de.hft.stuttgart.citydoctor2.math.Triangle3d; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; import de.hft.stuttgart.citydoctor2.utils.BoundingBoxCalculator; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import de.hft.stuttgart.citydoctor2.utils.SerializablePair; import java.io.Serial; @@ -345,58 +343,4 @@ public class Geometry extends GmlElement { edges = null; edgeMap = null; } - - @Override - public void collectInstances(CopyHandler handler) { - handler.addInstance(parent); - handler.addInstance(polygons); - handler.addInstance(edges); - handler.addInstance(vertices); - if (edgeMap != null) { - for (Entry, Edge> e : edgeMap.entrySet()) { - handler.addInstance(e.getKey().getValue0()); - handler.addInstance(e.getKey().getValue1()); - handler.addInstance(e.getValue()); - } - } - } - - @Override - public Copyable createCopyInstance() { - return new Geometry(type, lod); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - Geometry originalGeometry = (Geometry) original; - for (Polygon originalPoly : originalGeometry.polygons) { - polygons.add(handler.getCopyInstance(originalPoly)); - } - if (originalGeometry.edges != null) { - edges = new ArrayList<>(originalGeometry.edges.size()); - for (Edge originalEdge : originalGeometry.edges) { - edges.add(handler.getCopyInstance(originalEdge)); - } - } - if (originalGeometry.edgeMap != null) { - edgeMap = new HashMap<>(originalGeometry.edgeMap.size()); - for (Entry, Edge> originalEntry : originalGeometry.edgeMap.entrySet()) { - Vertex copyV0 = handler.getCopyInstance(originalEntry.getKey().getValue0()); - Vertex copyV1 = handler.getCopyInstance(originalEntry.getKey().getValue1()); - SerializablePair pair = new SerializablePair<>(copyV0, copyV1); - Edge copyEdge = handler.getCopyInstance(originalEntry.getValue()); - edgeMap.put(pair, copyEdge); - } - } - if (originalGeometry.vertices != null) { - vertices = new ArrayList<>(originalGeometry.vertices.size()); - for (Vertex originalVertex : originalGeometry.vertices) { - vertices.add(handler.getCopyInstance(originalVertex)); - } - } - parent = handler.getCopyInstance(originalGeometry.parent); - - } - } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GmlElement.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GmlElement.java index 4b719599..46e5d857 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GmlElement.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GmlElement.java @@ -19,8 +19,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Checkable; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import java.io.Serial; @@ -29,7 +27,7 @@ import java.io.Serial; * * @author Matthias Betz */ -public abstract class GmlElement extends Checkable implements Copyable { +public abstract class GmlElement extends Checkable { @Serial private static final long serialVersionUID = -3242505393303017359L; @@ -52,11 +50,5 @@ public abstract class GmlElement extends Checkable implements Copyable { return gmlId != null && !gmlId.isGenerated(); } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - GmlElement originalElement = (GmlElement) original; - // generate gml id before copying - gmlId = originalElement.getGmlId(); - } } 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 d177b58a..7258df5a 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 @@ -19,11 +19,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; + import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -225,30 +223,4 @@ public class Installation extends CityObject { } return boundarySurfaces; } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - Installation originalBi = (Installation) original; - for (BoundarySurface originalBs : originalBi.boundarySurfaces) { - boundarySurfaces.add(handler.getCopyInstance(originalBs)); - } - gmlBi = originalBi.gmlBi; - parent = handler.getCopyInstance(parent); - } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (BoundarySurface bs : boundarySurfaces) { - handler.addInstance(bs); - } - handler.addInstance(parent); - } - - @Override - public Copyable createCopyInstance() { - return new Installation(); - } - } 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 21de0051..cdf64c8a 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 @@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.landuse.LandUse; @@ -126,9 +125,4 @@ public class LandObject extends CityObject { return "LandObject [id=" + getGmlId() + "]"; } - @Override - public Copyable createCopyInstance() { - return new LandObject(lu); - } - } 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 a3978662..2f48bcdc 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 @@ -20,8 +20,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.math.*; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import java.io.Serial; import java.util.ArrayList; @@ -312,27 +310,4 @@ public class LinearRing extends GmlElement { parent.prepareLowMemoryUsageMode(); } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - LinearRing originalRing = (LinearRing) original; - type = originalRing.type; - parent = handler.getCopyInstance(originalRing.parent); - for (Vertex v : originalRing.vertices) { - vertices.add(handler.getCopyInstance(v)); - } - } - - @Override - public void collectInstances(CopyHandler handler) { - for (Vertex v : vertices) { - handler.addInstance(v); - } - handler.addInstance(parent); - } - - @Override - public Copyable createCopyInstance() { - return new LinearRing(type); - } } 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 f08c9b3e..7bf592fd 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 @@ -19,13 +19,10 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.check.CheckResult; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import java.io.Serial; import java.util.List; @@ -252,24 +249,6 @@ public class LinkedPolygon extends Polygon { return false; } - @Override - public void collectInstances(CopyHandler handler) { - handler.addInstance(parent); - handler.addInstance(poly); - } - - @Override - public Copyable createCopyInstance() { - return new LinkedPolygon(); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - LinkedPolygon linkedOriginal = (LinkedPolygon) original; - parent = handler.getCopyInstance(linkedOriginal.parent); - poly = handler.getCopyInstance(linkedOriginal.poly); - } - @Override public void remove() { poly.remove(); 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 01817971..8a003486 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 @@ -21,8 +21,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.construction.AbstractFillingSurface; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -154,25 +152,4 @@ public class Opening extends CityObject { return FeatureType.OPENING; } - @Override - public Copyable createCopyInstance() { - return new Opening(type); - } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(partOf); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - Opening originalOpening = (Opening) original; - partOf = handler.getCopyInstance(originalOpening.partOf); - type = originalOpening.type; - featureType = originalOpening.featureType; - ao = originalOpening.ao; - } - } 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 8d530b3a..b27b485e 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 @@ -19,10 +19,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.citygml4j.core.model.relief.ReliefFeature; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -55,26 +52,6 @@ public class ReliefObject extends CityObject { } } - @Override - public void collectInstances(CopyHandler handler) { - handler.addInstance(components); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - ReliefObject originalRelief = (ReliefObject) original; - for (TinObject tin : originalRelief.components) { - components.add(handler.getCopyInstance(tin)); - } - } - - @Override - public Copyable createCopyInstance() { - return new ReliefObject(feature); - } - - @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { // no geometries 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 3eaefb03..43d3b550 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,10 +1,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.util.geometry.GeometryFactory; import java.io.Serial; @@ -18,11 +15,6 @@ public class Storey extends AbstractBuildingSubdivision { private final List buildingUnits = new ArrayList<>(); - @Override - public Copyable createCopyInstance() { - return new Storey(); - } - @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { @@ -40,24 +32,6 @@ public class Storey extends AbstractBuildingSubdivision { } } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (BuildingUnit buildingUnit : buildingUnits) { - buildingUnit.collectInstances(handler); - } - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - Storey originalSt = (Storey) original; - for (BuildingUnit buildingUnit : originalSt.buildingUnits) { - buildingUnits.add(handler.getCopyInstance(buildingUnit)); - } - this.abs = originalSt.abs; - } - public List getBuildingUnits() { return buildingUnits; } 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 e660a603..e898035b 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 @@ -56,10 +56,6 @@ public class TinObject extends CityObject { } } - @Override - public TinObject createCopyInstance() { - return new TinObject(gmlRelief); - } @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { 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 961ffc7d..8b41c699 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,17 +1,12 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; -import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.deprecated.transportation.TransportationComplex; import org.citygml4j.core.model.transportation.Railway; import org.citygml4j.core.model.transportation.Road; import org.citygml4j.core.model.transportation.Square; import org.citygml4j.core.model.transportation.Track; import org.citygml4j.core.model.transportation.Waterway; -import org.citygml4j.core.util.geometry.GeometryFactory; import java.util.ArrayList; import java.util.List; @@ -94,40 +89,9 @@ public class TopLevelTransportFeature extends TransportationSpace { } } - @Override public String toString() { return "TopLevelTransportFeature [id=" + getGmlId() + "]"; } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (TransportSection section : sections) { - section.collectInstances(handler); - } - for (TransportSection section : intersections) { - section.collectInstances(handler); - } - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - TransportationObject originalTo = (TransportationObject) original; - for (TransportSection section : sections) { - section.fillValues(originalTo, handler); - } - for (TransportSection section : intersections) { - section.fillValues(originalTo, handler); - } - } - - @Override - public Copyable createCopyInstance() { - return new TopLevelTransportFeature(type); - } - - } 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 5746328c..f46d03bf 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,11 +1,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.core.AbstractSpace; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -107,29 +104,4 @@ public class TrafficSpaceObject extends TransportationObject { return "TransportationSpaceObject [id=" + getGmlId() + "]"; } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (TrafficAreaObject tao : trafficAreas) { - handler.addInstance(tao); - } - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - TrafficSpaceObject originalTao = (TrafficSpaceObject) original; - for (TrafficAreaObject tao : originalTao.trafficAreas) { - trafficAreas.add(handler.getCopyInstance(tao)); - } - super.setGmlObject(originalTao.getGmlObject()); - } - - @Override - public Copyable createCopyInstance() { - return new TrafficSpaceObject(null); - } - - } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObject.java index eafdf249..910c77b4 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObject.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObject.java @@ -18,22 +18,9 @@ */ package de.hft.stuttgart.citydoctor2.datastructure; -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.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; -import org.citygml4j.core.model.core.AbstractSpace; -import org.citygml4j.core.model.transportation.AbstractTransportationSpace; -import org.citygml4j.core.model.transportation.AuxiliaryTrafficArea; -import org.citygml4j.core.model.transportation.TrafficArea; -import org.citygml4j.core.util.geometry.GeometryFactory; -import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; -import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; + import java.io.Serial; import java.util.ArrayList; @@ -109,17 +96,4 @@ public abstract class TransportationObject extends CityObject { return String.format("[%s] %s", this.type.name(), this.getGmlId().toString()); } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - TransportationObject originalTo = (TransportationObject) original; - ato = originalTo.ato; - } - - @Override - public Copyable createCopyInstance() { - return null; - } - } 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 99b9404b..ddfc2ecc 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,11 +1,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.core.AbstractSpace; import org.citygml4j.core.model.transportation.AbstractTransportationSpace; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -125,28 +122,4 @@ public abstract class TransportationSpace extends TransportationObject { return "TransportationSpace [id=" + getGmlId() + "]"; } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (TrafficSpaceObject to : trafficSpaces) { - to.collectInstances(handler); - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - to.collectInstances(handler); - } - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - TransportationObject originalTo = (TransportationObject) original; - for (TrafficSpaceObject to : trafficSpaces) { - to.fillValues(originalTo, handler); - } - for (TrafficSpaceObject to : auxTrafficSpaces) { - to.fillValues(originalTo, handler); - } - } - - } 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 6d124247..54013c4a 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,14 +1,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; -import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty; import org.citygml4j.core.model.tunnel.TunnelInstallation; import org.citygml4j.core.model.tunnel.TunnelInstallationProperty; -import org.citygml4j.core.util.geometry.GeometryFactory; import java.io.Serial; import java.util.ArrayList; @@ -68,27 +63,6 @@ public class Tunnel extends AbstractTunnel { setCityGmlBuilding(gmlT); } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - Tunnel originalTunnel = (Tunnel) original; - for (TunnelPart originalTp : originalTunnel.tunnelParts) { - tunnelParts.add(handler.getCopyInstance(originalTp)); - } - } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - for (TunnelPart tp : tunnelParts) { - handler.addInstance(tp); - } - } - - @Override - public Copyable createCopyInstance() { - return new Tunnel(); - } } 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 0c597ed5..00352ce7 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,11 +1,8 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; -import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -50,11 +47,6 @@ public class TunnelConstructiveElement extends CityObject { return parent.getRenderColor(); } - @Override - public Copyable createCopyInstance() { - return new TunnelConstructiveElement(gmlTunnelElement); - } - @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { // only handles CityGML2 for now @@ -185,18 +177,4 @@ public class TunnelConstructiveElement extends CityObject { return boundarySurfaceList; } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(boundarySurfaceList); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - TunnelConstructiveElement originalTce = (TunnelConstructiveElement) original; - for (BoundarySurface originalTs : originalTce.boundarySurfaceList) { - boundarySurfaceList.add(handler.getCopyInstance(originalTs)); - } - } } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelFurniture.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelFurniture.java index 747f5ee8..28b1c286 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelFurniture.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelFurniture.java @@ -1,6 +1,5 @@ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import java.io.Serial; @@ -13,9 +12,4 @@ public class TunnelFurniture extends AbstractFurniture { super.setGmlObject(gmlObject); } - @Override - public Copyable createCopyInstance() { - return new BuildingRoomFurniture(); - } - } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelHollow.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelHollow.java index 414c0703..f1064f82 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelHollow.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelHollow.java @@ -1,7 +1,5 @@ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.citygml4j.core.model.tunnel.TunnelFurnitureProperty; @@ -41,27 +39,9 @@ public class TunnelHollow extends AbstractRoom { return parent.getRenderColor(); } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - - TunnelHollow oHollow = (TunnelHollow) original; - parent = handler.getCopyInstance(oHollow.getParent()); - } - @Override public CityObject getTopLevelCityObject() { return parent.getTopLevelCityObject(); } - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(parent); - } - - @Override - public Copyable createCopyInstance() { - return new TunnelHollow(); - } } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelPart.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelPart.java index 6493cd5c..e6c02a99 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelPart.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelPart.java @@ -1,8 +1,5 @@ package de.hft.stuttgart.citydoctor2.datastructure; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; - import java.io.Serial; public class TunnelPart extends AbstractTunnel { @@ -37,24 +34,6 @@ public class TunnelPart extends AbstractTunnel { return "TunnelPart [id=" + getGmlId() + "]"; } - @Override - public void fillValues(Copyable original, CopyHandler handler) { - super.fillValues(original, handler); - TunnelPart originalPart = (TunnelPart) original; - parent = handler.getCopyInstance(originalPart.parent); - } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(parent); - } - - @Override - public Copyable createCopyInstance() { - return new TunnelPart(); - } - private TunnelPart() { } } 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 945eaea6..e16a55cd 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 @@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.vegetation.AbstractVegetationObject; @@ -236,8 +235,4 @@ public class Vegetation extends CityObject { return "Vegetation [id=" + getGmlId() + "]"; } - @Override - public Copyable createCopyInstance() { - return new Vegetation(type); - } } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vertex.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vertex.java index cc7e9a5d..a49aec95 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vertex.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vertex.java @@ -19,8 +19,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.math.Vector3d; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import de.hft.stuttgart.citydoctor2.utils.SerializablePair; import java.io.Serial; @@ -34,7 +32,7 @@ import java.util.Set; * * @author Matthias Betz */ -public class Vertex extends Vector3d implements Copyable { +public class Vertex extends Vector3d { @Serial private static final long serialVersionUID = -5525361920397934892L; @@ -138,34 +136,4 @@ public class Vertex extends Vector3d implements Copyable { adjacentRings = new ArrayList<>(2); } - @Override - public void collectInstances(CopyHandler handler) { - for (SerializablePair> pair : adjacentRings) { - handler.addInstance(pair.getValue0()); - for (LinearRing lr : pair.getValue1()) { - handler.addInstance(lr); - } - } - } - - @Override - public Copyable createCopyInstance() { - return new Vertex(this); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - Vertex originalVertex = (Vertex) original; - // vertex point data already filled - for (SerializablePair> pair : originalVertex.adjacentRings) { - Geometry geomCopy = handler.getCopyInstance(pair.getValue0()); - HashSet set = new HashSet<>(); - for (LinearRing originalRing : pair.getValue1()) { - set.add(handler.getCopyInstance(originalRing)); - } - SerializablePair> copyPair = new SerializablePair<>(geomCopy, set); - adjacentRings.add(copyPair); - } - } - } 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 94709e7e..6f5c427d 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 @@ -21,8 +21,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; -import de.hft.stuttgart.citydoctor2.utils.CopyHandler; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -157,26 +155,4 @@ public class WaterObject extends CityObject { return "WaterObject [id=" + getGmlId() + "]"; } - @Override - public WaterObject createCopyInstance() { - return new WaterObject(); - } - - @Override - public void fillValues(Copyable original, CopyHandler handler) { - WaterObject wo = (WaterObject) original; - WaterObject originalWaterObject = (WaterObject) original; - for (BoundarySurface originalBs : originalWaterObject.boundarySurfaceList) { - boundarySurfaceList.add(handler.getCopyInstance(originalBs)); - } - gmlWater = wo.gmlWater; - - } - - @Override - public void collectInstances(CopyHandler handler) { - super.collectInstances(handler); - handler.addInstance(boundarySurfaceList); - } - } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/Copy.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/Copy.java index 390c3807..fe1fdc37 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/Copy.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/Copy.java @@ -27,6 +27,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.Serializable; public class Copy { @@ -36,7 +37,7 @@ public class Copy { } @SuppressWarnings("unchecked") - public static T copy(T original) { + public static T copy(T original) { ByteArrayOutputStream out = new ByteArrayOutputStream(); try { ObjectOutputStream oos = new ObjectOutputStream(out); diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CopyHandler.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CopyHandler.java deleted file mode 100644 index ae994397..00000000 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CopyHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -/*- - * Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.utils; - -import java.util.Collection; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -public class CopyHandler { - - - private final Set toBeDoneInstances = new HashSet<>(); - private final Map finishedInstances = new IdentityHashMap<>(); - - @SuppressWarnings("unchecked") - public T copy(T original) { - toBeDoneInstances.add(original); - while (!toBeDoneInstances.isEmpty()) { - handleNextInstance(); - } - for (Entry e : finishedInstances.entrySet()) { - e.getValue().fillValues(e.getKey(), this); - } - return (T) finishedInstances.get(original); - } - - @SuppressWarnings("unchecked") - public T getCopyInstance(T original) { - if (original == null) { - // null gets copied to null - return null; - } - return (T) finishedInstances.get(original); - } - - public void addInstance(Copyable copyable) { - if (copyable == null) { - // don't care for null instances - return; - } - if (finishedInstances.containsKey(copyable)) { - // already processed - return; - } - toBeDoneInstances.add(copyable); - } - - private void handleNextInstance() { - Iterator iterator = toBeDoneInstances.iterator(); - Copyable next = iterator.next(); - iterator.remove(); - finishedInstances.put(next, next.createCopyInstance()); - next.collectInstances(this); - } - - public void addInstance(Collection collection) { - if (collection == null) { - return; - } - for (Copyable c : collection) { - addInstance(c); - } - } - - -} diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/Copyable.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/Copyable.java deleted file mode 100644 index 8352db41..00000000 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/Copyable.java +++ /dev/null @@ -1,27 +0,0 @@ -/*- - * Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart - * - * This file is part of CityDoctor2. - * - * CityDoctor2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CityDoctor2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with CityDoctor2. If not, see . - */ -package de.hft.stuttgart.citydoctor2.utils; - -public interface Copyable { - - public void collectInstances(CopyHandler handler); - public Copyable createCopyInstance(); - public void fillValues(Copyable original, CopyHandler handler); - -} 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 4671f6c2..98dbe2e7 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 @@ -55,7 +55,6 @@ 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.Copyable; public class AbstractBuildingTest { @@ -323,21 +322,15 @@ public class AbstractBuildingTest { } private AbstractBuilding createAbstractBuilding() { - AbstractBuilding ab = new AbstractBuilding() { + return new AbstractBuilding() { private static final long serialVersionUID = -448362592456318541L; - @Override - public Copyable createCopyInstance() { - return null; - } - @Override public CityObject getTopLevelCityObject(){ return null; } }; - return ab; } } 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 7a6b258e..e3369010 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,8 +1,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; -import de.hft.stuttgart.citydoctor2.utils.Copyable; -import org.citygml4j.core.model.building.BuildingRoom; import org.citygml4j.core.model.core.AbstractSpaceBoundary; import org.citygml4j.core.visitor.ObjectVisitor; import org.junit.Before; @@ -27,11 +25,6 @@ public class AbstractRoomTest { public CityObject getTopLevelCityObject() { return null; } - - @Override - public Copyable createCopyInstance() { - return null; - } }; } 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 aa68443f..bcc7926e 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,7 +1,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.visitor.ObjectVisitor; import org.junit.Before; import org.junit.Test; @@ -26,11 +25,6 @@ public class AbstractTunnelTest { public CityObject getTopLevelCityObject() { return null; } - - @Override - public Copyable createCopyInstance() { - return null; - } }; } 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 bb63bb46..6bef059e 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 @@ -2,11 +2,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; -import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; @@ -85,10 +83,6 @@ public class CityObjectTest { return null; } - @Override - public Copyable createCopyInstance() { - return null; - } }; } } \ No newline at end of file -- GitLab From 72b534702cac9c7ebe3063a1ae66376554aa84a8 Mon Sep 17 00:00:00 2001 From: Riegel Date: Thu, 24 Apr 2025 17:02:48 +0200 Subject: [PATCH 46/51] Test: Update Test cases for Visitor implementation --- .../datastructure/AbstractBuilding.java | 8 +- .../AbstractBuildingSubdivision.java | 1 + .../datastructure/AbstractRoom.java | 5 +- .../datastructure/AbstractTunnel.java | 4 - .../datastructure/BridgeObject.java | 9 +- .../datastructure/BuildingUnit.java | 9 - .../datastructure/CityFurniture.java | 3 + .../citydoctor2/datastructure/LandObject.java | 1 - .../citydoctor2/datastructure/Storey.java | 3 - .../citydoctor2/datastructure/TinObject.java | 3 + .../datastructure/TrafficAreaObject.java | 3 + .../datastructure/TrafficSpaceObject.java | 37 +- .../datastructure/TransportationSpace.java | 55 ++- .../TunnelConstructiveElement.java | 1 + .../citydoctor2/datastructure/Vegetation.java | 31 +- .../datastructure/WaterObject.java | 58 ++- .../datastructure/AbstractBuildingTest.java | 52 +- .../datastructure/AbstractRoomTest.java | 72 ++- .../datastructure/AbstractTunnelTest.java | 65 ++- .../datastructure/BoundarySurfaceTest.java | 26 +- .../datastructure/BridgeObjectTest.java | 148 ++---- .../datastructure/BuildingTest.java | 2 - .../datastructure/CityFurnitureTest.java | 73 ++- .../datastructure/CityObjectTest.java | 53 ++- .../datastructure/GenericCityObjectTest.java | 42 +- .../datastructure/GeometryTestUtils.java | 29 ++ .../datastructure/LandObjectTest.java | 66 --- .../datastructure/LandUseTest.java | 60 +++ .../datastructure/ReliefObjectTest.java | 60 +++ .../TopLevelTransportFeatureTest.java | 156 ++++++ .../datastructure/TrafficAreaTest.java | 110 +++++ .../datastructure/TrafficSpaceTest.java | 168 +++++++ .../TransportationObjectTest.java | 449 ------------------ .../TransportationSpaceTest.java | 111 +++++ .../datastructure/VegetationTest.java | 109 ++++- .../citydoctor2/datastructure/WaterTest.java | 55 ++- 36 files changed, 1349 insertions(+), 788 deletions(-) delete mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandObjectTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandUseTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.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 01c12c92..e1923ece 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 @@ -79,14 +79,12 @@ public abstract class AbstractBuilding extends CityObject { ab.setLod1Solid(null); ab.setLod2Solid(null); ab.setLod3Solid(null); + ab.getDeprecatedProperties().setLod4Solid(null); + ab.setLod0MultiSurface(null); + ab.getDeprecatedProperties().setLod1MultiSurface(null); ab.setLod2MultiSurface(null); ab.setLod3MultiSurface(null); - ab.getDeprecatedProperties().setLod1MultiSurface(null); ab.getDeprecatedProperties().setLod4MultiSurface(null); - ab.getDeprecatedProperties().setLod4Solid(null); - ab.setLod0MultiCurve(null); - ab.setLod2MultiCurve(null); - ab.setLod3MultiCurve(null); } @Override 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 e8e978b2..6142cb32 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 @@ -67,6 +67,7 @@ public abstract class AbstractBuildingSubdivision extends CityObject { abs.setLod1Solid(null); abs.setLod2Solid(null); abs.setLod3Solid(null); + abs.setLod0MultiSurface(null); abs.setLod2MultiSurface(null); abs.setLod3MultiSurface(null); } 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 3dc88a12..79c08f54 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 @@ -23,7 +23,7 @@ public abstract class AbstractRoom extends CityObject { private static final long serialVersionUID = -1730625513988944329L; private final List roomInstallations = new ArrayList<>(2); - // Rooms have a Href list of furniture, the actual object is saved in the Building + // Rooms have a Href list of furniture, the furniture-objects are saved in the TopLevelFeature private final List boundarySurfaceList = new ArrayList<>(); @@ -103,9 +103,6 @@ public abstract class AbstractRoom extends CityObject { cgmlRoom.setLod1Solid(null); cgmlRoom.setLod2Solid(null); cgmlRoom.setLod3Solid(null); - cgmlRoom.setLod0MultiCurve(null); - cgmlRoom.setLod2MultiCurve(null); - cgmlRoom.setLod3MultiCurve(null); } @Override 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 3e63e734..7da0c979 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 @@ -58,10 +58,6 @@ public abstract class AbstractTunnel extends CityObject { @Override public void unsetGmlGeometries() { - at.setLod0MultiCurve(null); - at.setLod2MultiCurve(null); - at.setLod3MultiCurve(null); - at.getDeprecatedProperties().setLod4MultiCurve(null); at.setLod1Solid(null); at.setLod2Solid(null); at.setLod3Solid(null); 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 b0fb5979..0fcad336 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 @@ -137,6 +137,9 @@ public class BridgeObject extends CityObject { private void setMultiSurfaceAccordingToLod(Geometry geom, MultiSurface ms) { switch (geom.getLod()) { + case LOD0: + ab.setLod0MultiSurface(new MultiSurfaceProperty(ms)); + break; case LOD1: ab.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty(ms)); break; @@ -251,11 +254,13 @@ public class BridgeObject extends CityObject { ab.setLod1Solid(null); ab.setLod2Solid(null); ab.setLod3Solid(null); + ab.getDeprecatedProperties().setLod4Solid(null); + ab.setLod0MultiSurface(null); + ab.getDeprecatedProperties().setLod1MultiSurface(null); ab.setLod2MultiSurface(null); ab.setLod3MultiSurface(null); - ab.getDeprecatedProperties().setLod1MultiSurface(null); ab.getDeprecatedProperties().setLod4MultiSurface(null); - ab.getDeprecatedProperties().setLod4Solid(null); + } @Override 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 269fa4fe..9a9bd5c8 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 @@ -15,15 +15,6 @@ public class BuildingUnit extends AbstractBuildingSubdivision { private final List storeys = new ArrayList<>(); - - @Override - public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { - super.reCreateGeometries(factory, config); - for (Storey storey : storeys) { - storey.reCreateGeometries(factory, config); - } - } - @Override public void accept(Check c) { super.accept(c); 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 4fb60367..b92ace7b 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 @@ -51,6 +51,9 @@ public class CityFurniture extends CityObject { cgmlCityFurniture.setLod1Solid(null); cgmlCityFurniture.setLod2Solid(null); cgmlCityFurniture.setLod3Solid(null); + cgmlCityFurniture.getDeprecatedProperties().setLod1Geometry(null); + cgmlCityFurniture.getDeprecatedProperties().setLod2Geometry(null); + cgmlCityFurniture.getDeprecatedProperties().setLod3Geometry(null); cgmlCityFurniture.getDeprecatedProperties().setLod4Geometry(null); } 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 cdf64c8a..d4ab4aca 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 @@ -103,7 +103,6 @@ public class LandObject extends CityObject { @Override public void unsetGmlGeometries() { - lu.setLod0MultiCurve(null); lu.setLod0MultiSurface(null); lu.setLod1MultiSurface(null); lu.setLod2MultiSurface(null); 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 43d3b550..c5cea9b5 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 @@ -19,9 +19,6 @@ public class Storey extends AbstractBuildingSubdivision { @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { super.reCreateGeometries(factory, config); - for (BuildingUnit buildingUnit : buildingUnits) { - buildingUnit.reCreateGeometries(factory, config); - } } @Override 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 e898035b..4fde9c9e 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 @@ -25,6 +25,7 @@ import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.relief.TINRelief; +import org.citygml4j.core.model.relief.TinProperty; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.primitives.AbstractRingProperty; import org.xmlobjects.gml.model.geometry.primitives.Triangle; @@ -76,6 +77,8 @@ public class TinObject extends CityObject { t.setExterior(new AbstractRingProperty(CityGmlUtils.createGmlRing(factory, config, ring))); triangles.add(t); } + this.gmlRelief.setTin(new TinProperty(surface)); + gmlRelief.setLod(geom.getLod().ordinal()); } @Override diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java index a54a1e6b..5d9a44cc 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java @@ -43,6 +43,7 @@ public class TrafficAreaObject extends TransportationObject { AuxiliaryTrafficArea ata = (AuxiliaryTrafficArea) super.getGmlObject(); setMultiSurfaceAccordingToLod(ata, ms, geom.getLod()); break; + } } else { throw new IllegalStateException("Geometry in TransportationObject cannot be of type " + geom.getType() @@ -102,6 +103,8 @@ public class TrafficAreaObject extends TransportationObject { switch (type) { case TRAFFIC_AREA: TrafficArea ta = (TrafficArea) super.getGmlObject(); + ta.setLod0MultiSurface(null); + ta.setLod1MultiSurface(null); ta.setLod2MultiSurface(null); ta.setLod3MultiSurface(null); ta.getDeprecatedProperties().setLod4MultiSurface(null); 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 f46d03bf..fb60aa91 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 @@ -7,6 +7,8 @@ import org.citygml4j.core.model.core.AbstractSpace; import org.citygml4j.core.util.geometry.GeometryFactory; 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.util.ArrayList; import java.util.List; @@ -44,9 +46,17 @@ public class TrafficSpaceObject extends TransportationObject { if (geom instanceof ImplicitGeometryHolder) { continue; } - MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); AbstractSpace ats = (AbstractSpace) super.getGmlObject(); - setMultiSurfaceAccordingToLod(ats, ms, geom.getLod()); + if (geom.getType() == GeometryType.MULTI_SURFACE || geom.getType() == GeometryType.COMPOSITE_SURFACE) { + MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); + setMultiSurfaceAccordingToLod(ats, ms, geom.getLod()); + } else if (geom.getType() == GeometryType.SOLID) { + Solid solid = CityGmlUtils.createSolid(geom, factory, config); + setSolidAccordingtoLod(ats, solid, geom.getLod()); + } else { + throw new IllegalArgumentException("Unsupported geometry type: " + geom.getType()); + } + } } @@ -62,7 +72,25 @@ public class TrafficSpaceObject extends TransportationObject { ats.setLod3MultiSurface(new MultiSurfaceProperty(ms)); break; default: - throw new IllegalStateException("cannot set geometry with LOD for AuxiliaryTrafficSpace: " + lod); + throw new IllegalStateException(String.format("Cannot set MultiSurface with LOD %s for " + + "[GML]AbstractSpace in TrafficSpaceObject ", lod)); + } + } + + private void setSolidAccordingtoLod(AbstractSpace ats, Solid solid, Lod lod) { + switch (lod) { + case LOD1: + ats.setLod1Solid(new SolidProperty(solid)); + break; + case LOD2: + ats.setLod2Solid(new SolidProperty(solid)); + break; + case LOD3: + ats.setLod3Solid(new SolidProperty(solid)); + break; + default: + throw new IllegalStateException(String.format("Cannot set MultiSurface with LOD %s for " + + "[GML]AbstractSpace in TrafficSpaceObject ", lod)); } } @@ -83,6 +111,9 @@ public class TrafficSpaceObject extends TransportationObject { ats.setLod0MultiSurface(null); ats.setLod2MultiSurface(null); ats.setLod3MultiSurface(null); + ats.setLod1Solid(null); + ats.setLod2Solid(null); + ats.setLod3Solid(null); } @Override 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 ddfc2ecc..16e7ef94 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 @@ -8,6 +8,8 @@ import org.citygml4j.core.model.transportation.AbstractTransportationSpace; import org.citygml4j.core.util.geometry.GeometryFactory; 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.util.ArrayList; import java.util.List; @@ -45,17 +47,26 @@ public abstract class TransportationSpace extends TransportationObject { if (geom instanceof ImplicitGeometryHolder) { continue; } - if (geom.getType() == GeometryType.MULTI_SURFACE) { - MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); - if (super.getGmlObject() instanceof AbstractTransportationSpace ats) { + if (super.getGmlObject() instanceof AbstractTransportationSpace ats) { + if (geom.getType() == GeometryType.MULTI_SURFACE || geom.getType() == GeometryType.COMPOSITE_SURFACE) { + MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); setMultiSurfaceAccordingToLod(ats, ms, geom.getLod()); + } else if (geom.getType() == GeometryType.SOLID) { + Solid solid = CityGmlUtils.createSolid(geom, factory, config); + setSolidAccordingToLod(ats, solid, geom.getLod()); } else { - AbstractSpace as = (AbstractSpace) super.getGmlObject(); + throw new IllegalArgumentException("Unsupported geometry type: " + geom.getType()); + } + } else if (super.getGmlObject() instanceof AbstractSpace as) { + if (geom.getType() == GeometryType.MULTI_SURFACE || geom.getType() == GeometryType.COMPOSITE_SURFACE) { + MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); setMultiSurfaceAccordingToLod(as, ms, geom.getLod()); + } else if (geom.getType() == GeometryType.SOLID) { + Solid solid = CityGmlUtils.createSolid(geom, factory, config); + setSolidAccordingToLod(as, solid, geom.getLod()); + } else { + throw new IllegalArgumentException("Unsupported geometry type: " + geom.getType()); } - } else { - throw new IllegalStateException("Geometry in TransportationObject cannot be of type " + geom.getType() - + ". Only MultiSurface allowed"); } } } @@ -67,8 +78,8 @@ public abstract class TransportationSpace extends TransportationObject { case LOD2 -> ats.setLod2MultiSurface(new MultiSurfaceProperty(ms)); case LOD3 -> ats.setLod3MultiSurface(new MultiSurfaceProperty(ms)); case LOD4 -> ats.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty(ms)); - default -> - throw new IllegalStateException("cannot set geometry with LOD for AuxiliaryTrafficSpace: " + lod); + default -> throw new IllegalStateException(String.format("Cannot set MultiSurface with LOD %s for " + + "[GML]AbstractTransportationSpace in TransportationSpace ", lod)); } } @@ -84,7 +95,28 @@ public abstract class TransportationSpace extends TransportationObject { as.setLod3MultiSurface(new MultiSurfaceProperty(ms)); break; default: - throw new IllegalStateException("cannot set geometry with LOD for AuxiliaryTrafficSpace: " + lod); + throw new IllegalStateException(String.format("Cannot set MultiSurface with LOD %s for [GML]AbstractSpace in TransportationSpace ", lod)); + } + } + + private void setSolidAccordingToLod(AbstractTransportationSpace ats, Solid solid, Lod lod) { + switch (lod) { + case LOD1 -> ats.setLod1Solid(new SolidProperty(solid)); + case LOD2 -> ats.setLod2Solid(new SolidProperty(solid)); + case LOD3 -> ats.setLod3Solid(new SolidProperty(solid)); + default -> throw new IllegalStateException(String.format("Cannot set Solid with LOD %s for " + + "[GML]AbstractTransportationSpace in TransportationSpace ", lod)); + } + } + + private void setSolidAccordingToLod(AbstractSpace ats, Solid solid, Lod lod) { + switch (lod) { + case LOD1 -> ats.setLod1Solid(new SolidProperty(solid)); + case LOD2 -> ats.setLod2Solid(new SolidProperty(solid)); + case LOD3 -> ats.setLod3Solid(new SolidProperty(solid)); + default -> + throw new IllegalStateException(String.format("Cannot set Solid with LOD %s for [GML]AbstractSpace" + + " in TransportationSpace ", lod)); } } @@ -109,6 +141,9 @@ public abstract class TransportationSpace extends TransportationObject { ats.setLod0MultiSurface(null); ats.setLod2MultiSurface(null); ats.setLod3MultiSurface(null); + ats.setLod1Solid(null); + ats.setLod2Solid(null); + ats.setLod3Solid(null); } @Override 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 00352ce7..d1f896b9 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 @@ -156,6 +156,7 @@ public class TunnelConstructiveElement extends CityObject { gmlTunnelElement.setLod1Solid(null); gmlTunnelElement.setLod2Solid(null); gmlTunnelElement.setLod3Solid(null); + } @Override 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 e16a55cd..79aec2a5 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 @@ -94,16 +94,13 @@ public class Vegetation extends CityObject { private void setSolidAccordingToLod(PlantCover pc, Solid solid, Lod lod) { switch (lod) { case LOD1: - pc.getDeprecatedProperties().setLod1MultiSolid(new MultiSolidProperty(new MultiSolid(Collections.singletonList(new SolidProperty(solid))))); + pc.setLod1Solid(new SolidProperty(solid)); break; case LOD2: - pc.getDeprecatedProperties().setLod2MultiSolid(new MultiSolidProperty(new MultiSolid(Collections.singletonList(new SolidProperty(solid))))); + pc.setLod2Solid(new SolidProperty(solid)); break; case LOD3: - pc.getDeprecatedProperties().setLod3MultiSolid(new MultiSolidProperty(new MultiSolid(Collections.singletonList(new SolidProperty(solid))))); - break; - case LOD4: - pc.getDeprecatedProperties().setLod4MultiSolid(new MultiSolidProperty(new MultiSolid(Collections.singletonList(new SolidProperty(solid))))); + pc.setLod3Solid(new SolidProperty(solid)); break; default: throw new IllegalStateException("Cannot set Solid with lod to PlantCover:" + lod); @@ -113,13 +110,13 @@ public class Vegetation extends CityObject { private void setSolidAccordingToLod(SolitaryVegetationObject svo, Solid solid, Lod lod) { switch (lod) { case LOD1: - svo.getDeprecatedProperties().setLod1Geometry(new SolidProperty(solid)); + svo.setLod1Solid(new SolidProperty(solid)); break; case LOD2: - svo.getDeprecatedProperties().setLod2Geometry(new SolidProperty(solid)); + svo.setLod2Solid(new SolidProperty(solid)); break; case LOD3: - svo.getDeprecatedProperties().setLod3Geometry(new SolidProperty(solid)); + svo.setLod3Solid(new SolidProperty(solid)); break; case LOD4: svo.getDeprecatedProperties().setLod4Geometry(new SolidProperty(solid)); @@ -131,6 +128,9 @@ public class Vegetation extends CityObject { private void setMultiSurfaceAccordingToLod(PlantCover pc, MultiSurface ms, Lod lod) { switch (lod) { + case LOD0: + pc.setLod0MultiSurface(new MultiSurfaceProperty(ms)); + break; case LOD1: pc.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty(ms)); break; @@ -151,14 +151,17 @@ public class Vegetation extends CityObject { private void setMultiSurfaceAccordingToLod(SolitaryVegetationObject svo, MultiSurface ms, Lod lod) { switch (lod) { + case LOD0: + svo.setLod0MultiSurface(new MultiSurfaceProperty(ms)); + break; case LOD1: svo.getDeprecatedProperties().setLod1Geometry(new MultiSurfaceProperty(ms)); break; case LOD2: - svo.getDeprecatedProperties().setLod2Geometry(new MultiSurfaceProperty(ms)); + svo.setLod2MultiSurface(new MultiSurfaceProperty(ms)); break; case LOD3: - svo.getDeprecatedProperties().setLod3Geometry(new MultiSurfaceProperty(ms)); + svo.setLod3MultiSurface(new MultiSurfaceProperty(ms)); break; case LOD4: svo.getDeprecatedProperties().setLod4Geometry(new MultiSurfaceProperty(ms)); @@ -196,18 +199,12 @@ public class Vegetation extends CityObject { citygmlVegetation.setLod3Solid(null); if (type == VegetationType.SOLITARY_VEGETATION_OBJECT) { SolitaryVegetationObject svo = (SolitaryVegetationObject) citygmlVegetation; - svo.setLod0MultiCurve(null); - svo.setLod2MultiCurve(null); - svo.setLod3MultiCurve(null); svo.getDeprecatedProperties().setLod1Geometry(null); svo.getDeprecatedProperties().setLod2Geometry(null); svo.getDeprecatedProperties().setLod3Geometry(null); svo.getDeprecatedProperties().setLod4Geometry(null); } else { PlantCover pc = (PlantCover) citygmlVegetation; - pc.setLod0MultiCurve(null); - pc.setLod2MultiCurve(null); - pc.setLod3MultiCurve(null); pc.getDeprecatedProperties().setLod1MultiSurface(null); pc.getDeprecatedProperties().setLod4MultiSurface(null); pc.getDeprecatedProperties().setLod1MultiSolid(null); 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 6f5c427d..278a8fad 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 @@ -30,6 +30,8 @@ import org.citygml4j.core.model.waterbody.WaterBody; import org.citygml4j.core.util.geometry.GeometryFactory; 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.ArrayList; @@ -54,16 +56,12 @@ public class WaterObject extends CityObject { @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { - if (geom.getType() == GeometryType.MULTI_SURFACE) { + if (geom.getType() == GeometryType.MULTI_SURFACE || geom.getType() == GeometryType.COMPOSITE_SURFACE) { MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); - if (geom.getLod() == Lod.LOD0) { - gmlWater.setLod0MultiSurface(new MultiSurfaceProperty(ms)); - } else if (geom.getLod() == Lod.LOD1) { - gmlWater.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty(ms)); - } else { - throw new IllegalStateException( - "Cannot add MultiSurface geometry with lod to WaterBody:" + geom.getLod()); - } + setMultiSurfaceAccordingToLod(gmlWater, ms, geom.getLod()); + } else if (geom.getType() == GeometryType.SOLID) { + Solid solid = CityGmlUtils.createSolid(geom, factory, config); + setSolidAccordingToLod(gmlWater, solid, geom.getLod()); } else { throw new IllegalStateException("Cannot add Solid geometry to WaterBody"); } @@ -71,6 +69,44 @@ public class WaterObject extends CityObject { removeEmptyBoundarySurfaces(); } + private void setMultiSurfaceAccordingToLod(WaterBody wb, MultiSurface ms, Lod lod) { + switch (lod) { + case LOD0: + wb.setLod0MultiSurface(new MultiSurfaceProperty(ms)); + break; + case LOD1: + wb.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty(ms)); + break; + case LOD2: + wb.setLod2MultiSurface(new MultiSurfaceProperty(ms)); + break; + case LOD3: + wb.setLod3MultiSurface(new MultiSurfaceProperty(ms)); + break; + default: + throw new IllegalStateException("Cannot set MultiSurface with lod to WaterBody:" + lod); + } + } + + private void setSolidAccordingToLod(WaterBody wb, Solid solid, Lod lod) { + switch (lod) { + case LOD1: + wb.setLod1Solid(new SolidProperty(solid)); + break; + case LOD2: + wb.setLod2Solid(new SolidProperty(solid)); + break; + case LOD3: + wb.setLod3Solid(new SolidProperty(solid)); + break; + case LOD4: + wb.getDeprecatedProperties().setLod4Solid(new SolidProperty(solid)); + break; + default: + throw new IllegalStateException("Cannot set MultiSurface with lod to SolitaryVegetationObject:" + lod); + } + } + private void removeEmptyBoundarySurfaces() { for (BoundarySurface bs : boundarySurfaceList) { if (bs.getGeometries().isEmpty()) { @@ -135,10 +171,6 @@ public class WaterObject extends CityObject { gmlWater.setLod2Solid(null); gmlWater.setLod3Solid(null); gmlWater.getDeprecatedProperties().setLod4Solid(null); - gmlWater.setLod0MultiCurve(null); - gmlWater.getDeprecatedProperties().setLod1MultiCurve(null); - gmlWater.setLod2MultiCurve(null); - gmlWater.setLod3MultiCurve(null); } @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 98dbe2e7..d8913ae6 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 @@ -41,13 +41,7 @@ import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; import org.mockito.Mockito; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; -import org.xmlobjects.gml.model.geometry.primitives.AbstractRing; -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.Solid; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; -import org.xmlobjects.gml.model.geometry.primitives.SurfaceProperty; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.check.CheckError; @@ -178,46 +172,48 @@ public class AbstractBuildingTest { @Test public void testReCreateGeometriesSolid() { - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.SOLID); - AbstractBuilding ab = createAbstractBuilding(); org.citygml4j.core.model.building.AbstractBuilding gmlAb = new org.citygml4j.core.model.building.Building(); ab.setCityGmlBuilding(gmlAb); - ab.addGeometry(geom); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD4)); + GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); ab.reCreateGeometries(factory, config); - AbstractSolid aSolid = gmlAb.getLod2Solid().getObject(); - assertTrue(aSolid instanceof Solid); - Solid solid = (Solid) aSolid; - Shell geometry = solid.getExterior().getObject(); - List surfaceMember = geometry.getSurfaceMembers(); - assertEquals(1, surfaceMember.size()); - AbstractSurface polySurface = surfaceMember.get(0).getObject(); - assertTrue(polySurface instanceof org.xmlobjects.gml.model.geometry.primitives.Polygon); - var gmlPoly = (org.xmlobjects.gml.model.geometry.primitives.Polygon) polySurface; - AbstractRing ring = gmlPoly.getExterior().getObject(); - var gmlRing = (org.xmlobjects.gml.model.geometry.primitives.LinearRing) ring; - List posList = gmlRing.toCoordinateList3D(); - double[] expectedValues = GeometryTestUtils.getExpectedValues(); - for (int i = 0; i < posList.size(); i++) { - assertEquals(expectedValues[i], posList.get(i), 0.00000001); - } + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAb.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAb.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAb.getLod3Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAb.getDeprecatedProperties().getLod4Solid().getObject()); } @Test public void testReCreateGeometriesMultiSurface() { - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE); - AbstractBuilding ab = createAbstractBuilding(); org.citygml4j.core.model.building.AbstractBuilding gmlAb = new org.citygml4j.core.model.building.Building(); ab.setCityGmlBuilding(gmlAb); - ab.addGeometry(geom); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); ab.reCreateGeometries(factory, config); + + assertNotNull(gmlAb.getLod0MultiSurface()); + assertNotNull(gmlAb.getLod0MultiSurface().getObject()); + assertNotNull(gmlAb.getDeprecatedProperties().getLod1MultiSurface()); + assertNotNull(gmlAb.getDeprecatedProperties().getLod1MultiSurface().getObject()); assertNotNull(gmlAb.getLod2MultiSurface()); assertNotNull(gmlAb.getLod2MultiSurface().getObject()); + assertNotNull(gmlAb.getLod3MultiSurface()); + assertNotNull(gmlAb.getLod3MultiSurface().getObject()); + assertNotNull(gmlAb.getDeprecatedProperties().getLod4MultiSurface()); + assertNotNull(gmlAb.getDeprecatedProperties().getLod4MultiSurface().getObject()); } @Test 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 e3369010..fca90418 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,7 +1,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import org.citygml4j.core.model.core.AbstractSpaceBoundary; +import org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.visitor.ObjectVisitor; import org.junit.Before; import org.junit.Test; @@ -10,12 +12,13 @@ import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; public class AbstractRoomTest { - //TODO: Add RecreateGeometries test - AbstractRoom ab; @Before @@ -33,9 +36,11 @@ public class AbstractRoomTest { Installation mockInstallation = Mockito.mock(Installation.class); BoundarySurface mockBoundarySurface = Mockito.mock(BoundarySurface.class); + Geometry geometry = Mockito.mock(Geometry.class); ab.addRoomInstallation(mockInstallation); ab.addBoundarySurface(mockBoundarySurface); + ab.addGeometry(geometry); AbstractCheck c = new AbstractCheck() { }; @@ -43,6 +48,7 @@ public class AbstractRoomTest { Mockito.verify(mockInstallation).accept(c); Mockito.verify(mockBoundarySurface).accept(c); + Mockito.verify(geometry).accept(c); } @Test @@ -65,12 +71,8 @@ public class AbstractRoomTest { gmlAUS.setLod0MultiSurface(new MultiSurfaceProperty()); gmlAUS.setLod2MultiSurface(new MultiSurfaceProperty()); gmlAUS.setLod3MultiSurface(new MultiSurfaceProperty()); - gmlAUS.setLod0MultiCurve(new MultiCurveProperty()); - gmlAUS.setLod2MultiCurve(new MultiCurveProperty()); - gmlAUS.setLod3MultiCurve(new MultiCurveProperty()); ab.cgmlRoom = gmlAUS; - ab.clearGmlGeometries(); assertNull(gmlAUS.getLod1Solid()); @@ -79,11 +81,63 @@ public class AbstractRoomTest { assertNull(gmlAUS.getLod0MultiSurface()); assertNull(gmlAUS.getLod2MultiSurface()); assertNull(gmlAUS.getLod3MultiSurface()); - assertNull(gmlAUS.getLod0MultiCurve()); - assertNull(gmlAUS.getLod2MultiCurve()); - assertNull(gmlAUS.getLod3MultiCurve()); + } + + @Test + public void testReCreateGeometriesSolid() { + org.citygml4j.core.model.core.AbstractUnoccupiedSpace gmlAUS = new org.citygml4j.core.model.core.AbstractUnoccupiedSpace() { + @Override + public void accept(ObjectVisitor visitor) { + return; + } + @Override + public boolean isValidBoundary(Class type) { + return false; + } + }; + ab.cgmlRoom = gmlAUS; + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + ab.reCreateGeometries(factory, config); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAUS.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAUS.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAUS.getLod3Solid().getObject()); + } + + @Test + public void testReCreateGeometriesMultiSurface() { + org.citygml4j.core.model.core.AbstractUnoccupiedSpace gmlAUS = new org.citygml4j.core.model.core.AbstractUnoccupiedSpace() { + @Override + public void accept(ObjectVisitor visitor) { + return; + } + + @Override + public boolean isValidBoundary(Class type) { + return false; + } + }; + ab.cgmlRoom = gmlAUS; + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + ab.reCreateGeometries(factory, config); + + assertNotNull(gmlAUS.getLod0MultiSurface()); + assertNotNull(gmlAUS.getLod0MultiSurface().getObject()); + assertNotNull(gmlAUS.getLod2MultiSurface()); + assertNotNull(gmlAUS.getLod2MultiSurface().getObject()); + assertNotNull(gmlAUS.getLod3MultiSurface()); + assertNotNull(gmlAUS.getLod3MultiSurface().getObject()); } } 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 bcc7926e..c5680436 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,10 +1,11 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; +import org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.visitor.ObjectVisitor; import org.junit.Before; import org.junit.Test; -import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; @@ -14,8 +15,6 @@ import static org.mockito.Mockito.verify; public class AbstractTunnelTest { - // TODO: Implement recreateGeometriesTest - AbstractTunnel at; @Before @@ -67,13 +66,8 @@ public class AbstractTunnelTest { } }; - at.setGmlObject(gmlAt); - gmlAt.setLod0MultiCurve(new MultiCurveProperty()); - gmlAt.setLod2MultiCurve(new MultiCurveProperty()); - gmlAt.setLod3MultiCurve(new MultiCurveProperty()); - gmlAt.getDeprecatedProperties().setLod4MultiCurve(new MultiCurveProperty()); gmlAt.setLod0MultiSurface(new MultiSurfaceProperty()); gmlAt.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty()); gmlAt.setLod2MultiSurface(new MultiSurfaceProperty()); @@ -86,10 +80,6 @@ public class AbstractTunnelTest { at.clearGmlGeometries(); - assertNull(gmlAt.getLod0MultiCurve()); - assertNull(gmlAt.getLod2MultiCurve()); - assertNull(gmlAt.getLod3MultiCurve()); - assertNull(gmlAt.getDeprecatedProperties().getLod4MultiCurve()); assertNull(gmlAt.getLod0MultiSurface()); assertNull(gmlAt.getDeprecatedProperties().getLod1MultiSurface()); assertNull(gmlAt.getLod2MultiSurface()); @@ -102,8 +92,57 @@ public class AbstractTunnelTest { } @Test - public void testReCreateGeometry() { + public void testReCreateGeometriesSolid() { + org.citygml4j.core.model.tunnel.AbstractTunnel gmlAt = new org.citygml4j.core.model.tunnel.AbstractTunnel() { + @Override + public void accept(ObjectVisitor visitor) { + + } + }; + at.setGmlObject(gmlAt); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + at.reCreateGeometries(factory, config); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAt.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAt.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAt.getLod3Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAt.getDeprecatedProperties().getLod4Solid().getObject()); + } + + @Test + public void testReCreateGeometriesMultiSurface() { + org.citygml4j.core.model.tunnel.AbstractTunnel gmlAt = new org.citygml4j.core.model.tunnel.AbstractTunnel() { + @Override + public void accept(ObjectVisitor visitor) { + } + }; + at.setGmlObject(gmlAt); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + at.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + at.reCreateGeometries(factory, config); + + assertNotNull(gmlAt.getLod0MultiSurface()); + assertNotNull(gmlAt.getLod0MultiSurface().getObject()); + assertNotNull(gmlAt.getDeprecatedProperties().getLod1MultiSurface()); + assertNotNull(gmlAt.getDeprecatedProperties().getLod1MultiSurface().getObject()); + assertNotNull(gmlAt.getLod2MultiSurface()); + assertNotNull(gmlAt.getLod2MultiSurface().getObject()); + assertNotNull(gmlAt.getLod3MultiSurface()); + assertNotNull(gmlAt.getLod3MultiSurface().getObject()); + assertNotNull(gmlAt.getDeprecatedProperties().getLod4MultiSurface()); + assertNotNull(gmlAt.getDeprecatedProperties().getLod4MultiSurface().getObject()); } } \ No newline at end of file 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 da2976b9..458739ac 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 @@ -24,6 +24,7 @@ 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.verify; import java.util.ArrayList; import java.util.List; @@ -51,6 +52,19 @@ public class BoundarySurfaceTest { //Todo: Check this class for rework potential with the new Visitors + @Test + public void testVisitorPropagation() { + BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null); + Opening oMock = Mockito.mock(Opening.class); + bs.addOpening(oMock); + + AbstractCheck c = new AbstractCheck() { + }; + bs.accept(c); + + verify(oMock).accept(c); + } + @Test public void testAccept() { BoundarySurface bs = new BoundarySurface(SurfaceFeatureType.BUILDING, BoundarySurfaceType.WALL, null); @@ -65,7 +79,7 @@ public class BoundarySurfaceTest { } }; bs.accept(c); - Mockito.verify(oMock).accept(c); + verify(oMock).accept(c); assertEquals(1, bsCounter.intValue()); } @@ -83,7 +97,7 @@ public class BoundarySurfaceTest { } }; bs.accept(c); - Mockito.verify(oMock).accept(c); + verify(oMock).accept(c); assertEquals(0, bsCounter.intValue()); } @@ -94,7 +108,7 @@ public class BoundarySurfaceTest { Geometry spyGeom = Mockito.spy(geom); bs.addGeometry(spyGeom); bs.prepareForChecking(); - Mockito.verify(spyGeom).updateEdgesAndVertices(); + verify(spyGeom).updateEdgesAndVertices(); } @Test @@ -128,7 +142,7 @@ public class BoundarySurfaceTest { assertFalse(bs.getAllCheckResults().isEmpty()); bs.addOpening(oMock); bs.clearAllContainedCheckResults(); - Mockito.verify(oMock).accept(any(ClearCheckResultsVisitor.class)); + verify(oMock).accept(any(ClearCheckResultsVisitor.class)); assertTrue(bs.getAllCheckResults().isEmpty()); } @@ -304,7 +318,7 @@ public class BoundarySurfaceTest { GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); bs.reCreateGeometries(factory, config); - Mockito.verify(oMock).accept(any(GmlGeometryRebuilder.class)); + verify(oMock).accept(any(GmlGeometryRebuilder.class)); } @Test @@ -327,7 +341,7 @@ public class BoundarySurfaceTest { Opening oMock = Mockito.mock(Opening.class); bs.addOpening(oMock); bs.accept(new UnsetGeometriesVisitor()); - Mockito.verify(oMock).accept(any(UnsetGeometriesVisitor.class)); + verify(oMock).accept(any(UnsetGeometriesVisitor.class)); assertNull(ws.getLod2MultiSurface()); assertNull(ws.getLod3MultiSurface()); assertNull(ws.getDeprecatedProperties().getLod4MultiSurface()); 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 6ff98de1..69f3bae9 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 @@ -35,10 +35,10 @@ 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.bridge.AbstractBridge; -import org.citygml4j.core.model.bridge.Bridge; import org.citygml4j.core.model.core.AbstractThematicSurface; 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 de.hft.stuttgart.citydoctor2.check.AbstractCheck; @@ -161,120 +161,62 @@ public class BridgeObjectTest { bo.reCreateGeometries(factoryMock, configMock); verify(bsMock).accept(any(GmlGeometryRebuilder.class)); } - - @Test - public void testReCreateGeometriesMultiSurfaceLod1() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1); - AbstractBridge ab = new Bridge(); - bo.setGmlObject(ab); - bo.addGeometry(geom); - GeometryFactory factory = GeometryFactory.newInstance(); - ParserConfiguration config = new ParserConfiguration(8, false); - bo.reCreateGeometries(factory, config); - assertNotNull(ab.getDeprecatedProperties().getLod1MultiSurface()); - assertNotNull(ab.getDeprecatedProperties().getLod1MultiSurface().getObject()); - } - - @Test - public void testReCreateGeometriesMultiSurfaceLod2() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2); - AbstractBridge ab = new Bridge(); - bo.setGmlObject(ab); - bo.addGeometry(geom); - GeometryFactory factory = GeometryFactory.newInstance(); - ParserConfiguration config = new ParserConfiguration(8, false); - bo.reCreateGeometries(factory, config); - assertNotNull(ab.getLod2MultiSurface()); - assertNotNull(ab.getLod2MultiSurface().getObject()); - } - - @Test - public void testReCreateGeometriesMultiSurfaceLod3() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3); - AbstractBridge ab = new Bridge(); - bo.setGmlObject(ab); - bo.addGeometry(geom); - GeometryFactory factory = GeometryFactory.newInstance(); - ParserConfiguration config = new ParserConfiguration(8, false); - bo.reCreateGeometries(factory, config); - assertNotNull(ab.getLod3MultiSurface()); - assertNotNull(ab.getLod3MultiSurface().getObject()); - } - @Test - public void testReCreateGeometriesMultiSurfaceLod4() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4); - AbstractBridge ab = new Bridge(); - bo.setGmlObject(ab); - bo.addGeometry(geom); - GeometryFactory factory = GeometryFactory.newInstance(); - ParserConfiguration config = new ParserConfiguration(8, false); - bo.reCreateGeometries(factory, config); - assertNotNull(ab.getDeprecatedProperties().getLod4MultiSurface()); - assertNotNull(ab.getDeprecatedProperties().getLod4MultiSurface().getObject()); - } - - @Test - public void testReCreateGeometriesSolidLod1() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1); - AbstractBridge ab = new Bridge(); - bo.setGmlObject(ab); - bo.addGeometry(geom); - GeometryFactory factory = GeometryFactory.newInstance(); - ParserConfiguration config = new ParserConfiguration(8, false); - bo.reCreateGeometries(factory, config); - assertNotNull(ab.getLod1Solid()); - assertNotNull(ab.getLod1Solid().getObject()); - } - - @Test - public void testReCreateGeometriesSolidLod2() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2); - AbstractBridge ab = new Bridge(); - bo.setGmlObject(ab); - bo.addGeometry(geom); - GeometryFactory factory = GeometryFactory.newInstance(); - ParserConfiguration config = new ParserConfiguration(8, false); - bo.reCreateGeometries(factory, config); - assertNotNull(ab.getLod2Solid()); - assertNotNull(ab.getLod2Solid().getObject()); - } - - @Test - public void testReCreateGeometriesSolidLod3() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3); - AbstractBridge ab = new Bridge(); - bo.setGmlObject(ab); - bo.addGeometry(geom); + public void testReCreateGeometriesSolid() { + org.citygml4j.core.model.bridge.AbstractBridge gmlBr = new AbstractBridge() { + @Override + public void accept(ObjectVisitor visitor) { + + } + }; + BridgeObject bo = new BridgeObject(gmlBr); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD4)); + GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); bo.reCreateGeometries(factory, config); - assertNotNull(ab.getLod3Solid()); - assertNotNull(ab.getLod3Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlBr.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlBr.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlBr.getLod3Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlBr.getDeprecatedProperties().getLod4Solid().getObject()); } - + @Test - public void testReCreateGeometriesSolidLod4() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - Geometry geom = GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD4); - AbstractBridge ab = new Bridge(); - bo.setGmlObject(ab); - bo.addGeometry(geom); + public void testReCreateGeometriesMultiSurface() { + org.citygml4j.core.model.bridge.AbstractBridge gmlBr = new AbstractBridge() { + @Override + public void accept(ObjectVisitor visitor) { + + } + }; + BridgeObject bo = new BridgeObject(gmlBr); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + bo.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); bo.reCreateGeometries(factory, config); - assertNotNull(ab.getDeprecatedProperties().getLod4Solid()); - assertNotNull(ab.getDeprecatedProperties().getLod4Solid().getObject()); + + assertNotNull(gmlBr.getLod0MultiSurface()); + assertNotNull(gmlBr.getLod0MultiSurface().getObject()); + assertNotNull(gmlBr.getDeprecatedProperties().getLod1MultiSurface()); + assertNotNull(gmlBr.getDeprecatedProperties().getLod1MultiSurface().getObject()); + assertNotNull(gmlBr.getLod2MultiSurface()); + assertNotNull(gmlBr.getLod2MultiSurface().getObject()); + assertNotNull(gmlBr.getLod3MultiSurface()); + assertNotNull(gmlBr.getLod3MultiSurface().getObject()); + assertNotNull(gmlBr.getDeprecatedProperties().getLod4MultiSurface()); + assertNotNull(gmlBr.getDeprecatedProperties().getLod4MultiSurface().getObject()); } + @Test public void testUnsetGmlGeometries() { AbstractBridge abMock = mock(AbstractBridge.class); 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 bee20b00..45855654 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 @@ -161,8 +161,6 @@ public class BuildingTest { verify(mockBuildingRoomFurniture, times(2)).accept(c); verify(mockBuildingUnit, times(2)).accept(c); verify(mockStorey, times(2)).accept(c); - - } } diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java index f4296711..83004568 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java @@ -1,26 +1,85 @@ package de.hft.stuttgart.citydoctor2.datastructure; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; +import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import static org.junit.Assert.*; public class CityFurnitureTest { - //TODO: Implement testcases - - @Test - public void accept() { - } @Test public void unsetGmlGeometries() { + CityFurniture cf = new CityFurniture(); + org.citygml4j.core.model.cityfurniture.CityFurniture cgmlCF = new org.citygml4j.core.model.cityfurniture.CityFurniture(); + cf.setGmlObject(cgmlCF); + + cgmlCF.setLod0MultiSurface(new MultiSurfaceProperty()); + cgmlCF.setLod2MultiSurface(new MultiSurfaceProperty()); + cgmlCF.setLod3MultiSurface(new MultiSurfaceProperty()); + cgmlCF.setLod1Solid(null); + cgmlCF.setLod2Solid(null); + cgmlCF.setLod3Solid(null); + cgmlCF.getDeprecatedProperties().setLod1Geometry(null); + cgmlCF.getDeprecatedProperties().setLod2Geometry(null); + cgmlCF.getDeprecatedProperties().setLod3Geometry(null); + cgmlCF.getDeprecatedProperties().setLod4Geometry(null); + + cf.clearGmlGeometries(); + + assertNull(cgmlCF.getLod0MultiSurface()); + assertNull(cgmlCF.getLod2MultiSurface()); + assertNull(cgmlCF.getLod3MultiSurface()); + assertNull(cgmlCF.getLod1Solid()); + assertNull(cgmlCF.getLod2Solid()); + assertNull(cgmlCF.getLod3Solid()); + assertNull(cgmlCF.getDeprecatedProperties().getLod1Geometry()); + assertNull(cgmlCF.getDeprecatedProperties().getLod2Geometry()); + assertNull(cgmlCF.getDeprecatedProperties().getLod3Geometry()); + assertNull(cgmlCF.getDeprecatedProperties().getLod4Geometry()); + } @Test - public void getTopLevelCityObject() { + public void testReCreateGeometriesSolid() { + CityFurniture cf = new CityFurniture(); + org.citygml4j.core.model.cityfurniture.CityFurniture cgmlCF = new org.citygml4j.core.model.cityfurniture.CityFurniture(); + cf.setGmlObject(cgmlCF); + cf.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + cf.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + cf.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + cf.reCreateGeometries(factory, config); + GeometryTestUtils.assertSolidMatchesExpectedValues(cgmlCF.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(cgmlCF.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(cgmlCF.getLod3Solid().getObject()); } + @Test - public void reCreateGeometries() { + public void testReCreateGeometriesMultiSurface() { + CityFurniture cf = new CityFurniture(); + org.citygml4j.core.model.cityfurniture.CityFurniture cgmlCF = new org.citygml4j.core.model.cityfurniture.CityFurniture(); + cf.setGmlObject(cgmlCF); + cf.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + cf.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + cf.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + cf.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + cf.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + cf.reCreateGeometries(factory, config); + + assertNotNull(cgmlCF.getLod0MultiSurface()); + assertNotNull(cgmlCF.getLod0MultiSurface().getObject()); + assertNotNull(cgmlCF.getLod2MultiSurface()); + assertNotNull(cgmlCF.getLod2MultiSurface().getObject()); + assertNotNull(cgmlCF.getLod3MultiSurface()); + assertNotNull(cgmlCF.getLod3MultiSurface().getObject()); } } \ No newline at end of file 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 6bef059e..de1b22ff 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 @@ -2,19 +2,21 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; 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 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 { - //TODO: Look for rework potential with visitors - CityObject co; @Test @@ -33,26 +35,63 @@ public class CityObjectTest { @Test public void testClearGmlGeometries() { + CityObject spyCo = Mockito.spy(co); + spyCo.clearGmlGeometries(); + + verify(spyCo).accept(any(UnsetGeometriesVisitor.class)); + verify(spyCo).unsetGmlGeometries(); } + @Test + public void testReCreateGmlGeometries() { + CityObject spyCo = Mockito.spy(co); + spyCo.reCreateGeometries(mock(GeometryFactory.class), mock(ParserConfiguration.class)); + + verify(spyCo).accept(any(GmlGeometryRebuilder.class)); + verify(spyCo).rebuildGeometries(any(GeometryFactory.class), any(ParserConfiguration.class)); + } + @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); assertNull(co.getHighestLodGeometry()); - co.addGeometry(geometryLod1); assertEquals(geometryLod1, co.getHighestLodGeometry()); - co.addGeometry(geometryLod2); assertEquals(geometryLod2, co.getHighestLodGeometry()); - co.addGeometry(geometryLod3); + assertEquals(geometryLod3, co.getHighestLodGeometry()); + co.addGeometry(geometryLod4); + assertEquals(geometryLod4, co.getHighestLodGeometry()); + setUp(); + + assertNull(co.getHighestLodGeometry()); + co.addGeometry(geometryLod2); + assertEquals(geometryLod2, co.getHighestLodGeometry()); + co.addGeometry(geometryLod1); + assertEquals(geometryLod2, co.getHighestLodGeometry()); + co.addGeometry(geometryLod3); assertEquals(geometryLod3, co.getHighestLodGeometry()); + co.addGeometry(geometryLod4); + assertEquals(geometryLod4, co.getHighestLodGeometry()); + + setUp(); + + assertNull(co.getHighestLodGeometry()); + co.addGeometry(geometryLod4); + assertEquals(geometryLod4, co.getHighestLodGeometry()); + co.addGeometry(geometryLod1); + assertEquals(geometryLod4, co.getHighestLodGeometry()); + co.addGeometry(geometryLod2); + assertEquals(geometryLod4, co.getHighestLodGeometry()); + co.addGeometry(geometryLod3); + assertEquals(geometryLod4, co.getHighestLodGeometry()); } @Before @@ -60,7 +99,7 @@ public class CityObjectTest { co = new CityObject() { @Override public void rebuildGeometries(GeometryFactory factory, ParserConfiguration config) { - + // Stub for testing } @Override @@ -70,7 +109,7 @@ public class CityObjectTest { @Override public void unsetGmlGeometries() { - + // Stub for testing } @Override 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 78d01667..a5c17861 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,7 +1,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import org.citygml4j.core.model.generics.GenericOccupiedSpace; +import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; @@ -12,8 +14,6 @@ import static org.mockito.Mockito.verify; public class GenericCityObjectTest { - //TODO: Implement RecreateGeometries testcase - @Test public void testVisitorPropagation() { GenericCityObject gco = new GenericCityObject(); @@ -64,8 +64,44 @@ public class GenericCityObjectTest { } @Test - public void testReCreateGmlGeometries() { + public void testReCreateGeometriesSolid() { + GenericCityObject gco = new GenericCityObject(); + GenericOccupiedSpace gmlGos = new GenericOccupiedSpace(); + gco.setGmlObject(gmlGos); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + gco.reCreateGeometries(factory, config); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlGos.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlGos.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlGos.getLod3Solid().getObject()); + } + + @Test + public void testReCreateGeometriesMultiSurface() { GenericCityObject gco = new GenericCityObject(); + GenericOccupiedSpace gmlGos = new GenericOccupiedSpace(); + gco.setGmlObject(gmlGos); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + gco.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + gco.reCreateGeometries(factory, config); + + assertNotNull(gmlGos.getLod0MultiSurface()); + assertNotNull(gmlGos.getLod0MultiSurface().getObject()); + assertNotNull(gmlGos.getLod2MultiSurface()); + assertNotNull(gmlGos.getLod2MultiSurface().getObject()); + assertNotNull(gmlGos.getLod3MultiSurface()); + assertNotNull(gmlGos.getLod3MultiSurface().getObject()); } } \ No newline at end of file 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 8a259253..95a0fe0f 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 @@ -19,6 +19,17 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; +import org.xmlobjects.gml.model.geometry.primitives.AbstractRing; +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.Solid; +import org.xmlobjects.gml.model.geometry.primitives.SurfaceProperty; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class GeometryTestUtils { @@ -97,4 +108,22 @@ public class GeometryTestUtils { return geom; } + public static void assertSolidMatchesExpectedValues(AbstractSolid aSolid) { + assertTrue(aSolid instanceof Solid); + Solid solid = (Solid) aSolid; + Shell geometry = solid.getExterior().getObject(); + List surfaceMember = geometry.getSurfaceMembers(); + assertEquals(1, surfaceMember.size()); + AbstractSurface polySurface = surfaceMember.get(0).getObject(); + assertTrue(polySurface instanceof org.xmlobjects.gml.model.geometry.primitives.Polygon); + var gmlPoly = (org.xmlobjects.gml.model.geometry.primitives.Polygon) polySurface; + AbstractRing ring = gmlPoly.getExterior().getObject(); + var gmlRing = (org.xmlobjects.gml.model.geometry.primitives.LinearRing) ring; + List posList = gmlRing.toCoordinateList3D(); + double[] expectedValues = getExpectedValues(); + for (int i = 0; i < posList.size(); i++) { + assertEquals(expectedValues[i], posList.get(i), 0.00000001); + } + } + } diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandObjectTest.java deleted file mode 100644 index 7fadaf37..00000000 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandObjectTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package de.hft.stuttgart.citydoctor2.datastructure; - -import de.hft.stuttgart.citydoctor2.check.AbstractCheck; -import org.citygml4j.core.model.landuse.LandUse; -import org.citygml4j.core.model.relief.ReliefFeature; -import org.citygml4j.core.model.relief.TINRelief; -import org.citygml4j.core.model.relief.TinProperty; -import org.junit.Test; -import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; -import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -public class LandObjectTest { - - @Test - public void testVisitorPropagationReliefObject() { - ReliefFeature mockRelief = new ReliefFeature(); - ReliefObject relief = new ReliefObject(mockRelief); - TinObject mockTin = mock(TinObject.class); - relief.addComponent(mockTin); - - AbstractCheck c = new AbstractCheck() { - }; - relief.accept(c); - - verify(mockTin).accept(c); - } - - @Test - public void testUnsetGeometriesTinObject() { - TINRelief tir = new TINRelief(); - TinObject tin = new TinObject(tir); - - tir.setTin(new TinProperty()); - - tin.clearGmlGeometries(); - - assertNull(tir.getTin()); - } - - @Test - public void testUnsetGeometriesLandUse() { - LandUse lu = new LandUse(); - LandObject land = new LandObject(lu); - - lu.setLod0MultiCurve(new MultiCurveProperty()); - lu.setLod0MultiSurface(new MultiSurfaceProperty()); - lu.setLod1MultiSurface(new MultiSurfaceProperty()); - lu.setLod2MultiSurface(new MultiSurfaceProperty()); - lu.setLod3MultiSurface(new MultiSurfaceProperty()); - lu.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty()); - - land.clearGmlGeometries(); - - assertNull(lu.getLod0MultiCurve()); - assertNull(lu.getLod0MultiSurface()); - assertNull(lu.getLod1MultiSurface()); - assertNull(lu.getLod2MultiSurface()); - assertNull(lu.getLod3MultiSurface()); - assertNull(lu.getDeprecatedProperties().getLod4MultiSurface()); - } - -} \ No newline at end of file diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandUseTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandUseTest.java new file mode 100644 index 00000000..b41f7ca3 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandUseTest.java @@ -0,0 +1,60 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; +import org.citygml4j.core.model.landuse.LandUse; +import org.citygml4j.core.util.geometry.GeometryFactory; +import org.junit.Test; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; + +import static org.junit.Assert.*; + +public class LandUseTest { + + @Test + public void testUnsetGeometries() { + LandUse lu = new LandUse(); + LandObject land = new LandObject(lu); + + lu.setLod0MultiSurface(new MultiSurfaceProperty()); + lu.setLod1MultiSurface(new MultiSurfaceProperty()); + lu.setLod2MultiSurface(new MultiSurfaceProperty()); + lu.setLod3MultiSurface(new MultiSurfaceProperty()); + lu.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty()); + + land.clearGmlGeometries(); + + assertNull(lu.getLod0MultiSurface()); + assertNull(lu.getLod1MultiSurface()); + assertNull(lu.getLod2MultiSurface()); + assertNull(lu.getLod3MultiSurface()); + assertNull(lu.getDeprecatedProperties().getLod4MultiSurface()); + } + + @Test + public void testReCreateGeometries() { + LandUse lu = new LandUse(); + LandObject land = new LandObject(lu); + land.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + land.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + land.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + land.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + land.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + land.reCreateGeometries(factory, config); + + assertNotNull(lu.getLod0MultiSurface()); + assertNotNull(lu.getLod0MultiSurface().getObject()); + assertNotNull(lu.getLod1MultiSurface()); + assertNotNull(lu.getLod1MultiSurface().getObject()); + assertNotNull(lu.getLod2MultiSurface()); + assertNotNull(lu.getLod2MultiSurface().getObject()); + assertNotNull(lu.getLod3MultiSurface()); + assertNotNull(lu.getLod3MultiSurface().getObject()); + assertNotNull(lu.getDeprecatedProperties().getLod4MultiSurface()); + assertNotNull(lu.getDeprecatedProperties().getLod4MultiSurface().getObject()); + } + + +} \ No newline at end of file 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 new file mode 100644 index 00000000..35d16bbe --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObjectTest.java @@ -0,0 +1,60 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; +import org.citygml4j.core.model.relief.ReliefFeature; +import org.citygml4j.core.model.relief.TINRelief; +import org.citygml4j.core.model.relief.TinProperty; +import org.citygml4j.core.util.geometry.GeometryFactory; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class ReliefObjectTest { + + @Test + public void testVisitorPropagationReliefObject() { + ReliefFeature mockRelief = new ReliefFeature(); + ReliefObject relief = new ReliefObject(mockRelief); + TinObject mockTin = mock(TinObject.class); + relief.addComponent(mockTin); + + AbstractCheck c = new AbstractCheck() { + }; + relief.accept(c); + + verify(mockTin).accept(c); + } + + @Test + public void testUnsetGeometriesTinObject() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + + tir.setTin(new TinProperty()); + + tin.clearGmlGeometries(); + + assertNull(tir.getTin()); + } + + @Test + public void testReCreateGeometriesTinObject() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + + tin.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + tin.reCreateGeometries(factory, config); + + assertNotNull(tir.getTin()); + assertNotNull(tir.getTin().getObject()); + assertEquals(2, tir.getLod()); + } +} 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 new file mode 100644 index 00000000..fa0e1fd3 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TopLevelTransportFeatureTest.java @@ -0,0 +1,156 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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 org.citygml4j.core.model.deprecated.transportation.DeprecatedPropertiesOfAbstractTransportationSpace; +import org.citygml4j.core.model.transportation.Railway; +import org.citygml4j.core.model.transportation.Road; +import org.citygml4j.core.model.transportation.Square; +import org.citygml4j.core.model.transportation.Track; +import org.citygml4j.core.model.transportation.Waterway; +import org.citygml4j.core.util.geometry.GeometryFactory; +import org.junit.Test; +import org.mockito.Mockito; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class TopLevelTransportFeatureTest { + + @Test + public void testObjectConstruction() { + TopLevelTransportFeature road = TopLevelTransportFeature.from(Mockito.mock(Road.class)); + assertEquals(TransportationObject.TransportationType.ROAD, road.getTransportationType()); + TopLevelTransportFeature track = TopLevelTransportFeature.from(Mockito.mock(Track.class)); + assertEquals(TransportationObject.TransportationType.TRACK, track.getTransportationType()); + TopLevelTransportFeature waterway = TopLevelTransportFeature.from(Mockito.mock(Waterway.class)); + assertEquals(TransportationObject.TransportationType.WATERWAY, waterway.getTransportationType()); + TopLevelTransportFeature railway = TopLevelTransportFeature.from(Mockito.mock(Railway.class)); + assertEquals(TransportationObject.TransportationType.RAILWAY, railway.getTransportationType()); + TopLevelTransportFeature square = TopLevelTransportFeature.from(Mockito.mock(Square.class)); + assertEquals(TransportationObject.TransportationType.SQUARE, square.getTransportationType()); + } + + @Test + public void testVisitorPropagationTopLevel() { + Road road = new Road(); + TopLevelTransportFeature top = TopLevelTransportFeature.from(road); + TransportSection mockSection = mock(TransportSection.class); + TransportSection mockIntersection = mock(TransportSection.class); + top.addSection(mockSection); + top.addIntersection(mockIntersection); + + AbstractCheck c = new AbstractCheck() { + }; + top.accept(c); + + verify(mockSection).accept(c); + verify(mockIntersection).accept(c); + } + + @Test + public void testClearAllContainedCheckResults() { + Road roadMock = mock(Road.class); + TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); + + assertFalse(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + top.clearAllContainedCheckResults(); + assertFalse(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + + } + + @Test + public void testCollectContainedErrors() { + Road roadMock = mock(Road.class); + TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); + top.setGmlObject(roadMock); + + top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + top.collectContainedErrors(errors); + assertEquals(1, errors.size()); + + } + + @Test + public void testUnsetGmlGeometries() { + Road r = mock(Road.class); + TopLevelTransportFeature top = TopLevelTransportFeature.from(r); + top.setGmlObject(r); + + DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class); + when(r.getDeprecatedProperties()).thenReturn(dSpace); + + dSpace.setLod1MultiSurface(mock(MultiSurfaceProperty.class)); + r.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); + r.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); + dSpace.setLod4MultiSurface(mock(MultiSurfaceProperty.class)); + + top.unsetGmlGeometries(); + assertNull(dSpace.getLod1MultiSurface()); + assertNull(r.getLod2MultiSurface()); + assertNull(r.getLod3MultiSurface()); + assertNull(dSpace.getLod4MultiSurface()); + + } + + @Test + public void testReCreateGeometriesSolid() { + Road gmlRoad = new Road(); + TopLevelTransportFeature top = TopLevelTransportFeature.from(gmlRoad); + top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + top.reCreateGeometries(factory, config); + + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlRoad.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlRoad.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlRoad.getLod3Solid().getObject()); + + } + + @Test + public void testReCreateGeometriesMultiSurface() { + Road gmlRoad = new Road(); + TopLevelTransportFeature top = TopLevelTransportFeature.from(gmlRoad); + top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + top.reCreateGeometries(factory, config); + + assertNotNull(gmlRoad.getLod0MultiSurface()); + assertNotNull(gmlRoad.getLod0MultiSurface().getObject()); + assertNotNull(gmlRoad.getDeprecatedProperties().getLod1MultiSurface()); + assertNotNull(gmlRoad.getDeprecatedProperties().getLod1MultiSurface().getObject()); + assertNotNull(gmlRoad.getLod2MultiSurface()); + assertNotNull(gmlRoad.getLod2MultiSurface().getObject()); + assertNotNull(gmlRoad.getLod3MultiSurface()); + assertNotNull(gmlRoad.getLod3MultiSurface().getObject()); + assertNotNull(gmlRoad.getDeprecatedProperties().getLod4MultiSurface()); + assertNotNull(gmlRoad.getDeprecatedProperties().getLod4MultiSurface().getObject()); + } +} diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaTest.java new file mode 100644 index 00000000..9174677a --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaTest.java @@ -0,0 +1,110 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +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 org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractThematicSurface; +import org.citygml4j.core.model.transportation.TrafficArea; +import org.citygml4j.core.util.geometry.GeometryFactory; +import org.junit.Test; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class TrafficAreaTest { + + @Test + public void testContainsError() { + TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); + TrafficArea taMock = mock(TrafficArea.class); + tao.setGmlObject(taMock); + + tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(tao.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); + } + + @Test + public void testClearAllContainedCheckResults() { + TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); + TrafficArea taMock = mock(TrafficArea.class); + tao.setGmlObject(taMock); + + assertFalse(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + tao.clearAllContainedCheckResults(); + assertFalse(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + + } + + @Test + public void testCollectContainedErrors() { + TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); + TrafficArea taMock = mock(TrafficArea.class); + tao.setGmlObject(taMock); + + tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + tao.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + + @Test + public void testUnsetGmlGeometries() { + TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); + TrafficArea r = mock(TrafficArea.class); + ta.setGmlObject(r); + DeprecatedPropertiesOfAbstractThematicSurface dSpace = mock(DeprecatedPropertiesOfAbstractThematicSurface.class); + when(r.getDeprecatedProperties()).thenReturn(dSpace); + + r.setLod0MultiSurface(mock(MultiSurfaceProperty.class)); + r.setLod1MultiSurface(mock(MultiSurfaceProperty.class)); + r.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); + r.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); + dSpace.setLod4MultiSurface(mock(MultiSurfaceProperty.class)); + + ta.unsetGmlGeometries(); + assertNull(r.getLod0MultiSurface()); + assertNull(r.getLod1MultiSurface()); + assertNull(r.getLod2MultiSurface()); + assertNull(r.getLod3MultiSurface()); + assertNull(dSpace.getLod4MultiSurface()); + } + + @Test + public void testReCreateGeometriesMultiSurface() { + TrafficArea gmlAus = new TrafficArea() { + }; + TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); + tao.setGmlObject(gmlAus); + + tao.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + tao.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + tao.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + tao.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + tao.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + tao.reCreateGeometries(factory, config); + + assertNotNull(gmlAus.getLod0MultiSurface()); + assertNotNull(gmlAus.getLod0MultiSurface().getObject()); + assertNotNull(gmlAus.getLod2MultiSurface()); + assertNotNull(gmlAus.getLod2MultiSurface().getObject()); + assertNotNull(gmlAus.getLod3MultiSurface()); + assertNotNull(gmlAus.getLod3MultiSurface().getObject()); + } +} 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 new file mode 100644 index 00000000..38d30d55 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficSpaceTest.java @@ -0,0 +1,168 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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 org.citygml4j.core.model.core.AbstractSpaceBoundary; +import org.citygml4j.core.model.core.AbstractUnoccupiedSpace; +import org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractCityObject; +import org.citygml4j.core.model.transportation.TrafficSpace; +import org.citygml4j.core.util.geometry.GeometryFactory; +import org.citygml4j.core.visitor.ObjectVisitor; +import org.junit.Test; +import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +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.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class TrafficSpaceTest { + + @Test + public void testVisitorPropagation() { + TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); + TrafficAreaObject areaMock = mock(TrafficAreaObject.class); + tso.addTrafficArea(areaMock); + + AbstractCheck c = new AbstractCheck() { + }; + tso.accept(c); + + verify(areaMock).accept(c); + } + + @Test + public void testContainsError() { + TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); + + tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(tso.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); + + } + + @Test + public void testCollectContainedErrors() { + TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); + + tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + tso.collectContainedErrors(errors); + assertEquals(1, errors.size()); + + } + + @Test + public void testClearAllContainedCheckResults() { + TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); + TrafficSpace tsMock = mock(TrafficSpace.class); + tso.setGmlObject(tsMock); + TrafficAreaObject taMock = mock(TrafficAreaObject.class); + + tso.addTrafficArea(taMock); + + assertFalse(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + tso.clearAllContainedCheckResults(); + assertFalse(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + + verify(taMock).accept(any(ClearCheckResultsVisitor.class)); + } + + @Test + public void testUnsetGmlGeometries() { + TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); + TrafficSpace t = mock(TrafficSpace.class); + tso.setGmlObject(t); + + DeprecatedPropertiesOfAbstractCityObject dSpace = mock(DeprecatedPropertiesOfAbstractCityObject.class); + when(t.getDeprecatedProperties()).thenReturn(dSpace); + + t.setLod0MultiSurface(mock(MultiSurfaceProperty.class)); + t.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); + t.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); + + tso.unsetGmlGeometries(); + assertNull(t.getLod0MultiSurface()); + assertNull(t.getLod2MultiSurface()); + assertNull(t.getLod3MultiSurface()); + + } + + @Test + public void testReCreateGeometriesSolid() { + AbstractUnoccupiedSpace gmlAus = new AbstractUnoccupiedSpace() { + @Override + public boolean isValidBoundary(Class type) { + return false; + } + + @Override + public void accept(ObjectVisitor visitor) { + + } + }; + TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE) { + }; + tso.setGmlObject(gmlAus); + + tso.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + tso.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + tso.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + tso.reCreateGeometries(factory, config); + + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAus.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAus.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAus.getLod3Solid().getObject()); + + } + + @Test + public void testReCreateGeometriesMultiSurface() { + AbstractUnoccupiedSpace gmlAus = new AbstractUnoccupiedSpace() { + @Override + public boolean isValidBoundary(Class type) { + return false; + } + + @Override + public void accept(ObjectVisitor visitor) { + + } + }; + TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); + tso.setGmlObject(gmlAus); + + tso.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + tso.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + tso.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + tso.reCreateGeometries(factory, config); + + assertNotNull(gmlAus.getLod0MultiSurface()); + assertNotNull(gmlAus.getLod0MultiSurface().getObject()); + assertNotNull(gmlAus.getLod2MultiSurface()); + assertNotNull(gmlAus.getLod2MultiSurface().getObject()); + assertNotNull(gmlAus.getLod3MultiSurface()); + assertNotNull(gmlAus.getLod3MultiSurface().getObject()); + } +} diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java index 2f9b7cac..a0135fd6 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java @@ -19,43 +19,10 @@ package de.hft.stuttgart.citydoctor2.datastructure; 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.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import java.util.ArrayList; -import java.util.List; - -import de.hft.stuttgart.citydoctor2.utils.visitors.ClearCheckResultsVisitor; -import de.hft.stuttgart.citydoctor2.utils.visitors.GmlGeometryRebuilder; -import org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractCityObject; -import org.citygml4j.core.model.deprecated.core.DeprecatedPropertiesOfAbstractThematicSurface; -import org.citygml4j.core.model.deprecated.transportation.DeprecatedPropertiesOfAbstractTransportationSpace; -import org.citygml4j.core.model.transportation.Intersection; -import org.citygml4j.core.model.transportation.Railway; import org.citygml4j.core.model.transportation.Road; -import org.citygml4j.core.model.transportation.Section; -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.Waterway; -import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; import org.mockito.Mockito; -import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; - -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.TransportationObject.TransportationType; -import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; public class TransportationObjectTest { @@ -68,420 +35,4 @@ public class TransportationObjectTest { assertEquals(FeatureType.TRANSPORTATION, to.getFeatureType()); } - @Test - public void testObjectConstruction() { - TopLevelTransportFeature road = TopLevelTransportFeature.from(Mockito.mock(Road.class)); - assertEquals(TransportationType.ROAD, road.getTransportationType()); - TopLevelTransportFeature track = TopLevelTransportFeature.from(Mockito.mock(Track.class)); - assertEquals(TransportationType.TRACK, track.getTransportationType()); - TopLevelTransportFeature waterway = TopLevelTransportFeature.from(Mockito.mock(Waterway.class)); - assertEquals(TransportationType.WATERWAY, waterway.getTransportationType()); - TopLevelTransportFeature railway = TopLevelTransportFeature.from(Mockito.mock(Railway.class)); - assertEquals(TransportationType.RAILWAY, railway.getTransportationType()); - TopLevelTransportFeature square = TopLevelTransportFeature.from(Mockito.mock(Square.class)); - assertEquals(TransportationType.SQUARE, square.getTransportationType()); - } - - @Test(expected = IllegalStateException.class) - public void testReCreateGeometriesSolid() { - TopLevelTransportFeature to = TopLevelTransportFeature.from(Mockito.mock(Road.class)); - to.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); - GeometryFactory factory = GeometryFactory.newInstance(); - to.reCreateGeometries(factory, mock(ParserConfiguration.class)); - } - - - @Test - public void testReCreateGeometriesTransportationSpace() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - TransportSection sectionMock = Mockito.mock(TransportSection.class); - TransportSection intersectionMock = Mockito.mock(TransportSection.class); - TrafficSpaceObject tsMock = Mockito.mock(TrafficSpaceObject.class); - TrafficSpaceObject auxTsMock = Mockito.mock(TrafficSpaceObject.class); - - top.addSection(sectionMock); - top.addIntersection(intersectionMock); - top.addTrafficSpace(tsMock); - top.addAuxTrafficSpace(auxTsMock); - - top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); - GeometryFactory factory = GeometryFactory.newInstance(); - top.reCreateGeometries(factory, mock(ParserConfiguration.class)); - - verify(roadMock).setLod2MultiSurface(any()); - verify(sectionMock).accept(any(GmlGeometryRebuilder.class)); - verify(intersectionMock).accept(any(GmlGeometryRebuilder.class)); - verify(tsMock).accept(any(GmlGeometryRebuilder.class)); - verify(auxTsMock).accept(any(GmlGeometryRebuilder.class)); - } - - @Test - public void testReCreateGeometriesTrafficSpace() { - TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TrafficSpace tsMock = mock(TrafficSpace.class); - tso.setGmlObject(tsMock); - TrafficAreaObject taoMock = Mockito.mock(TrafficAreaObject.class); - - tso.addTrafficArea(taoMock); - - tso.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); - GeometryFactory factory = GeometryFactory.newInstance(); - tso.reCreateGeometries(factory, mock(ParserConfiguration.class)); - - verify(tsMock).setLod2MultiSurface(any()); - verify(taoMock).accept(any(GmlGeometryRebuilder.class)); - } - - @Test - public void testReCreateGeometriesTrafficArea() { - TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea taMock = mock(TrafficArea.class); - tao.setGmlObject(taMock); - - tao.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); - GeometryFactory factory = GeometryFactory.newInstance(); - tao.reCreateGeometries(factory, mock(ParserConfiguration.class)); - - verify(taMock).setLod2MultiSurface(any()); - } - - @Test - public void testReCreateGeometriesMultiSurfaceLod0() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - - TrafficSpaceObject ts = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TrafficSpace trafficSpaceMock = mock(TrafficSpace.class); - ts.setGmlObject(trafficSpaceMock); - - TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea trafficAreaMock = mock(TrafficArea.class); - ta.setGmlObject(trafficAreaMock); - - top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); - ts.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); - ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); - - GeometryFactory factory = GeometryFactory.newInstance(); - top.reCreateGeometries(factory, mock(ParserConfiguration.class)); - ts.reCreateGeometries(factory, mock(ParserConfiguration.class)); - ta.reCreateGeometries(factory, mock(ParserConfiguration.class)); - - verify(roadMock).setLod0MultiSurface(any()); - verify(trafficSpaceMock).setLod0MultiSurface(any()); - verify(trafficAreaMock).setLod0MultiSurface(any()); - } - - @Test - public void testReCreateGeometriesMultiSurfaceLod1() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - - TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea trafficAreaMock = mock(TrafficArea.class); - ta.setGmlObject(trafficAreaMock); - - DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class); - when(roadMock.getDeprecatedProperties()).thenReturn(dSpace); - - try { - top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); - } catch (IllegalArgumentException e) { - fail("Casting of original GML object to AbstractTransportationSpace should work"); - } - - ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); - GeometryFactory factory = GeometryFactory.newInstance(); - top.reCreateGeometries(factory, mock(ParserConfiguration.class)); - ta.reCreateGeometries(factory, mock(ParserConfiguration.class)); - - verify(dSpace).setLod1MultiSurface(any()); - verify(trafficAreaMock).setLod1MultiSurface(any()); - } - - - @Test - public void testReCreateGeometriesMultiSurfaceLod2() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - - TrafficSpaceObject ts = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TrafficSpace trafficSpaceMock = mock(TrafficSpace.class); - ts.setGmlObject(trafficSpaceMock); - - TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea trafficAreaMock = mock(TrafficArea.class); - ta.setGmlObject(trafficAreaMock); - - top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); - ts.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); - ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); - - GeometryFactory factory = GeometryFactory.newInstance(); - top.reCreateGeometries(factory, mock(ParserConfiguration.class)); - ts.reCreateGeometries(factory, mock(ParserConfiguration.class)); - ta.reCreateGeometries(factory, mock(ParserConfiguration.class)); - - verify(roadMock).setLod2MultiSurface(any()); - verify(trafficSpaceMock).setLod2MultiSurface(any()); - verify(trafficAreaMock).setLod2MultiSurface(any()); - } - - @Test - public void testReCreateGeometriesMultiSurfaceLod3() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - - TrafficSpaceObject ts = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TrafficSpace trafficSpaceMock = mock(TrafficSpace.class); - ts.setGmlObject(trafficSpaceMock); - - TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea trafficAreaMock = mock(TrafficArea.class); - ta.setGmlObject(trafficAreaMock); - - top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); - ts.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); - ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); - - GeometryFactory factory = GeometryFactory.newInstance(); - top.reCreateGeometries(factory, mock(ParserConfiguration.class)); - ts.reCreateGeometries(factory, mock(ParserConfiguration.class)); - ta.reCreateGeometries(factory, mock(ParserConfiguration.class)); - - verify(roadMock).setLod3MultiSurface(any()); - verify(trafficSpaceMock).setLod3MultiSurface(any()); - verify(trafficAreaMock).setLod3MultiSurface(any()); - } - - @Test - public void testReCreateGeometriesMultiSurfaceLod4() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - - TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea trafficAreaMock = mock(TrafficArea.class); - ta.setGmlObject(trafficAreaMock); - - DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class); - when(roadMock.getDeprecatedProperties()).thenReturn(dSpace); - DeprecatedPropertiesOfAbstractThematicSurface dArea = mock(DeprecatedPropertiesOfAbstractThematicSurface.class); - when(trafficAreaMock.getDeprecatedProperties()).thenReturn(dArea); - - ta.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); - try { - top.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); - } catch (IllegalArgumentException e) { - fail("Casting of original GML object to AbstractTransportationSpace should work"); - } - - GeometryFactory factory = GeometryFactory.newInstance(); - top.reCreateGeometries(factory, mock(ParserConfiguration.class)); - ta.reCreateGeometries(factory, mock(ParserConfiguration.class)); - - verify(dSpace).setLod4MultiSurface(any()); - verify(dArea).setLod4MultiSurface(any()); - } - - - @Test - public void testContainsErrorTransportationSpace() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - - top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - assertFalse(top.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); - - - } - - @Test - public void testContainsErrorTrafficSpace() { - TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - - tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - assertTrue(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - assertFalse(tso.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); - - } - - @Test - public void testContainsErrorTrafficArea() { - TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea taMock = mock(TrafficArea.class); - tao.setGmlObject(taMock); - - tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - assertTrue(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - assertFalse(tao.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); - } - - @Test - public void testClearAllContainedCheckResultsTransportationSpace() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - TransportSection sectionMock = Mockito.mock(TransportSection.class); - TransportSection intersectionMock = Mockito.mock(TransportSection.class); - TrafficSpaceObject tsMock = Mockito.mock(TrafficSpaceObject.class); - TrafficSpaceObject auxTsMock = Mockito.mock(TrafficSpaceObject.class); - - top.addSection(sectionMock); - top.addIntersection(intersectionMock); - top.addTrafficSpace(tsMock); - top.addAuxTrafficSpace(auxTsMock); - - assertFalse(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - top.clearAllContainedCheckResults(); - assertFalse(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - - verify(sectionMock).accept(any(ClearCheckResultsVisitor.class)); - verify(intersectionMock).accept(any(ClearCheckResultsVisitor.class)); - verify(tsMock).accept(any(ClearCheckResultsVisitor.class)); - verify(auxTsMock).accept(any(ClearCheckResultsVisitor.class)); - } - - @Test - public void testClearAllContainedCheckResultsTrafficSpace() { - TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TrafficSpace tsMock = mock(TrafficSpace.class); - tso.setGmlObject(tsMock); - TrafficAreaObject taMock = mock(TrafficAreaObject.class); - - tso.addTrafficArea(taMock); - - assertFalse(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - assertTrue(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - tso.clearAllContainedCheckResults(); - assertFalse(tso.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - - verify(taMock).accept(any(ClearCheckResultsVisitor.class)); - } - - @Test - public void testClearAllContainedCheckResultsTrafficArea() { - TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea taMock = mock(TrafficArea.class); - tao.setGmlObject(taMock); - - assertFalse(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - assertTrue(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - tao.clearAllContainedCheckResults(); - assertFalse(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - - } - - @Test - public void testCollectContainedErrorsTransportationSpace() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - - top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - List errors = new ArrayList<>(); - top.collectContainedErrors(errors); - assertEquals(1, errors.size()); - - } - - @Test - public void testCollectContainedErrorsTrafficSpace() { - TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - - tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - List errors = new ArrayList<>(); - tso.collectContainedErrors(errors); - assertEquals(1, errors.size()); - - } - - @Test - public void testCollectContainedErrorsTrafficArea() { - TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea taMock = mock(TrafficArea.class); - tao.setGmlObject(taMock); - - tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - List errors = new ArrayList<>(); - tao.collectContainedErrors(errors); - assertEquals(1, errors.size()); - } - - @Test - public void testUnsetGmlGeometriesTransportationSpace() { - Road r = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(r); - top.setGmlObject(r); - - DeprecatedPropertiesOfAbstractTransportationSpace dSpace = mock(DeprecatedPropertiesOfAbstractTransportationSpace.class); - when(r.getDeprecatedProperties()).thenReturn(dSpace); - - dSpace.setLod1MultiSurface(mock(MultiSurfaceProperty.class)); - r.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); - r.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); - dSpace.setLod4MultiSurface(mock(MultiSurfaceProperty.class)); - - top.unsetGmlGeometries(); - assertNull(dSpace.getLod1MultiSurface()); - assertNull(r.getLod2MultiSurface()); - assertNull(r.getLod3MultiSurface()); - assertNull(dSpace.getLod4MultiSurface()); - - } - - @Test - public void testUnsetGmlGeometriesTrafficSpace() { - TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); - TrafficSpace t = mock(TrafficSpace.class); - tso.setGmlObject(t); - - DeprecatedPropertiesOfAbstractCityObject dSpace = mock(DeprecatedPropertiesOfAbstractCityObject.class); - when(t.getDeprecatedProperties()).thenReturn(dSpace); - - t.setLod0MultiSurface(mock(MultiSurfaceProperty.class)); - t.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); - t.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); - - tso.unsetGmlGeometries(); - assertNull(t.getLod0MultiSurface()); - assertNull(t.getLod2MultiSurface()); - assertNull(t.getLod3MultiSurface()); - - } - - @Test - public void testUnsetGmlGeometriesTrafficArea() { - TrafficAreaObject ta = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea r = mock(TrafficArea.class); - ta.setGmlObject(r); - DeprecatedPropertiesOfAbstractThematicSurface dSpace = mock(DeprecatedPropertiesOfAbstractThematicSurface.class); - when(r.getDeprecatedProperties()).thenReturn(dSpace); - - r.setLod0MultiSurface(mock(MultiSurfaceProperty.class)); - r.setLod1MultiSurface(mock(MultiSurfaceProperty.class)); - r.setLod2MultiSurface(mock(MultiSurfaceProperty.class)); - r.setLod3MultiSurface(mock(MultiSurfaceProperty.class)); - dSpace.setLod4MultiSurface(mock(MultiSurfaceProperty.class)); - - ta.unsetGmlGeometries(); - assertNull(r.getLod0MultiSurface()); - assertNull(r.getLod1MultiSurface()); - assertNull(r.getLod2MultiSurface()); - assertNull(r.getLod3MultiSurface()); - assertNull(dSpace.getLod4MultiSurface()); - } - } 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 new file mode 100644 index 00000000..7e0cc050 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpaceTest.java @@ -0,0 +1,111 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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 org.citygml4j.core.model.transportation.AbstractTransportationSpace; +import org.citygml4j.core.model.transportation.Road; +import org.citygml4j.core.util.geometry.GeometryFactory; +import org.citygml4j.core.visitor.ObjectVisitor; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class TransportationSpaceTest { + + @Test + public void testVisitorPropagation() { + TransportationSpace space = new TransportationSpace(TransportationObject.TransportationType.TRANSPORTATION_COMPLEX) { + }; + TrafficSpaceObject mockSpace = mock(TrafficSpaceObject.class); + TrafficSpaceObject auxMockSpace = mock(TrafficSpaceObject.class); + space.addTrafficSpace(mockSpace); + space.addAuxTrafficSpace(auxMockSpace); + + AbstractCheck c = new AbstractCheck() { + }; + space.accept(c); + + verify(mockSpace).accept(c); + verify(auxMockSpace).accept(c); + } + + + @Test + public void testReCreateGeometriesSolid() { + AbstractTransportationSpace gmlAts = new AbstractTransportationSpace() { + @Override + public void accept(ObjectVisitor visitor) { + + } + }; + TransportationSpace space = new TransportationSpace(TransportationObject.TransportationType.TRANSPORTATION_COMPLEX) { + }; + space.setGmlObject(gmlAts); + + space.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + space.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + space.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + space.reCreateGeometries(factory, config); + + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAts.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAts.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAts.getLod3Solid().getObject()); + + } + + @Test + public void testReCreateGeometriesMultiSurface() { + AbstractTransportationSpace gmlAts = new AbstractTransportationSpace() { + @Override + public void accept(ObjectVisitor visitor) { + + } + }; + TransportationSpace space = new TransportationSpace(TransportationObject.TransportationType.TRANSPORTATION_COMPLEX) { + }; + space.setGmlObject(gmlAts); + + space.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + space.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + space.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + space.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + space.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + space.reCreateGeometries(factory, config); + + assertNotNull(gmlAts.getLod0MultiSurface()); + assertNotNull(gmlAts.getLod0MultiSurface().getObject()); + assertNotNull(gmlAts.getDeprecatedProperties().getLod1MultiSurface()); + assertNotNull(gmlAts.getDeprecatedProperties().getLod1MultiSurface().getObject()); + assertNotNull(gmlAts.getLod2MultiSurface()); + assertNotNull(gmlAts.getLod2MultiSurface().getObject()); + assertNotNull(gmlAts.getLod3MultiSurface()); + assertNotNull(gmlAts.getLod3MultiSurface().getObject()); + assertNotNull(gmlAts.getDeprecatedProperties().getLod4MultiSurface()); + assertNotNull(gmlAts.getDeprecatedProperties().getLod4MultiSurface().getObject()); + } + + @Test + public void testContainsError() { + Road roadMock = mock(Road.class); + TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); + top.setGmlObject(roadMock); + + top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(top.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); + } +} diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java index 4d0b90ac..dc57b588 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java @@ -1,14 +1,16 @@ package de.hft.stuttgart.citydoctor2.datastructure; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import org.citygml4j.core.model.vegetation.PlantCover; import org.citygml4j.core.model.vegetation.SolitaryVegetationObject; +import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; import org.xmlobjects.gml.model.geometry.GeometryProperty; -import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSolidProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; public class VegetationTest { @@ -21,9 +23,6 @@ public class VegetationTest { PlantCover gmlCover = new PlantCover(); plantCover.setGmlObject(gmlCover); - gmlCover.setLod0MultiCurve(new MultiCurveProperty()); - gmlCover.setLod2MultiCurve(new MultiCurveProperty()); - gmlCover.setLod3MultiCurve(new MultiCurveProperty()); gmlCover.setLod0MultiSurface(new MultiSurfaceProperty()); gmlCover.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty()); gmlCover.setLod2MultiSurface(new MultiSurfaceProperty()); @@ -39,9 +38,6 @@ public class VegetationTest { plantCover.clearGmlGeometries(); - assertNull(gmlCover.getLod0MultiCurve()); - assertNull(gmlCover.getLod2MultiCurve()); - assertNull(gmlCover.getLod3MultiCurve()); assertNull(gmlCover.getLod0MultiSurface()); assertNull(gmlCover.getDeprecatedProperties().getLod1MultiSurface()); assertNull(gmlCover.getLod2MultiSurface()); @@ -62,9 +58,6 @@ public class VegetationTest { SolitaryVegetationObject gmlSolitary = new SolitaryVegetationObject(); solitary.setGmlObject(gmlSolitary); - gmlSolitary.setLod0MultiCurve(new MultiCurveProperty()); - gmlSolitary.setLod2MultiCurve(new MultiCurveProperty()); - gmlSolitary.setLod3MultiCurve(new MultiCurveProperty()); gmlSolitary.setLod0MultiSurface(new MultiSurfaceProperty()); gmlSolitary.setLod2MultiSurface(new MultiSurfaceProperty()); gmlSolitary.setLod3MultiSurface(new MultiSurfaceProperty()); @@ -78,9 +71,6 @@ public class VegetationTest { solitary.clearGmlGeometries(); - assertNull(gmlSolitary.getLod0MultiCurve()); - assertNull(gmlSolitary.getLod2MultiCurve()); - assertNull(gmlSolitary.getLod3MultiCurve()); assertNull(gmlSolitary.getLod0MultiSurface()); assertNull(gmlSolitary.getLod2MultiSurface()); assertNull(gmlSolitary.getLod3MultiSurface()); @@ -92,4 +82,97 @@ public class VegetationTest { assertNull(gmlSolitary.getDeprecatedProperties().getLod3Geometry()); assertNull(gmlSolitary.getDeprecatedProperties().getLod4Geometry()); } + + @Test + public void testReCreateGeometriesSolidPlantCover() { + PlantCover gmlPC = new PlantCover(); + Vegetation veg = new Vegetation(Vegetation.VegetationType.PLANT_COVER); + veg.setGmlObject(gmlPC); + + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + veg.reCreateGeometries(factory, config); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlPC.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlPC.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlPC.getLod3Solid().getObject()); + } + + @Test + public void testReCreateGeometriesMultiSurfacePlantCover() { + PlantCover gmlPC = new PlantCover(); + Vegetation veg = new Vegetation(Vegetation.VegetationType.PLANT_COVER); + veg.setGmlObject(gmlPC); + + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + veg.reCreateGeometries(factory, config); + + assertNotNull(gmlPC.getLod0MultiSurface()); + assertNotNull(gmlPC.getLod0MultiSurface().getObject()); + assertNotNull(gmlPC.getDeprecatedProperties().getLod1MultiSurface()); + assertNotNull(gmlPC.getDeprecatedProperties().getLod1MultiSurface().getObject()); + assertNotNull(gmlPC.getLod2MultiSurface()); + assertNotNull(gmlPC.getLod2MultiSurface().getObject()); + assertNotNull(gmlPC.getLod3MultiSurface()); + assertNotNull(gmlPC.getLod3MultiSurface().getObject()); + assertNotNull(gmlPC.getDeprecatedProperties().getLod4MultiSurface()); + assertNotNull(gmlPC.getDeprecatedProperties().getLod4MultiSurface().getObject()); + } + + @Test + public void testReCreateGeometriesSolidSolitaryVegetationObject() { + SolitaryVegetationObject gmlPC = new SolitaryVegetationObject(); + Vegetation veg = new Vegetation(Vegetation.VegetationType.SOLITARY_VEGETATION_OBJECT); + veg.setGmlObject(gmlPC); + + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + veg.reCreateGeometries(factory, config); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlPC.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlPC.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlPC.getLod3Solid().getObject()); + } + + @Test + public void testReCreateGeometriesMultiSurfaceSolitaryVegetationObject() { + SolitaryVegetationObject gmlPC = new SolitaryVegetationObject(); + Vegetation veg = new Vegetation(Vegetation.VegetationType.SOLITARY_VEGETATION_OBJECT); + veg.setGmlObject(gmlPC); + + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + veg.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + veg.reCreateGeometries(factory, config); + + assertNotNull(gmlPC.getLod0MultiSurface()); + assertNotNull(gmlPC.getLod0MultiSurface().getObject()); + assertNotNull(gmlPC.getDeprecatedProperties().getLod1Geometry()); + assertNotNull(gmlPC.getDeprecatedProperties().getLod1Geometry().getObject()); + assertNotNull(gmlPC.getLod2MultiSurface()); + assertNotNull(gmlPC.getLod2MultiSurface().getObject()); + assertNotNull(gmlPC.getLod3MultiSurface()); + assertNotNull(gmlPC.getLod3MultiSurface().getObject()); + assertNotNull(gmlPC.getDeprecatedProperties().getLod4Geometry()); + assertNotNull(gmlPC.getDeprecatedProperties().getLod4Geometry().getObject()); + } + } 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 01a85e09..309dbda9 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,12 +1,14 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import org.citygml4j.core.model.waterbody.WaterBody; +import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; -import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -35,10 +37,6 @@ public class WaterTest { WaterBody gmlWater = new WaterBody(); water.setGmlObject(gmlWater); - gmlWater.setLod0MultiCurve(new MultiCurveProperty()); - gmlWater.getDeprecatedProperties().setLod1MultiCurve(new MultiCurveProperty()); - gmlWater.setLod2MultiCurve(new MultiCurveProperty()); - gmlWater.setLod3MultiCurve(new MultiCurveProperty()); gmlWater.setLod0MultiSurface(new MultiSurfaceProperty()); gmlWater.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty()); gmlWater.setLod2MultiSurface(new MultiSurfaceProperty()); @@ -50,10 +48,6 @@ public class WaterTest { water.clearGmlGeometries(); - assertNull(gmlWater.getLod0MultiCurve()); - assertNull(gmlWater.getDeprecatedProperties().getLod1MultiCurve()); - assertNull(gmlWater.getLod2MultiCurve()); - assertNull(gmlWater.getLod3MultiCurve()); assertNull(gmlWater.getLod0MultiSurface()); assertNull(gmlWater.getDeprecatedProperties().getLod1MultiSurface()); assertNull(gmlWater.getLod2MultiSurface()); @@ -66,9 +60,48 @@ public class WaterTest { @Test - public void testRecreateGmlGeometries() { + public void testReCreateGeometriesSolid() { + WaterBody gmlWater = new WaterBody(); WaterObject water = new WaterObject(); - // TODO: Implement test + + water.setGmlObject(gmlWater); + water.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + water.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + water.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + water.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD4)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + water.reCreateGeometries(factory, config); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlWater.getLod1Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlWater.getLod2Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlWater.getLod3Solid().getObject()); + GeometryTestUtils.assertSolidMatchesExpectedValues(gmlWater.getDeprecatedProperties().getLod4Solid().getObject()); + } + + @Test + public void testReCreateGeometriesMultiSurface() { + WaterBody gmlWater = new WaterBody(); + WaterObject water = new WaterObject(); + + water.setGmlObject(gmlWater); + water.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + water.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); + water.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + water.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + water.reCreateGeometries(factory, config); + + assertNotNull(gmlWater.getLod0MultiSurface()); + assertNotNull(gmlWater.getLod0MultiSurface().getObject()); + assertNotNull(gmlWater.getDeprecatedProperties().getLod1MultiSurface()); + assertNotNull(gmlWater.getDeprecatedProperties().getLod1MultiSurface().getObject()); + assertNotNull(gmlWater.getLod2MultiSurface()); + assertNotNull(gmlWater.getLod2MultiSurface().getObject()); + assertNotNull(gmlWater.getLod3MultiSurface()); + assertNotNull(gmlWater.getLod3MultiSurface().getObject()); } } -- GitLab From 3539192ac27bd0e33fb84b6f73f8d1426e647985 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 30 Apr 2025 11:43:41 +0200 Subject: [PATCH 47/51] Test: Add coverage of all Featuretypes --- .../datastructure/CityDoctorModelTest.java | 216 ++++++++++++++++-- 1 file changed, 195 insertions(+), 21 deletions(-) diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModelTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModelTest.java index 0894044e..7eeee289 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModelTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModelTest.java @@ -255,13 +255,13 @@ public class CityDoctorModelTest { } @Test - public void testAddBridge() { + public void testSetCityModel() { File f = Mockito.mock(File.class); ParserConfiguration config = new ParserConfiguration(8, false); CityDoctorModel model = new CityDoctorModel(config, f); - BridgeObject b = Mockito.mock(BridgeObject.class); - model.addBridge(b); - assertEquals(b, model.getBridges().get(0)); + CityModel cModel = Mockito.mock(CityModel.class); + model.setCityModel(cModel); + assertEquals(cModel, model.getCityModel()); } @Test @@ -275,25 +275,47 @@ public class CityDoctorModelTest { } @Test - public void testSetCityModel() { + public void testAddBridge() { File f = Mockito.mock(File.class); ParserConfiguration config = new ParserConfiguration(8, false); CityDoctorModel model = new CityDoctorModel(config, f); - CityModel cModel = Mockito.mock(CityModel.class); - model.setCityModel(cModel); - assertEquals(cModel, model.getCityModel()); + BridgeObject b = Mockito.mock(BridgeObject.class); + model.addBridge(b); + assertEquals(b, model.getBridges().get(0)); } @Test - public void testAddWater() { + public void testAddVegetation() { File f = Mockito.mock(File.class); ParserConfiguration config = new ParserConfiguration(8, false); CityDoctorModel model = new CityDoctorModel(config, f); - WaterObject water = Mockito.mock(WaterObject.class); - model.addWater(water); - assertEquals(water, model.getWater().get(0)); + Vegetation veg = Mockito.mock(Vegetation.class); + model.addVegetation(veg); + assertEquals(veg, model.getVegetation().get(0)); } + @Test + public void testAddTunnel() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + Tunnel tunnel = Mockito.mock(Tunnel.class); + model.addTunnel(tunnel); + assertEquals(tunnel, model.getTunnels().get(0)); + } + + + @Test + public void testAddTransportation() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + TransportationObject trans = Mockito.mock(TransportationObject.class); + model.addTransportation(trans); + assertEquals(trans, model.getTransportation().get(0)); + } + + @Test public void testAddLand() { File f = Mockito.mock(File.class); @@ -305,23 +327,33 @@ public class CityDoctorModelTest { } @Test - public void testAddVegetation() { + public void testAddWater() { File f = Mockito.mock(File.class); ParserConfiguration config = new ParserConfiguration(8, false); CityDoctorModel model = new CityDoctorModel(config, f); - Vegetation veg = Mockito.mock(Vegetation.class); - model.addVegetation(veg); - assertEquals(veg, model.getVegetation().get(0)); + WaterObject water = Mockito.mock(WaterObject.class); + model.addWater(water); + assertEquals(water, model.getWater().get(0)); } @Test - public void testAddTransportation() { + public void testAddCityFurniture() { File f = Mockito.mock(File.class); ParserConfiguration config = new ParserConfiguration(8, false); CityDoctorModel model = new CityDoctorModel(config, f); - TransportationObject trans = Mockito.mock(TransportationObject.class); - model.addTransportation(trans); - assertEquals(trans, model.getTransportation().get(0)); + CityFurniture cf = Mockito.mock(CityFurniture.class); + model.addCityFurniture(cf); + assertEquals(cf, model.getCityFurniture().get(0)); + } + + @Test + public void testAddGenericCityObject() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + GenericCityObject gen = Mockito.mock(GenericCityObject.class); + model.addGenericCityObject(gen); + assertEquals(gen, model.getGenericCityObjects().get(0)); } @Test @@ -329,11 +361,29 @@ public class CityDoctorModelTest { File f = Mockito.mock(File.class); ParserConfiguration config = new ParserConfiguration(8, false); CityDoctorModel model = new CityDoctorModel(config, f); + Building b = Mockito.mock(Building.class); + BridgeObject bo = Mockito.mock(BridgeObject.class); + Vegetation veg = Mockito.mock(Vegetation.class); + Tunnel tunnel = Mockito.mock(Tunnel.class); TransportationObject trans = Mockito.mock(TransportationObject.class); + LandObject land = Mockito.mock(LandObject.class); + WaterObject water = Mockito.mock(WaterObject.class); + CityFurniture cf = Mockito.mock(CityFurniture.class); + GenericCityObject generic = Mockito.mock(GenericCityObject.class); + model.addBuilding(b); + model.addBridge(bo); + model.addVegetation(veg); model.addTransportation(trans); - assertEquals(2, model.getNumberOfFeatures()); + model.addTunnel(tunnel); + model.addLand(land); + model.addWater(water); + model.addCityFurniture(cf); + model.addGenericCityObject(generic); + + assertEquals(9, model.getNumberOfFeatures()); + } @Test @@ -355,6 +405,7 @@ public class CityDoctorModelTest { assertEquals(b1, model.getBuildings().get(0)); model.replaceFeature(b1, b2); assertEquals(b2, model.getBuildings().get(0)); + assertEquals(1, model.getBuildings().size()); } @Test(expected = IllegalStateException.class) @@ -366,6 +417,30 @@ public class CityDoctorModelTest { Building b2 = Mockito.mock(Building.class); model.replaceFeature(b1, b2); } + + @Test + public void testReplaceBridge() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + BridgeObject b1 = Mockito.mock(BridgeObject.class); + BridgeObject b2 = Mockito.mock(BridgeObject.class); + model.addBridge(b1); + assertEquals(b1, model.getBridges().get(0)); + model.replaceFeature(b1, b2); + assertEquals(b2, model.getBridges().get(0)); + assertEquals(1, model.getBridges().size()); + } + + @Test(expected = IllegalStateException.class) + public void testReplaceBridgeMissing() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + BridgeObject b1 = Mockito.mock(BridgeObject.class); + BridgeObject b2 = Mockito.mock(BridgeObject.class); + model.replaceFeature(b1, b2); + } @Test public void testReplaceVegetation() { @@ -378,6 +453,7 @@ public class CityDoctorModelTest { assertEquals(v1, model.getVegetation().get(0)); model.replaceFeature(v1, v2); assertEquals(v2, model.getVegetation().get(0)); + assertEquals(1, model.getVegetation().size()); } @Test(expected = IllegalStateException.class) @@ -389,6 +465,30 @@ public class CityDoctorModelTest { Vegetation v2 = Mockito.mock(Vegetation.class); model.replaceFeature(v1, v2); } + + @Test + public void testReplaceTunnel() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + Tunnel t1 = Mockito.mock(Tunnel.class); + Tunnel t2 = Mockito.mock(Tunnel.class); + model.addTunnel(t1); + assertEquals(t1, model.getTunnels().get(0)); + model.replaceFeature(t1, t2); + assertEquals(t2, model.getTunnels().get(0)); + assertEquals(1, model.getTunnels().size()); + } + + @Test(expected = IllegalStateException.class) + public void testReplaceTunnelMissing() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + Tunnel t1 = Mockito.mock(Tunnel.class); + Tunnel t2 = Mockito.mock(Tunnel.class); + model.replaceFeature(t1, t2); + } @Test public void testReplaceTransportation() { @@ -401,6 +501,7 @@ public class CityDoctorModelTest { assertEquals(t1, model.getTransportation().get(0)); model.replaceFeature(t1, t2); assertEquals(t2, model.getTransportation().get(0)); + assertEquals(1, model.getTransportation().size()); } @Test(expected = IllegalStateException.class) @@ -412,6 +513,30 @@ public class CityDoctorModelTest { TransportationObject t2 = Mockito.mock(TransportationObject.class); model.replaceFeature(t1, t2); } + + @Test + public void testReplaceLand() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + LandObject lo1 = Mockito.mock(LandObject.class); + LandObject lo2 = Mockito.mock(LandObject.class); + model.addLand(lo1); + assertEquals(lo1, model.getLand().get(0)); + model.replaceFeature(lo1, lo2); + assertEquals(lo2, model.getLand().get(0)); + assertEquals(1, model.getLand().size()); + } + + @Test(expected = IllegalStateException.class) + public void testReplaceLandMissing() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + LandObject lo1 = Mockito.mock(LandObject.class); + LandObject lo2 = Mockito.mock(LandObject.class); + model.replaceFeature(lo1, lo2); + } @Test public void testReplaceWater() { @@ -424,6 +549,7 @@ public class CityDoctorModelTest { assertEquals(t1, model.getWater().get(0)); model.replaceFeature(t1, t2); assertEquals(t2, model.getWater().get(0)); + assertEquals(1, model.getWater().size()); } @Test(expected = IllegalStateException.class) @@ -436,4 +562,52 @@ public class CityDoctorModelTest { model.replaceFeature(t1, t2); } + @Test + public void testReplaceCityFurniture() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + CityFurniture cf1 = Mockito.mock(CityFurniture.class); + CityFurniture cf2 = Mockito.mock(CityFurniture.class); + model.addCityFurniture(cf1); + assertEquals(cf1, model.getCityFurniture().get(0)); + model.replaceFeature(cf1, cf2); + assertEquals(cf2, model.getCityFurniture().get(0)); + assertEquals(1, model.getCityFurniture().size()); + } + + @Test(expected = IllegalStateException.class) + public void testReplaceCityFurnitureMissing() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + CityFurniture cf1 = Mockito.mock(CityFurniture.class); + CityFurniture cf2 = Mockito.mock(CityFurniture.class); + model.replaceFeature(cf1, cf2); + } + + @Test + public void testReplaceGenericCityObject() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + GenericCityObject gco1 = Mockito.mock(GenericCityObject.class); + GenericCityObject gco2 = Mockito.mock(GenericCityObject.class); + model.addGenericCityObject(gco1); + assertEquals(gco1, model.getGenericCityObjects().get(0)); + model.replaceFeature(gco1, gco2); + assertEquals(gco2, model.getGenericCityObjects().get(0)); + assertEquals(1, model.getGenericCityObjects().size()); + } + + @Test(expected = IllegalStateException.class) + public void testReplaceGenericCityObjectMissing() { + File f = Mockito.mock(File.class); + ParserConfiguration config = new ParserConfiguration(8, false); + CityDoctorModel model = new CityDoctorModel(config, f); + GenericCityObject gco1 = Mockito.mock(GenericCityObject.class); + GenericCityObject gco2 = Mockito.mock(GenericCityObject.class); + model.replaceFeature(gco1, gco2); + } + } -- GitLab From f4d3cb7f8009ec35b307e1f206de1853e16fe443 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 30 Apr 2025 11:47:20 +0200 Subject: [PATCH 48/51] Test: Unify datastructure testcases --- .../datastructure/AbstractBuildingTest.java | 28 +---- .../datastructure/AbstractRoomTest.java | 85 ++++++++++--- .../datastructure/AbstractTunnelTest.java | 46 +++++++ .../datastructure/BridgeObjectTest.java | 94 +++++++------- .../datastructure/CityFurnitureTest.java | 51 ++++++++ .../datastructure/CityObjectTest.java | 47 +++++++ .../datastructure/GenericCityObjectTest.java | 51 ++++++++ .../datastructure/GeometryTest.java | 15 +++ .../datastructure/ImplicitGeometryTest.java | 109 +++++++++++++--- .../datastructure/LandUseTest.java | 63 +++++++++- .../datastructure/ReliefObjectTest.java | 33 ----- .../datastructure/TinObjectTest.java | 117 ++++++++++++++++++ .../TopLevelTransportFeatureTest.java | 28 ++++- .../datastructure/TrafficAreaTest.java | 13 +- .../datastructure/TrafficSpaceTest.java | 11 ++ .../TransportationObjectTest.java | 4 +- .../TransportationSpaceTest.java | 64 ++++++++-- .../datastructure/VegetationTest.java | 55 ++++++++ .../citydoctor2/datastructure/WaterTest.java | 54 ++++++++ 19 files changed, 808 insertions(+), 160 deletions(-) create mode 100644 CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java 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 d8913ae6..ba4cd45a 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 @@ -52,8 +52,6 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; public class AbstractBuildingTest { - //TODO: Restructure test with new Visitors - @Test public void testAccept() { @@ -128,8 +126,13 @@ public class AbstractBuildingTest { public void testContainsError() { AbstractBuilding ab = createAbstractBuilding(); assertFalse(ab.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(ab.containsError(CheckId.C_GE_P_NON_PLANAR)); ab.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(ab.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(ab.containsError(CheckId.C_GE_P_NON_PLANAR)); + ab.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(ab.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(ab.containsError(CheckId.C_GE_P_NON_PLANAR)); } @@ -267,22 +270,9 @@ public class AbstractBuildingTest { @Test public void testUnsetGmlGeometries() { - Installation biMock = mock(Installation.class); - doAnswer(invocation -> { - biMock.unsetGmlGeometries(); - return null; - }).when(biMock).accept(any(UnsetGeometriesVisitor.class)); - - BoundarySurface bsMock = mock(BoundarySurface.class); - doAnswer(invocation -> { - bsMock.unsetGmlGeometries(); - return null; - }).when(bsMock).accept(any(UnsetGeometriesVisitor.class)); - AbstractBuilding ab = createAbstractBuilding(); - ab.addBoundarySurface(bsMock); - ab.addBuildingInstallation(biMock); org.citygml4j.core.model.building.AbstractBuilding gmlAb = new org.citygml4j.core.model.building.Building(); + ab.setCityGmlBuilding(gmlAb); gmlAb.setLod1Solid(new SolidProperty()); gmlAb.setLod2Solid(new SolidProperty()); @@ -292,15 +282,9 @@ public class AbstractBuildingTest { gmlAb.setLod2MultiSurface(new MultiSurfaceProperty()); gmlAb.setLod3MultiSurface(new MultiSurfaceProperty()); gmlAb.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty()); - ab.setCityGmlBuilding(gmlAb); ab.clearGmlGeometries(); - verify(biMock).accept(any(UnsetGeometriesVisitor.class)); - verify(bsMock).accept(any(UnsetGeometriesVisitor.class)); - verify(biMock).unsetGmlGeometries(); - verify(bsMock).unsetGmlGeometries(); - assertNull(gmlAb.getLod1Solid()); assertNull(gmlAb.getLod2Solid()); assertNull(gmlAb.getLod3Solid()); 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 fca90418..5f575179 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,10 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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 org.citygml4j.core.model.core.AbstractSpaceBoundary; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -8,22 +12,26 @@ import org.citygml4j.core.visitor.ObjectVisitor; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import org.xmlobjects.gml.model.geometry.aggregates.MultiCurveProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; +import java.util.ArrayList; +import java.util.List; + import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; public class AbstractRoomTest { - AbstractRoom ab; + AbstractRoom abRoom; @Before public void setUp() { - ab = new AbstractRoom() { + abRoom = new AbstractRoom() { @Override public CityObject getTopLevelCityObject() { return null; @@ -38,19 +46,58 @@ public class AbstractRoomTest { BoundarySurface mockBoundarySurface = Mockito.mock(BoundarySurface.class); Geometry geometry = Mockito.mock(Geometry.class); - ab.addRoomInstallation(mockInstallation); - ab.addBoundarySurface(mockBoundarySurface); - ab.addGeometry(geometry); + abRoom.addRoomInstallation(mockInstallation); + abRoom.addBoundarySurface(mockBoundarySurface); + abRoom.addGeometry(geometry); AbstractCheck c = new AbstractCheck() { }; - ab.accept(c); + abRoom.accept(c); Mockito.verify(mockInstallation).accept(c); Mockito.verify(mockBoundarySurface).accept(c); Mockito.verify(geometry).accept(c); } + @Test + public void testContainsError() { + assertFalse(abRoom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(abRoom.containsError(CheckId.C_GE_P_NON_PLANAR)); + abRoom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(abRoom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(abRoom.containsError(CheckId.C_GE_P_NON_PLANAR)); + abRoom.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(abRoom.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(abRoom.containsError(CheckId.C_GE_P_NON_PLANAR)); + } + + + @Test + public void testClearAllContainedCheckResults() { + abRoom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertEquals(1, abRoom.getAllCheckResults().size()); + abRoom.clearAllContainedCheckResults(); + assertTrue(abRoom.getAllCheckResults().isEmpty()); + } + + @Test + public void testContainsAnyError() { + assertFalse(abRoom.containsAnyError()); + abRoom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(abRoom.containsAnyError()); + abRoom.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(abRoom.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + abRoom.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + abRoom.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + @Test public void testUnsetGmlGeometries() { org.citygml4j.core.model.core.AbstractUnoccupiedSpace gmlAUS = new org.citygml4j.core.model.core.AbstractUnoccupiedSpace() { @@ -72,8 +119,8 @@ public class AbstractRoomTest { gmlAUS.setLod2MultiSurface(new MultiSurfaceProperty()); gmlAUS.setLod3MultiSurface(new MultiSurfaceProperty()); - ab.cgmlRoom = gmlAUS; - ab.clearGmlGeometries(); + abRoom.cgmlRoom = gmlAUS; + abRoom.clearGmlGeometries(); assertNull(gmlAUS.getLod1Solid()); assertNull(gmlAUS.getLod2Solid()); @@ -97,14 +144,14 @@ public class AbstractRoomTest { } }; - ab.cgmlRoom = gmlAUS; - ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); - ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); - ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); + abRoom.cgmlRoom = gmlAUS; + abRoom.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD1)); + abRoom.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD2)); + abRoom.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.SOLID, Lod.LOD3)); GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); - ab.reCreateGeometries(factory, config); + abRoom.reCreateGeometries(factory, config); GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAUS.getLod1Solid().getObject()); GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAUS.getLod2Solid().getObject()); GeometryTestUtils.assertSolidMatchesExpectedValues(gmlAUS.getLod3Solid().getObject()); @@ -123,14 +170,14 @@ public class AbstractRoomTest { return false; } }; - ab.cgmlRoom = gmlAUS; - ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); - ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); - ab.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); + abRoom.cgmlRoom = gmlAUS; + abRoom.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); + abRoom.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); + abRoom.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD3)); GeometryFactory factory = GeometryFactory.newInstance(); ParserConfiguration config = new ParserConfiguration(8, false); - ab.reCreateGeometries(factory, config); + abRoom.reCreateGeometries(factory, config); assertNotNull(gmlAUS.getLod0MultiSurface()); assertNotNull(gmlAUS.getLod0MultiSurface().getObject()); 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 c5680436..ee3f289a 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,10 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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 org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.visitor.ObjectVisitor; @@ -9,6 +13,9 @@ import org.junit.Test; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; +import java.util.ArrayList; +import java.util.List; + import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -58,6 +65,45 @@ public class AbstractTunnelTest { verify(mockGeometry).accept(c); } + @Test + public void testContainsError() { + assertFalse(at.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(at.containsError(CheckId.C_GE_P_NON_PLANAR)); + at.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(at.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(at.containsError(CheckId.C_GE_P_NON_PLANAR)); + at.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(at.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(at.containsError(CheckId.C_GE_P_NON_PLANAR)); + } + + + @Test + public void testClearAllContainedCheckResults() { + at.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertEquals(1, at.getAllCheckResults().size()); + at.clearAllContainedCheckResults(); + assertTrue(at.getAllCheckResults().isEmpty()); + } + + @Test + public void testContainsAnyError() { + assertFalse(at.containsAnyError()); + at.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(at.containsAnyError()); + at.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(at.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + at.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + at.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + @Test public void testUnsetGeometries() { org.citygml4j.core.model.tunnel.AbstractTunnel gmlAt = new org.citygml4j.core.model.tunnel.AbstractTunnel() { 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 69f3bae9..d8e23400 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 @@ -29,13 +29,11 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; 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.bridge.AbstractBridge; -import org.citygml4j.core.model.core.AbstractThematicSurface; import org.citygml4j.core.model.deprecated.bridge.DeprecatedPropertiesOfAbstractBridge; import org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.visitor.ObjectVisitor; @@ -83,6 +81,39 @@ public class BridgeObjectTest { assertEquals(0, boCounter2.intValue()); } + @Test + public void testVisitorPropagation() { + BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); + + BridgeObject partMock = mock(BridgeObject.class); + BridgeRoom mockRoom = mock(BridgeRoom.class); + BridgeRoomFurniture mockFurn = mock(BridgeRoomFurniture.class); + BridgeConstructiveElement ceMock = mock(BridgeConstructiveElement.class); + Installation instMock = mock(Installation.class); + BoundarySurface bsMock = mock(BoundarySurface.class); + Geometry geomMock = mock(Geometry.class); + + bo.addBridgePart(partMock); + bo.addBridgeRoom(mockRoom); + bo.addBridgeFurniture(mockFurn); + bo.addConstructiveElement(ceMock); + bo.addBridgeInstallation(instMock); + bo.addBoundarySurface(bsMock); + bo.addGeometry(geomMock); + + AbstractCheck c = new AbstractCheck() { + }; + bo.accept(c); + + verify(partMock).accept(c); + verify(mockRoom).accept(c); + verify(mockFurn).accept(c); + verify(ceMock).accept(c); + verify(instMock).accept(c); + verify(bsMock).accept(c); + verify(geomMock).accept(c); + } + @Test public void testPrepareForChecking() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); @@ -99,67 +130,44 @@ public class BridgeObjectTest { public void testContainsError() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); assertFalse(bo.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(bo.containsError(CheckId.C_GE_P_NON_PLANAR)); bo.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(bo.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - } - - @Test - public void testContainsError2() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bs = new BoundarySurface(mock(AbstractThematicSurface.class)); - bo.addBoundarySurface(bs); - assertFalse(bo.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - bs.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertFalse(bo.containsError(CheckId.C_GE_P_NON_PLANAR)); + bo.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); assertTrue(bo.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(bo.containsError(CheckId.C_GE_P_NON_PLANAR)); } + @Test public void testClearAllContainedCheckResults() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bsMock = mock(BoundarySurface.class); - bo.addBoundarySurface(bsMock); + bo.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + + assertEquals(1, bo.getAllCheckResults().size()); bo.clearAllContainedCheckResults(); - verify(bsMock).accept(any(ClearCheckResultsVisitor.class)); + assertTrue(bo.getAllCheckResults().isEmpty()); } @Test public void testContainsAnyError() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bs = new BoundarySurface(mock(AbstractThematicSurface.class)); - BoundarySurface spyBs = Mockito.spy(bs); - bo.addBoundarySurface(spyBs); - bo.containsAnyError(); - verify(spyBs).hasAnyError(); - - bs.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertFalse(bo.containsAnyError()); + bo.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(bo.containsAnyError()); + bo.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(bo.containsAnyError()); - - BridgeObject bo2 = new BridgeObject(mock(AbstractBridge.class)); - bo2.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - assertTrue(bo2.containsAnyError()); } @Test public void testCollectContainedErrors() { BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bs = new BoundarySurface(mock(AbstractThematicSurface.class)); - BoundarySurface spyBs = Mockito.spy(bs); - bo.addBoundarySurface(spyBs); - - ArrayList errors = new ArrayList<>(); + bo.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); bo.collectContainedErrors(errors); - verify(spyBs).collectErrors(errors); - } - - @Test - public void testReCreateGeometries() { - BridgeObject bo = new BridgeObject(mock(AbstractBridge.class)); - BoundarySurface bsMock = mock(BoundarySurface.class); - bo.addBoundarySurface(bsMock); - GeometryFactory factoryMock = mock(GeometryFactory.class); - ParserConfiguration configMock = mock(ParserConfiguration.class); - bo.reCreateGeometries(factoryMock, configMock); - verify(bsMock).accept(any(GmlGeometryRebuilder.class)); + assertEquals(1, errors.size()); } @Test diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java index 83004568..3955f801 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/CityFurnitureTest.java @@ -1,14 +1,65 @@ package de.hft.stuttgart.citydoctor2.datastructure; +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 org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; +import java.util.ArrayList; +import java.util.List; + import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; public class CityFurnitureTest { + @Test + public void testContainsError() { + CityFurniture cf = new CityFurniture(); + assertFalse(cf.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(cf.containsError(CheckId.C_GE_P_NON_PLANAR)); + cf.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(cf.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(cf.containsError(CheckId.C_GE_P_NON_PLANAR)); + cf.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(cf.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(cf.containsError(CheckId.C_GE_P_NON_PLANAR)); + } + + + @Test + public void testClearAllContainedCheckResults() { + CityFurniture cf = new CityFurniture(); + cf.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + + assertEquals(1, cf.getAllCheckResults().size()); + cf.clearAllContainedCheckResults(); + assertTrue(cf.getAllCheckResults().isEmpty()); + } + + @Test + public void testContainsAnyError() { + CityFurniture cf = new CityFurniture(); + assertFalse(cf.containsAnyError()); + cf.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(cf.containsAnyError()); + cf.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(cf.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + CityFurniture cf = new CityFurniture(); + cf.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + cf.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } @Test public void unsetGmlGeometries() { 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 de1b22ff..e0d7dae4 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,10 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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.GmlGeometryRebuilder; import de.hft.stuttgart.citydoctor2.utils.visitors.UnsetGeometriesVisitor; @@ -10,6 +14,9 @@ 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; @@ -32,6 +39,46 @@ public class CityObjectTest { verify(mockGeometry).accept(check); } + @Test + public void testContainsError() { + assertFalse(co.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(co.containsError(CheckId.C_GE_P_NON_PLANAR)); + co.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(co.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(co.containsError(CheckId.C_GE_P_NON_PLANAR)); + co.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(co.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(co.containsError(CheckId.C_GE_P_NON_PLANAR)); + } + + + @Test + public void testClearAllContainedCheckResults() { + co.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + + assertEquals(1, co.getAllCheckResults().size()); + co.clearAllContainedCheckResults(); + assertTrue(co.getAllCheckResults().isEmpty()); + } + + @Test + public void testContainsAnyError() { + assertFalse(co.containsAnyError()); + co.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(co.containsAnyError()); + co.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(co.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + co.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + co.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + @Test public void testClearGmlGeometries() { 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 a5c17861..00aab2b1 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,10 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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 org.citygml4j.core.model.generics.GenericOccupiedSpace; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -8,6 +12,9 @@ import org.junit.Test; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; +import java.util.ArrayList; +import java.util.List; + import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -32,6 +39,50 @@ public class GenericCityObjectTest { } + @Test + public void testContainsError() { + GenericCityObject gco = new GenericCityObject(); + assertFalse(gco.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(gco.containsError(CheckId.C_GE_P_NON_PLANAR)); + gco.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(gco.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(gco.containsError(CheckId.C_GE_P_NON_PLANAR)); + gco.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(gco.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(gco.containsError(CheckId.C_GE_P_NON_PLANAR)); + } + + + @Test + public void testClearAllContainedCheckResults() { + GenericCityObject gco = new GenericCityObject(); + gco.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + + assertEquals(1, gco.getAllCheckResults().size()); + gco.clearAllContainedCheckResults(); + assertTrue(gco.getAllCheckResults().isEmpty()); + } + + @Test + public void testContainsAnyError() { + GenericCityObject gco = new GenericCityObject(); + assertFalse(gco.containsAnyError()); + gco.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(gco.containsAnyError()); + gco.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(gco.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + GenericCityObject gco = new GenericCityObject(); + gco.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + gco.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + @Test public void testUnsetGmlGeometries() { GenericCityObject gco = new GenericCityObject(); 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 4e713494..dde2b7df 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,6 +32,7 @@ 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 org.citygml4j.core.model.construction.AbstractConstructionSurface; import org.citygml4j.core.model.construction.WallSurface; @@ -55,6 +56,20 @@ import org.mockito.Mockito; */ public class GeometryTest { + @Test + public void testVisitorPropagation() { + Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0); + ConcretePolygon mockPolygon = mock(ConcretePolygon.class); + + geom.addPolygon(mockPolygon); + + AbstractCheck c = new AbstractCheck() { + }; + geom.accept(c); + + verify(mockPolygon).accept(c); + } + @Test public void testCreate() { Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD0); 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 20af439b..6050b20f 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,7 +1,12 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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.Copy; import org.citygml4j.core.model.core.ImplicitGeometry; import org.citygml4j.core.model.core.TransformationMatrix4x4; import org.junit.Before; @@ -13,20 +18,25 @@ import org.xmlobjects.gml.util.jama.Matrix; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; public class ImplicitGeometryTest { - private Path path; + private ParserConfiguration config; private String pathString = "src/test/resources/ImplicitTestGeom.gml"; + private Path path = Paths.get(pathString); private TransformationMatrix4x4 origin; + private LibraryObject lib; + private ImplicitGeometryHolder igh; @Before public void setUp() { - path = Paths.get(pathString); config = new ParserConfiguration(8, false); Matrix og = new Matrix(4, 4); og.set(0, 0, 1); @@ -34,6 +44,17 @@ public class ImplicitGeometryTest { og.set(2, 2, 1); origin = new TransformationMatrix4x4(og); + lib = LibraryObject.of(path, config); + assertNotNull(lib); + + // Create copy for cleanup + lib = Copy.copy(lib); + + ImplicitGeometry geom = new ImplicitGeometry(); + geom.setTransformationMatrix(origin); + geom.setReferencePoint(new PointProperty(new Point(new DirectPosition(0, 0)))); + igh = new ImplicitGeometryHolder(geom, lib); + assertNotNull(igh); } @Test @@ -41,43 +62,91 @@ public class ImplicitGeometryTest { LibraryObject lo = LibraryObject.of(path, config); assertNotNull(lo); LibraryObject lo2 = LibraryObject.of(path, config); + assertNotNull(lo2); assertSame(lo, lo2); } @Test public void testObjectTransform() { - LibraryObject lo = LibraryObject.of(path, config); - assertNotNull(lo); ImplicitGeometry geom = new ImplicitGeometry(); - geom.setTransformationMatrix(origin); geom.setReferencePoint(new PointProperty(new Point(new DirectPosition(0, 0)))); - ImplicitGeometryHolder igh = new ImplicitGeometryHolder(geom, lo); - assertNotNull(igh); + ImplicitGeometryHolder transform1 = new ImplicitGeometryHolder(geom, lib); + assertNotNull(transform1); geom.setReferencePoint(new PointProperty(new Point(new DirectPosition(5, 8)))); - ImplicitGeometryHolder igh2 = new ImplicitGeometryHolder(geom, lo); - assertNotNull(igh2); - assertNotEquals(igh, igh2); - BoundingBox bb1 = BoundingBox.of(igh.getPolygons()); - BoundingBox bb2 = BoundingBox.of(igh2.getPolygons()); + ImplicitGeometryHolder transform2 = new ImplicitGeometryHolder(geom, lib); + assertNotNull(transform2); + assertNotEquals(transform1, transform2); + BoundingBox bb1 = BoundingBox.of(transform1.getPolygons()); + BoundingBox bb2 = BoundingBox.of(transform2.getPolygons()); assertNotEquals(bb1, bb2); + } + + @Test + public void testContainsError() { + assertFalse(lib.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(lib.containsError(CheckId.C_GE_P_NON_PLANAR)); + + igh.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertFalse("ImplicitGeometryHolder's errors should be ignored and delegate the call to the prototype geometry", + lib.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + + lib.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(lib.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(lib.containsError(CheckId.C_GE_P_NON_PLANAR)); + lib.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, null)); + assertTrue(lib.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(lib.containsError(CheckId.C_GE_P_NON_PLANAR)); } + @Test - public void testAccept() { - LibraryObject lib = LibraryObject.of(path, config); - assertNotNull(lib); + public void testClearAllContainedCheckResults() { + lib.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); - ImplicitGeometry geom = new ImplicitGeometry(); - geom.setTransformationMatrix(origin); - geom.setReferencePoint(new PointProperty(new Point(new DirectPosition(0, 0)))); + assertEquals(1, lib.getAllCheckResults().size()); + lib.clearAllContainedCheckResults(); + assertTrue(lib.getAllCheckResults().isEmpty()); + } - int polyCount = lib.getPolygons().size(); + @Test + public void testContainsAnyError() { + assertFalse(lib.containsAnyError()); + igh.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(lib.containsAnyError()); + lib.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(lib.containsAnyError()); + + igh.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertFalse(lib.containsAnyError()); + lib.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(lib.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + List errors = new ArrayList<>(); + + igh.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.ERROR, mock(CheckError.class))); + igh.collectContainedErrors(errors); + assertEquals("ImplicitGeometryHolder's errors should be ignored and delegate the call to the prototype geometry", + 0, errors.size()); + + lib.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + igh.collectContainedErrors(errors); + assertEquals("ImplicitGeometryHolder's errors should be ignored and delegate the call to the prototype geometry", + 1, errors.size()); + } - ImplicitGeometryHolder igh = new ImplicitGeometryHolder(geom, lib); + + @Test + public void testAccept() { + int polyCount = lib.getPolygons().size(); AtomicInteger loCounter = new AtomicInteger(0); diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandUseTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandUseTest.java index b41f7ca3..b108b0a5 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandUseTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/LandUseTest.java @@ -1,20 +1,75 @@ package de.hft.stuttgart.citydoctor2.datastructure; +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 org.citygml4j.core.model.landuse.LandUse; import org.citygml4j.core.util.geometry.GeometryFactory; +import org.junit.Before; import org.junit.Test; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; +import java.util.ArrayList; +import java.util.List; + import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; public class LandUseTest { + private LandUse lu; + private LandObject land; + + @Before + public void setUp() { + lu = new LandUse(); + land = new LandObject(lu); + } + @Test - public void testUnsetGeometries() { - LandUse lu = new LandUse(); - LandObject land = new LandObject(lu); + public void testContainsError() { + assertFalse(land.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(land.containsError(CheckId.C_GE_P_NON_PLANAR)); + land.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(land.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(land.containsError(CheckId.C_GE_P_NON_PLANAR)); + land.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(land.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(land.containsError(CheckId.C_GE_P_NON_PLANAR)); + } + + @Test + public void testClearAllContainedCheckResults() { + land.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + + assertEquals(1, land.getAllCheckResults().size()); + land.clearAllContainedCheckResults(); + assertTrue(land.getAllCheckResults().isEmpty()); + } + + @Test + public void testContainsAnyError() { + assertFalse(land.containsAnyError()); + land.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(land.containsAnyError()); + land.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(land.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + land.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + land.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + + @Test + public void testUnsetGeometries() { lu.setLod0MultiSurface(new MultiSurfaceProperty()); lu.setLod1MultiSurface(new MultiSurfaceProperty()); lu.setLod2MultiSurface(new MultiSurfaceProperty()); @@ -32,8 +87,6 @@ public class LandUseTest { @Test public void testReCreateGeometries() { - LandUse lu = new LandUse(); - LandObject land = new LandObject(lu); land.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD0)); land.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD1)); land.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE, Lod.LOD2)); 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 35d16bbe..d97059d1 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,16 +1,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; -import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import org.citygml4j.core.model.relief.ReliefFeature; -import org.citygml4j.core.model.relief.TINRelief; -import org.citygml4j.core.model.relief.TinProperty; -import org.citygml4j.core.util.geometry.GeometryFactory; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -30,31 +23,5 @@ public class ReliefObjectTest { verify(mockTin).accept(c); } - @Test - public void testUnsetGeometriesTinObject() { - TINRelief tir = new TINRelief(); - TinObject tin = new TinObject(tir); - - tir.setTin(new TinProperty()); - - tin.clearGmlGeometries(); - - assertNull(tir.getTin()); - } - @Test - public void testReCreateGeometriesTinObject() { - TINRelief tir = new TINRelief(); - TinObject tin = new TinObject(tir); - - tin.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE)); - - GeometryFactory factory = GeometryFactory.newInstance(); - ParserConfiguration config = new ParserConfiguration(8, false); - tin.reCreateGeometries(factory, config); - - assertNotNull(tir.getTin()); - assertNotNull(tir.getTin().getObject()); - assertEquals(2, tir.getLod()); - } } 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 new file mode 100644 index 00000000..b635e2a6 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TinObjectTest.java @@ -0,0 +1,117 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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 org.citygml4j.core.model.relief.TINRelief; +import org.citygml4j.core.model.relief.TinProperty; +import org.citygml4j.core.util.geometry.GeometryFactory; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class TinObjectTest { + + @Test + public void testVisitorPropagation() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + Geometry mockGeometry = mock(Geometry.class); + + tin.addGeometry(mockGeometry); + + AbstractCheck c = new AbstractCheck() { + }; + tin.accept(c); + + verify(mockGeometry).accept(c); + } + + @Test + public void testContainsError() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + assertFalse(tin.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(tin.containsError(CheckId.C_GE_P_NON_PLANAR)); + tin.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(tin.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(tin.containsError(CheckId.C_GE_P_NON_PLANAR)); + tin.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(tin.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(tin.containsError(CheckId.C_GE_P_NON_PLANAR)); + } + + + @Test + public void testClearAllContainedCheckResults() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + tin.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + + assertEquals(1, tin.getAllCheckResults().size()); + tin.clearAllContainedCheckResults(); + assertTrue(tin.getAllCheckResults().isEmpty()); + } + + @Test + public void testContainsAnyError() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + assertFalse(tin.containsAnyError()); + tin.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(tin.containsAnyError()); + tin.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(tin.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + tin.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + tin.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + + @Test + public void testUnsetGeometries() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + + tir.setTin(new TinProperty()); + + tin.clearGmlGeometries(); + + assertNull(tir.getTin()); + } + + @Test + public void testReCreateGeometries() { + TINRelief tir = new TINRelief(); + TinObject tin = new TinObject(tir); + + tin.addGeometry(GeometryTestUtils.createDummyGeometry(GeometryType.MULTI_SURFACE)); + + GeometryFactory factory = GeometryFactory.newInstance(); + ParserConfiguration config = new ParserConfiguration(8, false); + tin.reCreateGeometries(factory, config); + + assertNotNull(tir.getTin()); + assertNotNull(tir.getTin().getObject()); + assertEquals(2, tir.getLod()); + } +} 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 fa0e1fd3..0f3a1572 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 @@ -46,7 +46,7 @@ public class TopLevelTransportFeatureTest { } @Test - public void testVisitorPropagationTopLevel() { + public void testVisitorPropagation() { Road road = new Road(); TopLevelTransportFeature top = TopLevelTransportFeature.from(road); TransportSection mockSection = mock(TransportSection.class); @@ -62,6 +62,32 @@ public class TopLevelTransportFeatureTest { verify(mockIntersection).accept(c); } + @Test + public void testContainsError() { + Road road = new Road(); + TopLevelTransportFeature top = TopLevelTransportFeature.from(road); + assertFalse(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(top.containsError(CheckId.C_GE_P_NON_PLANAR)); + top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(top.containsError(CheckId.C_GE_P_NON_PLANAR)); + top.addCheckResult(new CheckResult(CheckId.C_GE_P_NON_PLANAR, ResultStatus.OK, mock(CheckError.class))); + assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(top.containsError(CheckId.C_GE_P_NON_PLANAR)); + } + + @Test + public void testContainsAnyError() { + Road road = new Road(); + TopLevelTransportFeature top = TopLevelTransportFeature.from(road); + assertFalse(top.containsAnyError()); + top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(top.containsAnyError()); + top.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(top.containsAnyError()); + } + @Test public void testClearAllContainedCheckResults() { Road roadMock = mock(Road.class); diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaTest.java index 9174677a..63173900 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaTest.java @@ -27,14 +27,23 @@ public class TrafficAreaTest { @Test public void testContainsError() { TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); - TrafficArea taMock = mock(TrafficArea.class); - tao.setGmlObject(taMock); tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); assertTrue(tao.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); assertFalse(tao.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); } + @Test + public void testContainsAnyError() { + TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); + assertFalse(tao.containsAnyError()); + tao.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(tao.containsAnyError()); + tao.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(tao.containsAnyError()); + } + @Test public void testClearAllContainedCheckResults() { TrafficAreaObject tao = new TrafficAreaObject(TrafficAreaObject.TrafficAreaType.TRAFFIC_AREA); 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 38d30d55..bb6c592e 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 @@ -54,6 +54,17 @@ public class TrafficSpaceTest { } + @Test + public void testContainsAnyError() { + TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); + assertFalse(tso.containsAnyError()); + tso.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(tso.containsAnyError()); + tso.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(tso.containsAnyError()); + } + @Test public void testCollectContainedErrors() { TrafficSpaceObject tso = new TrafficSpaceObject(TrafficSpaceObject.TrafficSpaceType.TRAFFIC_SPACE); diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java index a0135fd6..56656858 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationObjectTest.java @@ -26,13 +26,11 @@ import org.mockito.Mockito; public class TransportationObjectTest { - //TODO: Visitor Propagation testing - //TODO: Rework this class to be more in line with the other datastructure tests - @Test public void testGetFeatureType() { TopLevelTransportFeature to = TopLevelTransportFeature.from(Mockito.mock(Road.class)); assertEquals(FeatureType.TRANSPORTATION, to.getFeatureType()); } + } 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 7e0cc050..e30557c2 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 @@ -7,11 +7,14 @@ import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.ResultStatus; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import org.citygml4j.core.model.transportation.AbstractTransportationSpace; -import org.citygml4j.core.model.transportation.Road; import org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.visitor.ObjectVisitor; import org.junit.Test; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -37,6 +40,54 @@ public class TransportationSpaceTest { verify(auxMockSpace).accept(c); } + @Test + public void testContainsError() { + TransportationSpace space = new TransportationSpace(TransportationObject.TransportationType.TRANSPORTATION_COMPLEX) { + }; + + space.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(space.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(space.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); + + } + + @Test + public void testContainsAnyError() { + TransportationSpace space = new TransportationSpace(TransportationObject.TransportationType.TRANSPORTATION_COMPLEX) { + }; + assertFalse(space.containsAnyError()); + space.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(space.containsAnyError()); + space.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(space.containsAnyError()); + } + + @Test + public void testCollectContainedErrors() { + TransportationSpace space = new TransportationSpace(TransportationObject.TransportationType.TRANSPORTATION_COMPLEX) { + }; + + space.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + space.collectContainedErrors(errors); + assertEquals(1, errors.size()); + + } + + @Test + public void testClearAllContainedCheckResults() { + TransportationSpace space = new TransportationSpace(TransportationObject.TransportationType.TRANSPORTATION_COMPLEX) { + }; + + assertFalse(space.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + space.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(space.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + space.clearAllContainedCheckResults(); + assertFalse(space.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + + } + @Test public void testReCreateGeometriesSolid() { @@ -97,15 +148,4 @@ public class TransportationSpaceTest { assertNotNull(gmlAts.getDeprecatedProperties().getLod4MultiSurface()); assertNotNull(gmlAts.getDeprecatedProperties().getLod4MultiSurface().getObject()); } - - @Test - public void testContainsError() { - Road roadMock = mock(Road.class); - TopLevelTransportFeature top = TopLevelTransportFeature.from(roadMock); - top.setGmlObject(roadMock); - - top.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); - assertTrue(top.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); - assertFalse(top.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); - } } diff --git a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java index dc57b588..5f9c97a3 100644 --- a/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java +++ b/CityDoctorParent/CityDoctorModel/src/test/java/de/hft/stuttgart/citydoctor2/datastructure/VegetationTest.java @@ -1,5 +1,9 @@ package de.hft.stuttgart.citydoctor2.datastructure; +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 org.citygml4j.core.model.vegetation.PlantCover; import org.citygml4j.core.model.vegetation.SolitaryVegetationObject; @@ -10,13 +14,64 @@ import org.xmlobjects.gml.model.geometry.aggregates.MultiSolidProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; public class VegetationTest { //TODO: Recreate geometries tests + @Test + public void testContainsError() { + Vegetation veg = new Vegetation(Vegetation.VegetationType.PLANT_COVER); + + veg.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(veg.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(veg.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); + } + + @Test + public void testContainsAnyError() { + Vegetation veg = new Vegetation(Vegetation.VegetationType.PLANT_COVER); + + assertFalse(veg.containsAnyError()); + veg.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(veg.containsAnyError()); + veg.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(veg.containsAnyError()); + } + + @Test + public void testClearAllContainedCheckResults() { + Vegetation veg = new Vegetation(Vegetation.VegetationType.PLANT_COVER); + + assertFalse(veg.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + veg.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(veg.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + veg.clearAllContainedCheckResults(); + assertFalse(veg.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + + } + + @Test + public void testCollectContainedErrors() { + Vegetation veg = new Vegetation(Vegetation.VegetationType.PLANT_COVER); + + veg.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + veg.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + + @Test public void testUnsetGmlGeometriesPlantCover() { Vegetation plantCover = new Vegetation(Vegetation.VegetationType.PLANT_COVER); 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 309dbda9..b0289228 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,10 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; +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 org.citygml4j.core.model.waterbody.WaterBody; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -8,8 +12,14 @@ import org.junit.Test; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -31,6 +41,50 @@ public class WaterTest { verify(bsMock2).accept(c); } + @Test + public void testContainsError() { + WaterObject water = new WaterObject(); + + water.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(water.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + assertFalse(water.containsError(CheckId.C_GE_P_INNER_RINGS_NESTED)); + } + + @Test + public void testContainsAnyError() { + WaterObject water = new WaterObject(); + + assertFalse(water.containsAnyError()); + water.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); + assertFalse(water.containsAnyError()); + water.addCheckResult( + new CheckResult(CheckId.C_GE_P_INNER_RINGS_NESTED, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(water.containsAnyError()); + } + + @Test + public void testClearAllContainedCheckResults() { + WaterObject water = new WaterObject(); + + assertFalse(water.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + water.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + assertTrue(water.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + water.clearAllContainedCheckResults(); + assertFalse(water.containsError(CheckId.C_GE_P_HOLE_OUTSIDE)); + + } + + @Test + public void testCollectContainedErrors() { + WaterObject water = new WaterObject(); + + water.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.ERROR, mock(CheckError.class))); + List errors = new ArrayList<>(); + water.collectContainedErrors(errors); + assertEquals(1, errors.size()); + } + + @Test public void testUnsetGmlGeometries() { WaterObject water = new WaterObject(); -- GitLab From d58e0286472c1941c13b6be7302b930617caf244 Mon Sep 17 00:00:00 2001 From: Riegel Date: Mon, 5 May 2025 12:45:16 +0200 Subject: [PATCH 49/51] Docs: Add JavaDoc --- .../citydoctor2/check/Checkable.java | 45 +++++++----- .../citydoctor2/datastructure/CityObject.java | 72 +++++++++++++++---- .../citydoctor2/datastructure/Geometry.java | 1 - .../citydoctor2/utils/CheckErrorFound.java | 3 + .../visitors/CheckableErrorCollector.java | 8 +++ .../utils/visitors/CityObjectCollector.java | 7 +- .../visitors/ClearCheckResultsVisitor.java | 3 + .../visitors/ClearMetaInformationVisitor.java | 3 + .../visitors/ContainsAnyErrorVisitor.java | 14 ++++ .../utils/visitors/ContainsErrorVisitor.java | 15 ++++ .../utils/visitors/GmlGeometryRebuilder.java | 14 ++++ .../visitors/PrepareForCheckingVisitor.java | 3 + .../visitors/UnsetGeometriesVisitor.java | 4 ++ 13 files changed, 157 insertions(+), 35 deletions(-) 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 e7abe717..eee6292b 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 @@ -93,7 +93,7 @@ public abstract class Checkable implements Serializable { /** * This should be called before executing a check if low memory consumption - * method has been enabled. This should create edges and additional meta + * method has been enabled. Creates edges and additional meta * information necessary to perform checks. */ public void prepareForChecking() { @@ -101,20 +101,19 @@ public abstract class Checkable implements Serializable { } /** - * This should be called after checking has been done. This should remove any - * created meta information like edges to free up additional memory space + * This should be called after checking has been done. Removes any + * created meta information like edges to free up memory. */ public void clearMetaInformation() { this.accept(new ClearMetaInformationVisitor()); } /** - * This method checks if the object or any object contained within this - * checkable has an error. It counts as an error if the result status if the - * given check is DEPENDENCIES_NOT_MET. - * - * @param checkIdentifier the name of the check for which an error is searched - * @return true if an error has been found with the given check + * Checks if the object, or any object in its datastructure, has a specific error or is not fulfilling the dependencies + * of it. + * + * @param checkIdentifier the associated CheckID of this error + * @return true if the error was found, false otherwise */ public boolean containsError(CheckId checkIdentifier) { try { @@ -125,6 +124,12 @@ public abstract class Checkable implements Serializable { return false; } + /** + * Checks if this checkable has an error or is not meeting the dependencies for it. + * + * @param checkIdentifier the associated CheckID of this error + * @return true if the error was found, false otherwise + */ public boolean hasError(CheckId checkIdentifier) { CheckResult cs = getCheckResult(checkIdentifier); if (cs == null) { @@ -155,8 +160,8 @@ public abstract class Checkable implements Serializable { } /** - * - * @return all check results for this checkable. + * + * @return all check results of this checkable. */ public Map getAllCheckResults() { return checkResults; @@ -179,9 +184,7 @@ public abstract class Checkable implements Serializable { } /** - * Checks whether this checkable has an error. Dependency errors are not - * considered for this function. This will only check this checkable and not - * traverse any checkables contained in this instance. + * Checks whether this checkable has any error, barring dependency errors. * * @return true if it has an error, otherwise false */ @@ -218,7 +221,7 @@ public abstract class Checkable implements Serializable { } /** - * Clears all errors from this checkable + * Clears the checkResults list of this checkable. */ public void clearCheckResults() { setValidated(false); @@ -226,16 +229,16 @@ public abstract class Checkable implements Serializable { } /** - * Removes all errors from this instance and all contained checkables. + * Clears the checkResults list of this checkable and all child objects in its datastructure. */ public final void clearAllContainedCheckResults() { this.accept(new ClearCheckResultsVisitor()); } /** - * - * @return false if the checkable or all checkables contained in this one don't - * have any error. + * Checks if this checkable contains any error within its datastructure. + * + * @return true if any checkable of this datastructure contains an error, false otherwise */ public final boolean containsAnyError() { try { @@ -246,6 +249,10 @@ public abstract class Checkable implements Serializable { return false; } + /** + * Checks if this checkable has any error + * @return true if this checkable has any error, false otherwise + */ public boolean hasAnyError() { for (CheckResult cr : checkResults.values()) { if (cr.getResultStatus() == ResultStatus.ERROR 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 86474604..1291a8de 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 @@ -48,20 +48,24 @@ public abstract class CityObject extends GmlElement { private final List genericAttributeList = new ArrayList<>(); /** - * Recreates the CityGML4j geometry in this object. The CityGML4j geometry is - * deleted from the data structure as was mapped to the city doctor data - * structure. For writing CityGML files the geometry has to be restored. Also - * maps changes to geometry back to CityGML4j - * - * @param factory needed to create CityGML4j data structures - * @param config contains information whether a city doctor point was - * transformed to a different coordinate system. It would need to - * be transformed to the original coordinate system + * Recreates the CityGML4j geometry in this object's datastructure using the CityDoctor geometries. + * The original CityGML4j geometry is deleted after parsing to reduce the memory overhead of {@link CityObject CityObjects}. + *

+ * Recreation of the geometries is needed for writing validation results to the QualityADE, as well as for the export + * of repaired geometries from CityDoctor's internal datastructure. + * @param factory the GeometryFactory used for creation of CityGml4j geometry objects + * @param config the configuration settings of the parser */ public final void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { this.accept(new GmlGeometryRebuilder(factory, config)); } + /** + * Rebuilds the CityGML4j geometries of this object. + * + * @param factory the GeometryFactory used for creation of CityGml4j geometry objects + * @param config the configuration settings of the parser + */ public abstract void rebuildGeometries(GeometryFactory factory, ParserConfiguration config); /** @@ -72,36 +76,58 @@ public abstract class CityObject extends GmlElement { public abstract AbstractCityObject getGmlObject(); /** - * Remove the CityGML4j geometries from this CityObject to save memory. + * Remove the CityGML4j geometries from this CityObject to reduce memory overhead. */ public abstract void unsetGmlGeometries(); /** - * Removes all CityGML4J geometries from this CityObject and all children in its datastructure. + * Removes all CityGML4J geometries from this CityObject and child objects of its datastructure to reduce + * the memory overhead. */ public final void clearGmlGeometries() { this.accept(new UnsetGeometriesVisitor()); } + /** + * Adds a Geometry to this object. + * @param geom the Geometry to add. + */ public void addGeometry(Geometry geom) { Objects.requireNonNull(geom); geometryList.add(geom); geom.setParent(this); } - + /** + * Returns all Geometries of this object. + * @return a list of the Geometries. + */ public List getGeometries() { return geometryList; } + /** + * Removes a Geometry from this object. + * @param lod the {@link Lod} of the Geometry. + */ public void removeGeometry(Lod lod) { geometryList.removeIf(geom -> geom.getLod() == lod); } + /** + * Removes a Geometry from this object. + * @param lod the {@link Lod} of the Geometry. + * @param type the {@link GeometryType} of the Geometry. + */ public void removeGeometry(Lod lod, GeometryType type) { geometryList.removeIf(geom -> geom.getLod() == lod && geom.getType() == type); } + /** + * Returns the Geometry with the highest LOD of this object. If multiple Geometries share the highest LOD, the one + * that was added first will be returned. + * @return the Geometry with the highest LOD + */ public Geometry getHighestLodGeometry() { Geometry highestLodGeometry = null; Lod highestLod = null; @@ -115,29 +141,47 @@ public abstract class CityObject extends GmlElement { } /** - * Returns the top-level CityObject (like Building or Tunnel) belonging to this object. + * Returns the top-level CityObject (e.g. Building, Tunnel, Vegetation etc.) belonging to this object. */ public abstract CityObject getTopLevelCityObject(); /** - * Returns the display text for this object + * Returns a String representation of this object for display in the featuretab TreeViews in the format of + * "[FeatureType] Gml-ID" + * @return the String representation. */ public String getDisplayText() { return String.format("[%s] %s", this.getClass().getSimpleName(), this.getGmlId().toString()); } + /** + * Returns the color for rendering of this object's polygons. + * @return color for this object + */ public Color getRenderColor() { return Color.WHITE; } + /** + * Adds a GenericAttribute to this object. + * @param genericAttribute the attribute to add. + */ public void addGenericAttribute(GenericAttribute genericAttribute) { genericAttributeList.add(genericAttribute); } + /** + * Returns all GenericAttributes of this object. + * @return a list of the GenericAttributes. + */ public List getGenericAttributes() { return genericAttributeList; } + /** + * Returns the CityGML FeatureType of this object. + * @return this object's FeatureType. + */ public abstract FeatureType getFeatureType(); @Override 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 8b4eb6d2..86154854 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 @@ -28,7 +28,6 @@ import de.hft.stuttgart.citydoctor2.utils.SerializablePair; import java.io.Serial; import java.util.*; -import java.util.Map.Entry; /** * Representation of a geometry containing the polygons and edges 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 82f0740e..cd7d13cd 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,5 +1,8 @@ package de.hft.stuttgart.citydoctor2.utils; +/** + * This Throwable signals that a requested CheckError was found. + */ public class CheckErrorFound extends Throwable { 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 ab69d623..d6af6749 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 @@ -6,10 +6,18 @@ import de.hft.stuttgart.citydoctor2.check.Checkable; import java.util.List; +/** + * This Visitor collects all CheckErrors in the datastructure of a checkable. + */ public class CheckableErrorCollector extends AbstractCheck { List errors; + /** + * Collects all CheckErrors into a list + * + * @param errors the list + */ public CheckableErrorCollector(List errors) { this.errors = 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 1a72e9c6..31948813 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 @@ -7,12 +7,17 @@ import java.util.HashSet; import java.util.Set; /** - * This AbstractCheck collects all CityObjects in the substructure of a Feature. + * This Visitor collects all sub-CityObjects that are in the datastructure of a CityObject (including itself) in a Set. */ public class CityObjectCollector extends AbstractCheck { private final Set objects = new HashSet<>(); + /** + * Returns the collected CityObjects. + * + * @return A set of CityObjects + */ public Set getCityObjects() { return objects; } 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/ClearCheckResultsVisitor.java index 01bbb277..18019a70 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/ClearCheckResultsVisitor.java @@ -3,6 +3,9 @@ package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; 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 { @Override 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 18e86496..b08ed136 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 @@ -3,6 +3,9 @@ package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; 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 { @Override 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 09f0641c..02a9a5b2 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 @@ -5,8 +5,22 @@ import de.hft.stuttgart.citydoctor2.check.Checkable; import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound; import de.hft.stuttgart.citydoctor2.utils.ThrowUtils; +/** + * This visitor checks if a checkable contains any error in its datastructure. + *

+ * 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 { + /** + * Checks if a Checkable, or any Object in its datastructure, contains any error. + *

+ * Terminates early upon finding an error by throwing {@link CheckErrorFound} + * + * @param checkable The object to check + * @throws CheckErrorFound when any Error is found + */ public static void checkObject(Checkable checkable) throws CheckErrorFound { checkable.accept(new ContainsAnyErrorVisitor()); } 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 4588eb6a..9ddc69c5 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 @@ -6,10 +6,25 @@ import de.hft.stuttgart.citydoctor2.check.Checkable; import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound; import de.hft.stuttgart.citydoctor2.utils.ThrowUtils; +/** + * This visitor checks if a checkable contains a specific error in its datastructure. + *

+ * 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 { private CheckId checkId; + /** + * Checks if a Checkable, or any Object in its datastructure, contains a specific error. + *

+ * Terminates early upon finding the error by throwing {@link CheckErrorFound} + * + * @param checkable The object to check + * @param checkIdentifier The specific error's associated ID + * @throws CheckErrorFound when the error is found + */ public static void checkObject(Checkable checkable, CheckId checkIdentifier) throws CheckErrorFound { checkable.accept(new ContainsErrorVisitor(checkIdentifier)); } 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 615e9157..cd74226b 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 @@ -5,12 +5,26 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import org.citygml4j.core.util.geometry.GeometryFactory; +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 { private final GeometryFactory factory; private final ParserConfiguration config; + /** + * Creates a new Rebuilder for reconstruction of CityGml geometries. + * + * @param factory the GeometryFactory used for creation of CityGml geometry objects. + * @param configuration the configuration settings of the parser + */ public GmlGeometryRebuilder(GeometryFactory factory, ParserConfiguration configuration) { + Objects.requireNonNull(factory); + Objects.requireNonNull(configuration); this.factory = factory; this.config = configuration; } 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 56410305..3388da78 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 @@ -3,6 +3,9 @@ package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; 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 { @Override 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 7c632650..d24948d6 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 @@ -3,6 +3,10 @@ package de.hft.stuttgart.citydoctor2.utils.visitors; import de.hft.stuttgart.citydoctor2.check.AbstractCheck; 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 { -- GitLab From 5d718df17434983743642b78df0c2ff19e737b60 Mon Sep 17 00:00:00 2001 From: Riegel Date: Mon, 5 May 2025 14:10:16 +0200 Subject: [PATCH 50/51] Test: Cleanup test case --- .../citydoctor2/datastructure/AbstractBuildingTest.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) 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 ba4cd45a..0c8e436c 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 @@ -138,18 +138,12 @@ public class AbstractBuildingTest { @Test public void testClearAllContainedCheckResults() { - Installation biMock = mock(Installation.class); - BoundarySurface bsMock = mock(BoundarySurface.class); - AbstractBuilding ab = createAbstractBuilding(); + assertTrue(ab.getAllCheckResults().isEmpty()); ab.addCheckResult(new CheckResult(CheckId.C_GE_P_HOLE_OUTSIDE, ResultStatus.OK, null)); - ab.addBoundarySurface(bsMock); - ab.addBuildingInstallation(biMock); assertEquals(1, ab.getAllCheckResults().size()); ab.clearAllContainedCheckResults(); - Mockito.verify(biMock).accept(any(ClearCheckResultsVisitor.class)); - Mockito.verify(bsMock).accept(any(ClearCheckResultsVisitor.class)); assertTrue(ab.getAllCheckResults().isEmpty()); } -- GitLab From 120466a083553a07b86e1c6b72035ba86d1997e1 Mon Sep 17 00:00:00 2001 From: Riegel Date: Mon, 5 May 2025 14:10:56 +0200 Subject: [PATCH 51/51] Refactor: Simplify PhongMaterial calculation --- .../datastructure/BoundarySurface.java | 8 +++- .../datastructure/ConcretePolygon.java | 6 +++ .../citydoctor2/datastructure/Geometry.java | 5 +++ .../datastructure/LinkedPolygon.java | 6 +++ .../citydoctor2/datastructure/Opening.java | 10 +++++ .../citydoctor2/datastructure/Polygon.java | 3 ++ .../citydoctor2/gui/TriangulatedGeometry.java | 42 +------------------ 7 files changed, 39 insertions(+), 41 deletions(-) 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 a68fd833..97720249 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 @@ -92,7 +92,13 @@ public class BoundarySurface extends CityObject { return switch (type) { case ROOF -> Color.RED; case GROUND -> Color.KHAKI; - default -> Color.WHITE; + default -> { + if (parent != null) { + yield parent.getRenderColor(); + } else { + yield Color.WHITE; + } + } }; } 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 9449a98b..c5c99a5e 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 @@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.Checkable; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.JoglTesselator; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; +import javafx.scene.paint.Color; import java.io.Serial; import java.util.ArrayList; @@ -412,6 +413,11 @@ public class ConcretePolygon extends Polygon { } return area; } + + @Override + public Color getRenderColor() { + return parent.getRenderColor(); + } 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 86154854..5525115c 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 @@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; import de.hft.stuttgart.citydoctor2.utils.BoundingBoxCalculator; import de.hft.stuttgart.citydoctor2.utils.SerializablePair; +import javafx.scene.paint.Color; import java.io.Serial; import java.util.*; @@ -342,4 +343,8 @@ public class Geometry extends GmlElement { edges = null; edgeMap = null; } + + public Color getRenderColor() { + return parent.getRenderColor(); + } } 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 7bf592fd..1c940c1a 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 @@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; +import javafx.scene.paint.Color; import java.io.Serial; import java.util.List; @@ -259,4 +260,9 @@ public class LinkedPolygon extends Polygon { return poly.getArea(); } + @Override + public Color getRenderColor() { + return poly.getRenderColor(); + } + } 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 8a003486..19990e96 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 @@ -21,6 +21,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; +import javafx.scene.paint.Color; import org.citygml4j.core.model.construction.AbstractFillingSurface; import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.util.geometry.GeometryFactory; @@ -152,4 +153,13 @@ public class Opening extends CityObject { return FeatureType.OPENING; } + @Override + public Color getRenderColor() { + return switch (type) { + case DOOR -> Color.ORANGE; + case WINDOW -> Color.TEAL; + default -> Color.BLACK; + }; + } + } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Polygon.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Polygon.java index a7833aba..7adb8bc7 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Polygon.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Polygon.java @@ -20,6 +20,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; +import javafx.scene.paint.Color; import java.io.Serial; import java.util.List; @@ -86,4 +87,6 @@ public abstract class Polygon extends GmlElement { public abstract double getArea(); + public abstract Color getRenderColor(); + } \ No newline at end of file diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java index c5d7ed3e..9709b353 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java @@ -167,17 +167,10 @@ public class TriangulatedGeometry { private PhongMaterial calculateMaterial(Polygon p, Color baseColor) { Vector3d normal = p.calculateNormalNormalized(); - BoundarySurface bs = p.getPartOfSurface(); - if (bs != null) { - if (bs.getType() == BoundarySurfaceType.ROOF) { - baseColor = Color.RED; - } else if (bs.getType() == BoundarySurfaceType.GROUND) { - baseColor = Color.KHAKI; - } + if (p.getRenderColor() != null && p.getRenderColor() != Color.WHITE) { + baseColor = p.getRenderColor(); } - baseColor = determineColorDependingOnParentType(p, baseColor); - double cos = normal.dot(AXIS); double acos = Math.acos(cos); // normalize to range [0.3, 0.9] @@ -188,37 +181,6 @@ public class TriangulatedGeometry { return new PhongMaterial(derivedColor); } - private Color determineColorDependingOnParentType(Polygon p, Color baseColor) { - p = p.getOriginal(); - Polygon p1 = p.getLinkedFromPolygon(); - Color parentColor = null; - if (p1 != null) { - parentColor = p1.getParent().getParent().getRenderColor(); - } else { - parentColor = baseColor = p.getParent().getParent().getRenderColor(); - } - if (parentColor != null && parentColor != Color.WHITE) { - baseColor = parentColor; - } - baseColor = changeBaseColorIfPolygonHasOpeningParent(p1, baseColor); - baseColor = changeBaseColorIfPolygonHasOpeningParent(p, baseColor); - return baseColor; - } - - private Color changeBaseColorIfPolygonHasOpeningParent(Polygon p, Color baseColor) { - if (p == null) { - return baseColor; - } - CityObject parent = p.getParent().getParent(); - if (parent instanceof Opening op) { - if (op.getType() == OpeningType.DOOR) { - baseColor = Color.ORANGE; - } else { - baseColor = Color.TEAL; - } - } - return baseColor; - } private Vector3d findCenter(List points) { double xMin = Double.MAX_VALUE; -- GitLab