Commit f95ca9ff authored by Matthias Betz's avatar Matthias Betz
Browse files

fixed error adapter

fixed tests
added service meta inf
fixed various other issues
No related merge requests found
Showing with 265 additions and 178 deletions
+265 -178
......@@ -33,7 +33,7 @@ public class CityObjectPropertiesAdapter implements ObjectBuilder<CityObjectProp
return;
}
switch (name.getLocalPart()) {
case "validationResult" -> object.setValidationResult(reader.getObjectUsingBuilder(ValidationResultPropertyAdapter.class));
case "ValidationResult" -> object.setValidationResult(reader.getObjectUsingBuilder(ValidationResultPropertyAdapter.class));
default -> throw new IllegalStateException("Cannot handle name " + name + " when building CityObjectProperties element");
}
}
......
package de.hft.stuttgart.quality.adapter.types;
import de.hft.stuttgart.quality.model.enums.ErrorId;
import de.hft.stuttgart.quality.model.types.Error;
import javax.xml.namespace.QName;
import de.hft.stuttgart.quality.QualityADEModule;
import org.xmlobjects.annotation.XMLElement;
import org.xmlobjects.builder.ObjectBuildException;
import org.xmlobjects.builder.ObjectBuilder;
import org.xmlobjects.serializer.ObjectSerializeException;
......@@ -16,8 +15,11 @@ import org.xmlobjects.xml.Attributes;
import org.xmlobjects.xml.Element;
import org.xmlobjects.xml.Namespaces;
import javax.xml.namespace.QName;
import de.hft.stuttgart.quality.QualityADEModule;
import de.hft.stuttgart.quality.model.enums.ErrorId;
import de.hft.stuttgart.quality.model.types.Error;
@XMLElement(name = "Error", namespaceURI = QualityADEModule.NAMESPACE_URI)
public class ErrorAdapter implements ObjectBuilder<Error>, ObjectSerializer<Error> {
@Override
......@@ -37,6 +39,11 @@ public class ErrorAdapter implements ObjectBuilder<Error>, ObjectSerializer<Erro
default -> throw new IllegalStateException("Cannot handle name " + name + " when building Error element");
}
}
@Override
public Element createElement(Error object, Namespaces namespaces) throws ObjectSerializeException {
return Element.of(QualityADEModule.NAMESPACE_URI, "Error");
}
@Override
public void writeChildElements(Error object, Namespaces namespaces, XMLWriter writer)
......
......@@ -16,7 +16,9 @@ import org.xmlobjects.xml.Element;
import org.xmlobjects.xml.Namespaces;
import de.hft.stuttgart.quality.QualityADEModule;
import de.hft.stuttgart.quality.adapter.properties.ErrorPropertyAdapter;
import de.hft.stuttgart.quality.adapter.properties.FeatureStatisticsPropertyAdapter;
import de.hft.stuttgart.quality.model.properties.ErrorProperty;
import de.hft.stuttgart.quality.model.types.Statistics;
@XMLElement(name = "Statistics", namespaceURI = QualityADEModule.NAMESPACE_URI)
......@@ -46,10 +48,11 @@ public class StatisticsAdapter implements ObjectBuilder<Statistics>, ObjectSeria
.setNumErrorWaterObjects(reader.getObjectUsingBuilder(FeatureStatisticsPropertyAdapter.class));
case "numErrorTransportation" -> object
.setNumErrorTransportation(reader.getObjectUsingBuilder(FeatureStatisticsPropertyAdapter.class));
case "error" -> object.getErrors().add(reader.getObjectUsingBuilder(ErrorPropertyAdapter.class));
default -> throw new IllegalStateException("Cannot handle name " + name + " when building Statistics element");
}
}
@Override
public Element createElement(Statistics object, Namespaces namespaces) throws ObjectSerializeException {
return Element.of(QualityADEModule.NAMESPACE_URI, "Statistics");
......@@ -82,5 +85,9 @@ public class StatisticsAdapter implements ObjectBuilder<Statistics>, ObjectSeria
writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "numErrorTransportation"),
object.getNumErrorTransportation(), FeatureStatisticsPropertyAdapter.class, namespaces);
}
for (ErrorProperty errorProp : object.getErrors()) {
writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "error"), errorProp,
ErrorPropertyAdapter.class, namespaces);
}
}
}
......@@ -27,6 +27,15 @@ public class FeatureStatistics extends GMLObject implements ADEObject {
private int numChecked;
private int numErrors;
public FeatureStatistics() {
// constructor for serialization
}
public FeatureStatistics(int numChecked, int numErrors) {
this.numChecked = numChecked;
this.numErrors = numErrors;
}
public int getNumChecked() {
return numChecked;
......
de.hft.stuttgart.quality.QualityADEContext
\ No newline at end of file
......@@ -15,6 +15,7 @@
*/
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;
......@@ -22,10 +23,15 @@ 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;
import java.util.Locale;
import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
......@@ -37,11 +43,17 @@ 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;
......@@ -57,6 +69,7 @@ import org.xmlobjects.gml.model.measures.Angle;
import org.xmlobjects.gml.model.measures.Length;
import org.xmlobjects.schema.SchemaHandlerException;
import de.hft.stuttgart.quality.model.enums.ErrorId;
import de.hft.stuttgart.quality.model.enums.RequirementId;
import de.hft.stuttgart.quality.model.enums.ResultType;
import de.hft.stuttgart.quality.model.enums.RingSelfIntType;
......@@ -65,6 +78,7 @@ import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
import de.hft.stuttgart.quality.model.properties.CheckingProperty;
import de.hft.stuttgart.quality.model.properties.EdgeListProperty;
import de.hft.stuttgart.quality.model.properties.EdgeProperty;
import de.hft.stuttgart.quality.model.properties.ErrorProperty;
import de.hft.stuttgart.quality.model.properties.FeatureStatisticsProperty;
import de.hft.stuttgart.quality.model.properties.FilterProperty;
import de.hft.stuttgart.quality.model.properties.GlobalParametersProperty;
......@@ -111,104 +125,139 @@ import de.hft.stuttgart.quality.model.types.ValidationPlan;
import de.hft.stuttgart.quality.model.types.ValidationResult;
class QualityAdeTests {
private static final String CITY_OBJECT_MEMBER = "cityObjectMember";
private static List<QName> chunkProperties = new ArrayList<>();
static {
chunkProperties.add(new QName(CityGMLConstants.CITYGML_1_0_CORE_NAMESPACE, CITY_OBJECT_MEMBER));
chunkProperties.add(new QName(CityGMLConstants.CITYGML_2_0_CORE_NAMESPACE, CITY_OBJECT_MEMBER));
chunkProperties.add(new QName(CityGMLConstants.CITYGML_3_0_CORE_NAMESPACE, CITY_OBJECT_MEMBER));
}
@BeforeAll
static void setUsLocale() throws ADEException {
Locale.setDefault(Locale.US);
ADERegistry.getInstance().loadADE(new QualityADEContext());
}
@Test
void testAllPolygonsOrientedWrong() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
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 {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
AllPolygonsOrientedWrongError err = new AllPolygonsOrientedWrongError();
err.setGeometryId("geomId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testConsecutivePointsSameError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testConsecutivePointsSameError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
ConsecutivePointsSameError err = new ConsecutivePointsSameError();
err.setLinearRingId("ringId");
err.setVertex1(new DirectPosition(1, 2, 3));
err.setVertex2(new DirectPosition(5, 6, 7));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testHoleOutsideError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testHoleOutsideError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException,
IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
HoleOutsideError err = new HoleOutsideError();
err.setLinearRingId("ringId");
err.setPolygonId("polyId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testInnerRingsNestedError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testInnerRingsNestedError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException,
IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
InnerRingsNestedError err = new InnerRingsNestedError();
err.setLinearRingId1("ringId1");
err.setLinearRingId2("ringId2");
err.setPolygonId("polyId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testInteriorDisconnectedError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testInteriorDisconnectedError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
InteriorDisconnectedError err = new InteriorDisconnectedError();
err.setPolygonId("polyId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testIntersectingRingsError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testIntersectingRingsError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException,
IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
IntersectingRingsError err = new IntersectingRingsError();
err.setLinearRingId1("ringId1");
err.setLinearRingId2("ringId2");
err.setPolygonId("polyId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testMultipleComponentsError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testMultipleComponentsError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
MultipleComponentsError err = new MultipleComponentsError();
err.setGeometryId("geomId");
PolygonIdList polygons = new PolygonIdList();
......@@ -216,16 +265,17 @@ class QualityAdeTests {
polygons.getPolygonIds().add("test2");
err.getComponents().add(new PolygonIdListProperty(polygons));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testNonManifoldEdgeError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testNonManifoldEdgeError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException,
IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
NonManifoldEdgeError err = new NonManifoldEdgeError();
err.setGeometryId("geomId");
EdgeList edges = new EdgeList();
......@@ -234,75 +284,80 @@ class QualityAdeTests {
edge.setTo(new DirectPosition(5, 6, 7));
edges.getEdges().add(new EdgeProperty(edge));
err.setEdges(new EdgeListProperty(edges));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testNonManifoldVertexError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testNonManifoldVertexError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException,
IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
NonManifoldVertexError err = new NonManifoldVertexError();
err.setGeometryId("geomId");
err.setVertex(new DirectPosition(1, 2, 3));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testOrientationRingsSameError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testOrientationRingsSameError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
OrientationRingsSameError err = new OrientationRingsSameError();
err.setLinearRing("ring1");
err.setPolygonId("polyId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testPlanarDistancePlaneError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testPlanarDistancePlaneError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
PlanarDistancePlaneError err = new PlanarDistancePlaneError();
err.setPolygonId("polyId");
err.setDistance(new Length(5d, "m"));
err.setVertex(new DirectPosition(1, 2, 3));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testPlanarNormalsDeviationError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testPlanarNormalsDeviationError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
PlanarNormalsDeviationError err = new PlanarNormalsDeviationError();
err.setPolygonId("polyId");
err.setDeviation(new Angle(5d, "deg"));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testPolygonWrongOrientationError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testPolygonWrongOrientationError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
PolygonWrongOrientationError err = new PolygonWrongOrientationError();
err.setGeometryId("geomId");
EdgeList edges = new EdgeList();
......@@ -312,29 +367,31 @@ class QualityAdeTests {
edges.getEdges().add(new EdgeProperty(edge));
err.setEdges(new EdgeListProperty(edges));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testRingNotClosedError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testRingNotClosedError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException,
IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
RingNotClosedError err = new RingNotClosedError();
err.setLinearRingId("ringId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testRingSelfIntersectionError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testRingSelfIntersectionError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
RingSelfIntersectionError err = new RingSelfIntersectionError();
err.setLinearRingId("ringId");
Edge edge = new Edge();
......@@ -345,59 +402,63 @@ class QualityAdeTests {
err.setType(RingSelfIntType.EDGE_INTERSECTS_EDGE);
err.setVertex1(new DirectPosition(1, 2, 3));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testRingTooFewPointsError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testRingTooFewPointsError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException,
IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
RingTooFewPointsError err = new RingTooFewPointsError();
err.setLinearRingId("ringId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testSemanticAttributeMissingError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testSemanticAttributeMissingError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
SemanticAttributeMissingError err = new SemanticAttributeMissingError();
err.setAttributeName("attribute");
err.setChildId("child");
err.setGeneric(true);
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testSemanticAttributeWrongValueError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testSemanticAttributeWrongValueError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
SemanticAttributeWrongValueError err = new SemanticAttributeWrongValueError();
err.setAttributeName("attribute");
err.setChildId("child");
err.setGeneric(true);
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testSolidNotClosedError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testSolidNotClosedError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException,
IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
SolidNotClosedError err = new SolidNotClosedError();
err.setGeometryId("geomId");
EdgeList edges = new EdgeList();
......@@ -407,42 +468,43 @@ class QualityAdeTests {
edges.getEdges().add(new EdgeProperty(edge));
err.setEdges(new EdgeListProperty(edges));
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testSolidSelfIntersectionError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testSolidSelfIntersectionError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
SolidSelfIntersectionError err = new SolidSelfIntersectionError();
err.setGeometryId("geomId");
err.setPolygonId1("poly1");
err.setPolygonId2("poly2");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
@Test
void testSolidTooFewPolygonsError() throws ADEException, CityGMLContextException, CityGMLWriteException, SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
void testSolidTooFewPolygonsError() throws ADEException, CityGMLContextException, CityGMLWriteException,
SAXException, IOException, SchemaHandlerException {
CityModel model = new CityModel();
ValidationResult res = fillCityModel(model);
SolidTooFewPolygonsError err = new SolidTooFewPolygonsError();
err.setGeometryId("geomId");
res.getErrors().add(new AbstractErrorProperty(err));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
byte[] buf = writeModel(model);
assertTrue(validate(new ByteArrayInputStream(buf)));
}
private boolean validate(InputStream stream) throws SAXException, IOException, CityGMLContextException, SchemaHandlerException {
private boolean validate(InputStream stream)
throws SAXException, IOException, CityGMLContextException, SchemaHandlerException {
CityGMLContext context = CityGMLContext.newInstance();
......@@ -463,7 +525,7 @@ class QualityAdeTests {
+ exception.getMessage();
System.out.println(message);
foundErrors[0] = true;
}
}
@Override
public void warning(SAXParseException exception) {
......@@ -476,26 +538,23 @@ class QualityAdeTests {
}
});
validator.validate(new StreamSource(stream));
return !foundErrors[0];
}
private byte[] writeModel(CityModel model) throws ADEException, CityGMLContextException, CityGMLWriteException {
CityGMLContext context = CityGMLContext.newInstance();
CityGMLVersion version = CityGMLVersion.v2_0;
CityGMLOutputFactory out = context.createCityGMLOutputFactory(version);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
try (CityGMLWriter writer = out.createCityGMLWriter(outStream, StandardCharsets.UTF_8.name())) {
writer.withIndent(" ")
.withSchemaLocation(QualityADEModule.NAMESPACE_URI, getClass().getResource("/qualityAde.xsd").toString())
.withDefaultPrefixes()
.withDefaultNamespace(CoreModule.of(version).getNamespaceURI())
.write(model);
}
return outStream.toByteArray();
CityGMLOutputFactory out = context.createCityGMLOutputFactory(version);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
try (CityGMLWriter writer = out.createCityGMLWriter(outStream, StandardCharsets.UTF_8.name())) {
writer.withIndent(" ")
.withSchemaLocation(QualityADEModule.NAMESPACE_URI,
getClass().getResource("/qualityAde.xsd").toString())
.withDefaultPrefixes().withDefaultNamespace(CoreModule.of(version).getNamespaceURI()).write(model);
}
return outStream.toByteArray();
}
private ValidationResult fillCityModel(CityModel model) {
......@@ -505,7 +564,7 @@ class QualityAdeTests {
v.setValidationSoftware("testSoftware");
v.setValidationDate(ZonedDateTime.now());
ValidationPlan plan = new ValidationPlan();
Statistics stats = new Statistics();
FeatureStatistics fStats = new FeatureStatistics();
fStats.setNumChecked(5);
......@@ -513,6 +572,11 @@ class QualityAdeTests {
stats.setNumErrorBridgeObjects(new FeatureStatisticsProperty(fStats));
v.setStatistics(new StatisticsProperty(stats));
de.hft.stuttgart.quality.model.types.Error err = new de.hft.stuttgart.quality.model.types.Error();
err.setName(ErrorId.GE_P_HOLE_OUTSIDE);
err.setOccurrences(1);
stats.getErrors().add(new ErrorProperty(err));
Requirement req = new Requirement();
req.setEnabled(true);
req.setRequirementType(RequirementId.R_GE_P_HOLE_OUTSIDE);
......@@ -520,7 +584,7 @@ class QualityAdeTests {
Checking checking = new Checking();
checking.setFeatureType(TopLevelFeatureType.BRIDGE);
Filter filter = new Filter();
filter.getChecking().add(new CheckingProperty(checking));
plan.setFilter(new FilterProperty(filter));
......@@ -534,12 +598,11 @@ class QualityAdeTests {
plan.setGlobalParameters(new GlobalParametersProperty(globalParams));
v.setValidationPlan(new ValidationPlanProperty(plan));
Building b = new Building();
b.setId("testId");
model.getCityObjectMembers().add(new AbstractCityObjectProperty(b));
CityObjectProperties props = new CityObjectProperties();
b.addADEProperty(props);
ValidationResult res = new ValidationResult();
......
Supports Markdown
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