Commit 3188e3b4 authored by Matthias Betz's avatar Matthias Betz
Browse files

added ring self intersection enum to xsd

added visitor errors
parent f95ca9ff
......@@ -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);
}
}
......@@ -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;
......
......@@ -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() {
......
......@@ -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;
......
......@@ -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);
}
}
......@@ -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);
}
}
......@@ -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);
}
}
......@@ -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);
}
}
......@@ -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;
......
......@@ -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);
}
}
}
/*-
* 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) {
}
}
......@@ -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>
......
......@@ -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));
......
......@@ -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>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment