diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingSelfIntersectionErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingSelfIntersectionErrorAdapter.java index 0c6121819b9cd491caaad4fb5854d3d6307ff251..30513366af8b6b0e56898cffeb17b616faa85f41 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingSelfIntersectionErrorAdapter.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingSelfIntersectionErrorAdapter.java @@ -53,10 +53,6 @@ public class RingSelfIntersectionErrorAdapter extends AbstractRingErrorAdapter<R public void writeChildElements(RingSelfIntersectionError object, Namespaces namespaces, XMLWriter writer) throws ObjectSerializeException, XMLWriteException { super.writeChildElements(object, namespaces, writer); - if (object.getType() != null) { - writer.writeElement( - Element.of(QualityADEModule.NAMESPACE_URI, "type").addTextContent(object.getType().toString())); - } if (object.getEdge1() != null) { writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "edge1"), object.getEdge1(), EdgePropertyAdapter.class, namespaces); @@ -73,5 +69,9 @@ public class RingSelfIntersectionErrorAdapter extends AbstractRingErrorAdapter<R writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "vertex2"), object.getVertex2(), DirectPositionAdapter.class, namespaces); } + if (object.getType() != null) { + writer.writeElement( + Element.of(QualityADEModule.NAMESPACE_URI, "type").addTextContent(object.getType().toString())); + } } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/enums/RingSelfIntType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/enums/RingSelfIntType.java index d6d5b83afe899f7939c7855622008f586d93b07d..e544927720bf0bb9be40f9facca3791c20cd88d2 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/enums/RingSelfIntType.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/enums/RingSelfIntType.java @@ -16,5 +16,5 @@ package de.hft.stuttgart.quality.model.enums; public enum RingSelfIntType { - DUPLICATE_POINT, POINT_TOUCHES_EDGE, EDGE_INTERSECTS_EDGE + EDGE_INTERSECTION, VERTEX_TOUCHES_EDGE, DUPLICATE_POINT, DEGENERATED_RING } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractError.java index 8d06b533ade8849679d8eee457a90d183401c509..f5675b0d32c128a779d52d4aa757470f95eec482 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractError.java @@ -20,9 +20,15 @@ import java.io.Serial; import org.citygml4j.core.model.ade.ADEObject; import org.xmlobjects.gml.model.GMLObject; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public abstract class AbstractError extends GMLObject implements ADEObject { @Serial private static final long serialVersionUID = 4456303926951620441L; - + + public void accept(ValidationErrorVisitor visitor) { + visitor.visit(this); + } + } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractGeometryError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractGeometryError.java index 58234e2f6250ff83e5511917b684847c06e88493..4e5203db5b695543faaa62d41ab845d220e6cfd6 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractGeometryError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractGeometryError.java @@ -17,9 +17,17 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public abstract class AbstractGeometryError extends AbstractError { @Serial private static final long serialVersionUID = 5584980708521134866L; + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractPolygonError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractPolygonError.java index 47d3c46448e5d8f3f0cb4ae82751b1cf4e35dca9..bcf898cd3a5cbecb231483cc9d532ae3427666a9 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractPolygonError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractPolygonError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public abstract class AbstractPolygonError extends AbstractGeometryError { @Serial @@ -31,5 +33,11 @@ public abstract class AbstractPolygonError extends AbstractGeometryError { public void setPolygonId(String polygonId) { this.polygonId = polygonId; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractRingError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractRingError.java index 41f9f90d3ed3764670570b5ef2dda295d6ff817f..84255f41ad67cb79a4c5316013c16db5099d2de7 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractRingError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractRingError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public abstract class AbstractRingError extends AbstractGeometryError { @Serial @@ -31,5 +33,11 @@ public abstract class AbstractRingError extends AbstractGeometryError { public void setLinearRingId(String linearRingId) { this.linearRingId = linearRingId; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractSemanticError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractSemanticError.java index 8a2bc67d973636f6eef5df29a0d0b253772a0e55..3018482ed4beaf86283c69961d48d97f86721364 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractSemanticError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractSemanticError.java @@ -17,9 +17,17 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public abstract class AbstractSemanticError extends AbstractError { - @Serial - private static final long serialVersionUID = 3754322190455789991L; + @Serial + private static final long serialVersionUID = 3754322190455789991L; + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractSolidError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractSolidError.java index 3c326b5a8e8fa84808bc9aaab1530bb708267d71..cb9362f286c9bd56cbe1eb6f0aafc06705500c85 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractSolidError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AbstractSolidError.java @@ -17,12 +17,14 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public abstract class AbstractSolidError extends AbstractGeometryError { - @Serial - private static final long serialVersionUID = 8616094562996823088L; - - private String geometryId; + @Serial + private static final long serialVersionUID = 8616094562996823088L; + + private String geometryId; public String getGeometryId() { return geometryId; @@ -32,4 +34,10 @@ public abstract class AbstractSolidError extends AbstractGeometryError { this.geometryId = geometryId; } + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } + } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AllPolygonsOrientedWrongError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AllPolygonsOrientedWrongError.java index f3634a15353e7883c05da303ece9b1f589d7aa37..bccf290db4883a441bc88ecd0799ec9e6755ec8b 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AllPolygonsOrientedWrongError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/AllPolygonsOrientedWrongError.java @@ -17,9 +17,17 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class AllPolygonsOrientedWrongError extends AbstractSolidError { @Serial private static final long serialVersionUID = 4295306777217062184L; + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ConsecutivePointsSameError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ConsecutivePointsSameError.java index a45e30910722e93d0b77488b151a9cc2e2c217fc..7b8a0a1e997dbf050ca0b3bcd5714da4baad688c 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ConsecutivePointsSameError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ConsecutivePointsSameError.java @@ -19,6 +19,8 @@ import java.io.Serial; import org.xmlobjects.gml.model.geometry.DirectPosition; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class ConsecutivePointsSameError extends AbstractRingError { @Serial @@ -42,6 +44,12 @@ public class ConsecutivePointsSameError extends AbstractRingError { public void setVertex2(DirectPosition vertex2) { this.vertex2 = asChild(vertex2); } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Override public String toString() { diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/HoleOutsideError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/HoleOutsideError.java index fafdb46e7072a0402bb143ad5ca84565eaeb6439..6c6f199f871a28aa412f79cd5f72a5dcc9387d33 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/HoleOutsideError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/HoleOutsideError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class HoleOutsideError extends AbstractPolygonError { @Serial @@ -31,6 +33,12 @@ public class HoleOutsideError extends AbstractPolygonError { public void setLinearRingId(String linearRingId) { this.linearRingId = linearRingId; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Override public String toString() { diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/InnerRingsNestedError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/InnerRingsNestedError.java index e03aaba66681ce392267e754ede5ad4a3e4c66d3..658f20986550bce2d22a708602f27edeb2e2d636 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/InnerRingsNestedError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/InnerRingsNestedError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class InnerRingsNestedError extends AbstractPolygonError { @Serial @@ -40,6 +42,12 @@ public class InnerRingsNestedError extends AbstractPolygonError { public void setLinearRingId2(String linearRingId2) { this.linearRingId2 = linearRingId2; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Override public String toString() { diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/InteriorDisconnectedError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/InteriorDisconnectedError.java index b9f782e84a6ed192e41617635616f5042cebef2e..f750cd88523aa608749f14aed006be79957347ea 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/InteriorDisconnectedError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/InteriorDisconnectedError.java @@ -17,7 +17,16 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class InteriorDisconnectedError extends AbstractPolygonError { + + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Serial private static final long serialVersionUID = 8270468563578479182L; diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/IntersectingRingsError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/IntersectingRingsError.java index 02c1efe4cc8aab39465864dacb48fb224dda840c..6ec183c4cafda9bd139d12cb8c73801ab6caeca6 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/IntersectingRingsError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/IntersectingRingsError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class IntersectingRingsError extends AbstractPolygonError { @Serial @@ -40,6 +42,12 @@ public class IntersectingRingsError extends AbstractPolygonError { public void setLinearRingId2(String linearRingId2) { this.linearRingId2 = linearRingId2; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Override public String toString() { diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/MultipleComponentsError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/MultipleComponentsError.java index c07804c540b6bc18ced007085ba87d76d1625209..ee3b280b32bbd2e8632c58f8d51a1327cec203ef 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/MultipleComponentsError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/MultipleComponentsError.java @@ -21,6 +21,7 @@ import java.util.List; import org.xmlobjects.model.ChildList; import de.hft.stuttgart.quality.model.properties.PolygonIdListProperty; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; public class MultipleComponentsError extends AbstractSolidError { @@ -35,6 +36,12 @@ public class MultipleComponentsError extends AbstractSolidError { } return components; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } public void setComponents(List<PolygonIdListProperty> edges) { this.components = asChild(edges); diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/NonManifoldEdgeError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/NonManifoldEdgeError.java index b38562cacc6dee99ed5a61e7d704a2899e265c05..bb43f2e62960f6007021a9240a3029c2f36fdf64 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/NonManifoldEdgeError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/NonManifoldEdgeError.java @@ -18,6 +18,7 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; import de.hft.stuttgart.quality.model.properties.EdgeListProperty; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; public class NonManifoldEdgeError extends AbstractSolidError { @@ -29,6 +30,12 @@ public class NonManifoldEdgeError extends AbstractSolidError { public EdgeListProperty getEdges() { return edges; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } public void setEdges(EdgeListProperty edges) { this.edges = asChild(edges); diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/NonManifoldVertexError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/NonManifoldVertexError.java index 36a758c30896d24b95b4a63b21b9ac09db605576..0d8d6fe6cf67d87e61d41bded0a1e1a1156a8d4e 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/NonManifoldVertexError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/NonManifoldVertexError.java @@ -19,6 +19,8 @@ import java.io.Serial; import org.xmlobjects.gml.model.geometry.DirectPosition; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class NonManifoldVertexError extends AbstractSolidError { @Serial @@ -33,5 +35,11 @@ public class NonManifoldVertexError extends AbstractSolidError { public void setVertex(DirectPosition vertex) { this.vertex = asChild(vertex); } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/OrientationRingsSameError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/OrientationRingsSameError.java index 287ad7a836438944b881a85b45c4aea3ec219420..1856639ded66fb9293579178cefe706bef67eb6a 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/OrientationRingsSameError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/OrientationRingsSameError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class OrientationRingsSameError extends AbstractPolygonError { @Serial @@ -31,5 +33,11 @@ public class OrientationRingsSameError extends AbstractPolygonError { public void setLinearRing(String linearRing) { this.linearRing = linearRing; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PlanarDistancePlaneError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PlanarDistancePlaneError.java index ae0b3bb3e87c22e08ffddfeb2bfd909fe860ec60..4e1c85989a4cbc867891e3214f5fe718a94d53c4 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PlanarDistancePlaneError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PlanarDistancePlaneError.java @@ -20,6 +20,8 @@ import java.io.Serial; import org.xmlobjects.gml.model.geometry.DirectPosition; import org.xmlobjects.gml.model.measures.Length; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class PlanarDistancePlaneError extends AbstractPolygonError { @Serial @@ -43,6 +45,12 @@ public class PlanarDistancePlaneError extends AbstractPolygonError { public void setDistance(Length distance) { this.distance = asChild(distance); } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Override public String toString() { diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PlanarNormalsDeviationError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PlanarNormalsDeviationError.java index 7f19339577bf0241d0744a06d7292a0ccc3f8459..c93fdce1dabcdf5bfcdf5a1a25496811362746ed 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PlanarNormalsDeviationError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PlanarNormalsDeviationError.java @@ -19,6 +19,8 @@ import java.io.Serial; import org.xmlobjects.gml.model.measures.Angle; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class PlanarNormalsDeviationError extends AbstractPolygonError { @Serial @@ -33,5 +35,11 @@ public class PlanarNormalsDeviationError extends AbstractPolygonError { public void setDeviation(Angle deviation) { this.deviation = asChild(deviation); } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PolygonWrongOrientationError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PolygonWrongOrientationError.java index 6df9ef17f23af6d9086aa51b5bcbee905024c864..f6ed58d461e8f393b236e4b7ebc08e62e2ac960b 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PolygonWrongOrientationError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PolygonWrongOrientationError.java @@ -18,6 +18,7 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; import de.hft.stuttgart.quality.model.properties.EdgeListProperty; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; public class PolygonWrongOrientationError extends AbstractSolidError { @@ -33,5 +34,11 @@ public class PolygonWrongOrientationError extends AbstractSolidError { public void setEdges(EdgeListProperty edges) { this.edges = edges; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingNotClosedError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingNotClosedError.java index faf44a2d02e331cde2bfd2170c3c862cd2448ae1..7805c3a453144af789d7e5f1c8c17d8bd9897c8f 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingNotClosedError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingNotClosedError.java @@ -17,7 +17,15 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class RingNotClosedError extends AbstractRingError { + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Serial private static final long serialVersionUID = 3327214274004406000L; diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingSelfIntersectionError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingSelfIntersectionError.java index 240d47ff8b6feabfc18d5052a3753fd6bb75246a..3fc1189bf63ae3751d068fe71a95ce1bee0af7f3 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingSelfIntersectionError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingSelfIntersectionError.java @@ -21,6 +21,7 @@ import org.xmlobjects.gml.model.geometry.DirectPosition; import de.hft.stuttgart.quality.model.enums.RingSelfIntType; import de.hft.stuttgart.quality.model.properties.EdgeProperty; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; public class RingSelfIntersectionError extends AbstractRingError { @@ -72,6 +73,12 @@ public class RingSelfIntersectionError extends AbstractRingError { public void setVertex2(DirectPosition vertex2) { this.vertex2 = asChild(vertex2); } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Override public String toString() { diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingTooFewPointsError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingTooFewPointsError.java index c8866b7ee1f4572f27ed6ecf2d0be77325c22276..1f415566f0adabcf0d3705f67ec1ee9971be4798 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingTooFewPointsError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingTooFewPointsError.java @@ -17,7 +17,15 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class RingTooFewPointsError extends AbstractRingError { + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Serial private static final long serialVersionUID = 8057350098649982235L; diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeMissingError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeMissingError.java index 45ddcdb338a30eab39098a9590fcf215ce382c65..3475d425f39abcab8339b3767ac1a90a30496a8d 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeMissingError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeMissingError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class SemanticAttributeMissingError extends AbstractSemanticError { @Serial @@ -49,5 +51,11 @@ public class SemanticAttributeMissingError extends AbstractSemanticError { public void setGeneric(boolean generic) { this.generic = generic; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeWrongValueError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeWrongValueError.java index 2564a49706cf67146ddb3788de5c1a70ef09e5c0..d0d0206296f932bed611631e8bb78a24a24f387f 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeWrongValueError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeWrongValueError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class SemanticAttributeWrongValueError extends AbstractSemanticError { @Serial @@ -49,5 +51,10 @@ public class SemanticAttributeWrongValueError extends AbstractSemanticError { public void setGeneric(boolean generic) { this.generic = generic; } + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidNotClosedError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidNotClosedError.java index 2e6e6e997cfdddbd8c4ce2d11b75e358e6f27a96..4e1c3d9b46ee060f68493ebda72d511c8cb4990a 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidNotClosedError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidNotClosedError.java @@ -18,6 +18,7 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; import de.hft.stuttgart.quality.model.properties.EdgeListProperty; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; public class SolidNotClosedError extends AbstractSolidError { @@ -33,5 +34,11 @@ public class SolidNotClosedError extends AbstractSolidError { public void setEdges(EdgeListProperty edges) { this.edges = asChild(edges); } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidSelfIntersectionError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidSelfIntersectionError.java index 8ab15387e77b811ea64d233aa2ed60b955381afb..799e90a9124630199cfbebb0b64a1f4a5ef2d35f 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidSelfIntersectionError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidSelfIntersectionError.java @@ -17,6 +17,8 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class SolidSelfIntersectionError extends AbstractSolidError { @Serial @@ -40,5 +42,11 @@ public class SolidSelfIntersectionError extends AbstractSolidError { public void setPolygonId2(String polygonId2) { this.polygonId2 = polygonId2; } + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidTooFewPolygonsError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidTooFewPolygonsError.java index f3deedec4a1e665c833831e224c8321773186851..3ee2e16bd12b6bc82db94cdedef5806205edb334 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidTooFewPolygonsError.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidTooFewPolygonsError.java @@ -17,7 +17,15 @@ package de.hft.stuttgart.quality.model.types; import java.io.Serial; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; + public class SolidTooFewPolygonsError extends AbstractSolidError { + + @Override + public void accept(ValidationErrorVisitor visitor) { + super.accept(visitor); + visitor.visit(this); + } @Serial private static final long serialVersionUID = 1987841643971824973L; diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ValidationResult.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ValidationResult.java index 308ddb21a3d4574cdc84c3c090d69ecca98c5d11..e795e5f10eb2ddbc47bca2eac10ba72be91a0c0f 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ValidationResult.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ValidationResult.java @@ -25,6 +25,7 @@ import org.xmlobjects.model.ChildList; import de.hft.stuttgart.quality.model.enums.ResultType; import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty; +import de.hft.stuttgart.quality.model.walker.ValidationErrorVisitor; public class ValidationResult extends GMLObject implements ADEObject { @@ -61,5 +62,14 @@ public class ValidationResult extends GMLObject implements ADEObject { public void setResultType(ResultType resultType) { this.resultType = resultType; } + + public void accept(ValidationErrorVisitor visitor) { + for (AbstractErrorProperty errorProp : errors) { + if (errorProp.getObject() == null) { + continue; + } + errorProp.getObject().accept(visitor); + } + } } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/walker/ValidationErrorVisitor.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/walker/ValidationErrorVisitor.java new file mode 100644 index 0000000000000000000000000000000000000000..e125575a78f1b0977dd5d526c7a69aa7b4ed3d18 --- /dev/null +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/walker/ValidationErrorVisitor.java @@ -0,0 +1,156 @@ +/*- + * Copyright 2022 Hochschule für Technik Stuttgart + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.hft.stuttgart.quality.model.walker; + +import de.hft.stuttgart.quality.model.types.AbstractError; +import de.hft.stuttgart.quality.model.types.AbstractGeometryError; +import de.hft.stuttgart.quality.model.types.AbstractPolygonError; +import de.hft.stuttgart.quality.model.types.AbstractRingError; +import de.hft.stuttgart.quality.model.types.AbstractSemanticError; +import de.hft.stuttgart.quality.model.types.AbstractSolidError; +import de.hft.stuttgart.quality.model.types.AllPolygonsOrientedWrongError; +import de.hft.stuttgart.quality.model.types.ConsecutivePointsSameError; +import de.hft.stuttgart.quality.model.types.HoleOutsideError; +import de.hft.stuttgart.quality.model.types.InnerRingsNestedError; +import de.hft.stuttgart.quality.model.types.InteriorDisconnectedError; +import de.hft.stuttgart.quality.model.types.IntersectingRingsError; +import de.hft.stuttgart.quality.model.types.MultipleComponentsError; +import de.hft.stuttgart.quality.model.types.NonManifoldEdgeError; +import de.hft.stuttgart.quality.model.types.NonManifoldVertexError; +import de.hft.stuttgart.quality.model.types.OrientationRingsSameError; +import de.hft.stuttgart.quality.model.types.PlanarDistancePlaneError; +import de.hft.stuttgart.quality.model.types.PlanarNormalsDeviationError; +import de.hft.stuttgart.quality.model.types.PolygonWrongOrientationError; +import de.hft.stuttgart.quality.model.types.RingNotClosedError; +import de.hft.stuttgart.quality.model.types.RingSelfIntersectionError; +import de.hft.stuttgart.quality.model.types.RingTooFewPointsError; +import de.hft.stuttgart.quality.model.types.SemanticAttributeMissingError; +import de.hft.stuttgart.quality.model.types.SemanticAttributeWrongValueError; +import de.hft.stuttgart.quality.model.types.SolidNotClosedError; +import de.hft.stuttgart.quality.model.types.SolidSelfIntersectionError; +import de.hft.stuttgart.quality.model.types.SolidTooFewPolygonsError; + +public interface ValidationErrorVisitor { + + default void visit(AbstractError err) { + + } + + default void visit(AbstractGeometryError err) { + + } + + default void visit(AbstractPolygonError err) { + + } + + default void visit(AbstractRingError err) { + + } + + default void visit(AbstractSemanticError err) { + + } + + default void visit(AbstractSolidError err) { + + } + + default void visit(AllPolygonsOrientedWrongError err) { + + } + + default void visit(ConsecutivePointsSameError err) { + + } + + default void visit(HoleOutsideError err) { + + } + + default void visit(InnerRingsNestedError err) { + + } + + default void visit(IntersectingRingsError err) { + + } + + default void visit(InteriorDisconnectedError err) { + + } + + default void visit(MultipleComponentsError err) { + + } + + default void visit(NonManifoldEdgeError err) { + + } + + default void visit(NonManifoldVertexError err) { + + } + + default void visit(OrientationRingsSameError err) { + + } + + default void visit(PlanarDistancePlaneError err) { + + } + + default void visit(PlanarNormalsDeviationError err) { + + } + + default void visit(PolygonWrongOrientationError err) { + + } + + default void visit(RingNotClosedError err) { + + } + + default void visit(RingSelfIntersectionError err) { + + } + + default void visit(RingTooFewPointsError err) { + + } + + default void visit(SemanticAttributeMissingError err) { + + } + + default void visit(SemanticAttributeWrongValueError err) { + + } + + default void visit(SolidNotClosedError err) { + + } + + default void visit(SolidSelfIntersectionError err) { + + } + + default void visit(SolidTooFewPolygonsError err) { + + } + +} diff --git a/citygml4j-quality-ade/src/main/resources/qualityAde.xsd b/citygml4j-quality-ade/src/main/resources/qualityAde.xsd index 31d1e643f50ec2f0b28bcdd46e90da009c9629b4..0362e46c4c05e506b0bcfa717c2e7737306e4c26 100644 --- a/citygml4j-quality-ade/src/main/resources/qualityAde.xsd +++ b/citygml4j-quality-ade/src/main/resources/qualityAde.xsd @@ -327,11 +327,11 @@ <complexContent> <extension base="qual:AbstractRingErrorType"> <sequence> - <element name="type" type="string"/> <element minOccurs="0" name="edge1" type="qual:EdgePropertyType"/> <element minOccurs="0" name="edge2" type="qual:EdgePropertyType"/> - <element name="vertex1" type="gml:DirectPositionType"/> + <element minOccurs="0" name="vertex1" type="gml:DirectPositionType"/> <element minOccurs="0" name="vertex2" type="gml:DirectPositionType"/> + <element name="type" type="qual:RingSelfIntersectionTypeType"/> </sequence> </extension> </complexContent> @@ -550,6 +550,14 @@ <enumeration value="NOT_CHECKED"/> </restriction> </simpleType> + <simpleType name="RingSelfIntersectionTypeType"> + <restriction base="string"> + <enumeration value="EDGE_INTERSECTION"/> + <enumeration value="VERTEX_TOUCHES_EDGE"/> + <enumeration value="DUPLICATE_POINT"/> + <enumeration value="DEGENERATED_RING"/> + </restriction> + </simpleType> <element name="SE_ATTRIBUTE_MISSING" substitutionGroup="qual:AbstractSemanticError" type="qual:SE_ATTRIBUTE_MISSINGType"/> <complexType name="SE_ATTRIBUTE_MISSINGType"> <complexContent> diff --git a/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java b/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java index aaae63065771ebf1ab7ea576c11f3479a09d96a4..ac3fdfd012179a3e71badebb450a8a7d61a580ab 100644 --- a/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java +++ b/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java @@ -15,7 +15,6 @@ */ package de.hft.stuttgart.quality; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.ByteArrayInputStream; @@ -23,8 +22,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.nio.file.Path; -import java.nio.file.Paths; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; @@ -43,17 +40,12 @@ import org.citygml4j.core.ade.ADERegistry; import org.citygml4j.core.model.CityGMLVersion; import org.citygml4j.core.model.building.Building; import org.citygml4j.core.model.core.AbstractCityObjectProperty; -import org.citygml4j.core.model.core.AbstractFeature; import org.citygml4j.core.model.core.AbstractFeatureProperty; import org.citygml4j.core.model.core.CityModel; import org.citygml4j.core.util.CityGMLConstants; import org.citygml4j.xml.CityGMLContext; import org.citygml4j.xml.CityGMLContextException; import org.citygml4j.xml.module.citygml.CoreModule; -import org.citygml4j.xml.reader.ChunkOptions; -import org.citygml4j.xml.reader.CityGMLInputFactory; -import org.citygml4j.xml.reader.CityGMLReadException; -import org.citygml4j.xml.reader.CityGMLReader; import org.citygml4j.xml.schema.CityGMLSchemaHandler; import org.citygml4j.xml.writer.CityGMLOutputFactory; import org.citygml4j.xml.writer.CityGMLWriteException; @@ -141,26 +133,6 @@ class QualityAdeTests { ADERegistry.getInstance().loadADE(new QualityADEContext()); } - @Test - void testReadingModel() throws CityGMLContextException, CityGMLReadException { - CityGMLContext context = CityGMLContext.newInstance(); - - CityGMLInputFactory in = context.createCityGMLInputFactory() - .withChunking(ChunkOptions.chunkByProperties(chunkProperties).skipCityModel(false)); - - Path file = Paths.get("src/test/resources/SimpleSolid_Error_QualityADE.gml"); - - try (CityGMLReader reader = in.createCityGMLReader(file)) { - while (reader.hasNext()) { - AbstractFeature feature = reader.next(); - if (feature instanceof Building) { - List<CityObjectProperties> adeProperties = feature.getADEProperties(CityObjectProperties.class); - assertEquals(1, adeProperties.size()); - } - } - } - } - @Test void testAllPolygonsOrientedWrong() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException { @@ -399,7 +371,7 @@ class QualityAdeTests { edge.setTo(new DirectPosition(5, 6, 7)); err.setEdge1(new EdgeProperty(edge)); err.setEdge2(new EdgeProperty(edge)); - err.setType(RingSelfIntType.EDGE_INTERSECTS_EDGE); + err.setType(RingSelfIntType.EDGE_INTERSECTION); err.setVertex1(new DirectPosition(1, 2, 3)); res.getErrors().add(new AbstractErrorProperty(err)); diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml index 26300b9cd97dc2039f1c04109b4eeb5e685e2d92..c62b3696ce8c77b6cc5530708a763a3745b0ee71 100644 --- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml +++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml @@ -12,6 +12,14 @@ referenziert CityGML 2.0 linear ring _Simple_BD.1_PG.6_LR.1 beinhaltet zwei aufeinander folgende Punkte, die identisch sind. 10.5.2017 Author: V. Coors, HFT Stuttgart Lizenz: --> + <gml:name>Building-Unit-House</gml:name> + <gml:boundedBy> + <gml:Envelope srsDimension="3" srsName="urn:adv:crs:ETRS89_UTM32*DE_DHHN92_NH"> + <gml:lowerCorner srsDimension="3">457841 5439082 111 </gml:lowerCorner> + <gml:upperCorner srsDimension="3">457854 5439093 121 </gml:upperCorner> + </gml:Envelope> + </gml:boundedBy> + <core:cityObjectMember> <bldg:Building gml:id="_Simple_BD.1"> <qual:validationResult> @@ -24,7 +32,7 @@ <qual:vertex2>11.5 10.0 4.5</qual:vertex2> </qual:GE_R_CONSECUTIVE_POINTS_SAME> </qual:error> - <qual:resultType>OK</qual:resultType> + <qual:resultType>ERROR</qual:resultType> </qual:ValidationResult> </qual:validationResult> <bldg:lod2Solid>