Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
QualityADE
Commits
3188e3b4
Commit
3188e3b4
authored
Jun 07, 2022
by
Matthias Betz
Browse files
added ring self intersection enum to xsd
added visitor errors
parent
f95ca9ff
Changes
34
Hide whitespace changes
Inline
Side-by-side
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/PolygonWrongOrientationError.java
View file @
3188e3b4
...
...
@@ -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
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingNotClosedError.java
View file @
3188e3b4
...
...
@@ -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
;
...
...
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingSelfIntersectionError.java
View file @
3188e3b4
...
...
@@ -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
()
{
...
...
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/RingTooFewPointsError.java
View file @
3188e3b4
...
...
@@ -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
;
...
...
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeMissingError.java
View file @
3188e3b4
...
...
@@ -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
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SemanticAttributeWrongValueError.java
View file @
3188e3b4
...
...
@@ -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
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidNotClosedError.java
View file @
3188e3b4
...
...
@@ -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
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidSelfIntersectionError.java
View file @
3188e3b4
...
...
@@ -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
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/SolidTooFewPolygonsError.java
View file @
3188e3b4
...
...
@@ -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
;
...
...
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/types/ValidationResult.java
View file @
3188e3b4
...
...
@@ -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
);
}
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/walker/ValidationErrorVisitor.java
0 → 100644
View file @
3188e3b4
/*-
* 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
)
{
}
}
citygml4j-quality-ade/src/main/resources/qualityAde.xsd
View file @
3188e3b4
...
...
@@ -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>
...
...
citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java
View file @
3188e3b4
...
...
@@ -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_INTERSECT
S_EDGE
);
err
.
setType
(
RingSelfIntType
.
EDGE_INTERSECT
ION
);
err
.
setVertex1
(
new
DirectPosition
(
1
,
2
,
3
));
res
.
getErrors
().
add
(
new
AbstractErrorProperty
(
err
));
...
...
citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml
View file @
3188e3b4
...
...
@@ -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>
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment