Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
QualityADE
Commits
98b386d2
Commit
98b386d2
authored
Nov 21, 2021
by
Claus Nagel
Browse files
updated citygml4j module to support QualityADE version 0.1.4
parent
6cf1abce
Changes
209
Hide whitespace changes
Inline
Side-by-side
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticAttributeMissing.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
public
class
SemanticAttributeMissing
extends
AbstractSemanticError
{
private
String
attributeName
;
private
String
childId
;
private
boolean
generic
;
public
String
getAttributeName
()
{
return
attributeName
;
}
public
void
setAttributeName
(
String
attributeName
)
{
this
.
attributeName
=
attributeName
;
}
public
String
getChildId
()
{
return
childId
;
}
public
void
setChildId
(
String
childId
)
{
this
.
childId
=
childId
;
}
public
boolean
isGeneric
()
{
return
generic
;
}
public
void
setGeneric
(
boolean
generic
)
{
this
.
generic
=
generic
;
}
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
SE_ATTRIBUTE_MISSING
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SemanticAttributeMissing
copy
=
target
==
null
?
new
SemanticAttributeMissing
()
:
(
SemanticAttributeMissing
)
target
;
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SemanticAttributeMissing
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticAttributeWrongValue.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
public
class
SemanticAttributeWrongValue
extends
AbstractSemanticError
{
private
String
attributeName
;
private
String
childId
;
private
boolean
generic
;
public
String
getAttributeName
()
{
return
attributeName
;
}
public
void
setAttributeName
(
String
attributeName
)
{
this
.
attributeName
=
attributeName
;
}
public
String
getChildId
()
{
return
childId
;
}
public
void
setChildId
(
String
childId
)
{
this
.
childId
=
childId
;
}
public
boolean
isGeneric
()
{
return
generic
;
}
public
void
setGeneric
(
boolean
generic
)
{
this
.
generic
=
generic
;
}
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
SE_ATTRIBUTE_WRONG_VALUE
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SemanticAttributeWrongValue
copy
=
target
==
null
?
new
SemanticAttributeWrongValue
()
:
(
SemanticAttributeWrongValue
)
target
;
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SemanticAttributeWrongValue
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/
MultipleConnectedComponents
.java
→
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/
SolidAllPolygonsWrongOrientation
.java
View file @
98b386d2
/*
-
* Copyright 202
0
Hochschule für Technik Stuttgart
/*
* Copyright 202
1
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.
...
...
@@ -13,35 +13,29 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
de.hft.stuttgart.quality.model
;
import
java.util.ArrayList
;
import
java.util.List
;
package
de.hft.stuttgart.quality.model
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
de.hft.stuttgart.quality.model.jaxb.Component
;
public
class
SolidAllPolygonsWrongOrientation
extends
AbstractSolidError
{
public
class
MultipleConnectedComponents
extends
SolidError
{
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
GE_S_ALL_POLYGONS_WRONG_ORIENTATION
;
}
private
static
final
long
serialVersionUID
=
-
4199420154182053060L
;
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SolidAllPolygonsWrongOrientation
copy
=
target
==
null
?
new
SolidAllPolygonsWrongOrientation
()
:
(
SolidAllPolygonsWrongOrientation
)
target
;
private
List
<
Component
>
components
;
public
boolean
isSetComponents
()
{
return
components
!=
null
&&
!
components
.
isEmpty
();
}
public
List
<
Component
>
getComponents
()
{
if
(
components
==
null
)
{
components
=
new
ArrayList
<>();
}
return
components
;
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
MultipleConnectedComponents
(),
copyBuilder
);
}
return
super
.
copyTo
(
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidAllPolygonsWrongOrientation
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidError.java
deleted
100644 → 0
View file @
6cf1abce
/*-
* Copyright 2020 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
;
public
abstract
class
SolidError
extends
ValidationError
{
private
static
final
long
serialVersionUID
=
6430138970493794998L
;
private
String
geometryId
;
public
void
setGeometryId
(
String
geometryId
)
{
this
.
geometryId
=
geometryId
;
}
public
String
getGeometryId
()
{
return
geometryId
;
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidMultipleConnectedComponents.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.common.base.ModelObjects
;
import
org.citygml4j.model.common.child.ChildList
;
import
java.util.List
;
public
class
SolidMultipleConnectedComponents
extends
AbstractSolidError
{
private
List
<
Component
>
components
;
public
boolean
isSetComponents
()
{
return
components
!=
null
&&
!
components
.
isEmpty
();
}
public
List
<
Component
>
getComponents
()
{
if
(
components
==
null
)
{
components
=
new
ChildList
<>(
this
);
}
return
components
;
}
public
void
setComponents
(
List
<
Component
>
components
)
{
this
.
components
=
ModelObjects
.
setParent
(
components
,
this
);
}
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
GE_S_MULTIPLE_CONNECTED_COMPONENTS
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SolidMultipleConnectedComponents
copy
=
target
==
null
?
new
SolidMultipleConnectedComponents
()
:
(
SolidMultipleConnectedComponents
)
target
;
super
.
copyTo
(
copy
,
copyBuilder
);
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidMultipleConnectedComponents
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNonManifoldEdge.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.common.base.ModelObjects
;
import
org.citygml4j.model.common.child.ChildList
;
import
java.util.List
;
public
class
SolidNonManifoldEdge
extends
AbstractSolidError
{
private
List
<
Edge
>
edges
;
public
boolean
isSetEdges
()
{
return
edges
!=
null
&&
!
edges
.
isEmpty
();
}
public
List
<
Edge
>
getEdges
()
{
if
(
edges
==
null
)
{
edges
=
new
ChildList
<>(
this
);
}
return
edges
;
}
public
void
setEdges
(
List
<
Edge
>
edges
)
{
this
.
edges
=
ModelObjects
.
setParent
(
edges
,
this
);
}
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
GE_S_NON_MANIFOLD_EDGE
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SolidNonManifoldEdge
copy
=
target
==
null
?
new
SolidNonManifoldEdge
()
:
(
SolidNonManifoldEdge
)
target
;
super
.
copyTo
(
copy
,
copyBuilder
);
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidNonManifoldEdge
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/
NonPlanarDistancePlane
.java
→
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/
SolidNonManifoldVertex
.java
View file @
98b386d2
/*
-
* Copyright 202
0
Hochschule für Technik Stuttgart
/*
* Copyright 202
1
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.
...
...
@@ -13,43 +13,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
de.hft.stuttgart.quality.model
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.common.base.ModelObjects
;
import
org.citygml4j.model.gml.geometry.primitives.DirectPosition
;
import
org.citygml4j.model.gml.measures.Length
;
public
class
NonPlanarDistancePlane
extends
PolygonError
{
private
static
final
long
serialVersionUID
=
-
3428574131554438219L
;
private
DirectPosition
vertex
;
private
Length
distance
;
public
class
SolidNonManifoldVertex
extends
AbstractSolidError
{
private
DirectPosition
vertex
;
public
void
setVertex
(
DirectPosition
v
ertex
)
{
this
.
vertex
=
vertex
;
}
public
DirectPosition
getV
ertex
(
)
{
return
vertex
;
}
public
void
set
Distance
(
Length
distance
)
{
this
.
distance
=
distance
;
}
public
void
set
Vertex
(
DirectPosition
vertex
)
{
this
.
vertex
=
ModelObjects
.
setParent
(
vertex
,
this
)
;
}
public
DirectPosition
getVertex
()
{
return
vertex
;
}
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
GE_S_NON_MANIFOLD_VERTEX
;
}
public
Length
getDistance
()
{
return
distance
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SolidNonManifoldVertex
copy
=
target
==
null
?
new
SolidNonManifoldVertex
()
:
(
SolidNonManifoldVertex
)
target
;
@Override
public
String
toString
()
{
return
"NonPlanarDistancePlane [polygonId="
+
getPolygonId
()
+
", vertex="
+
vertex
+
", distance="
+
distance
+
"]"
;
}
super
.
copyTo
(
copy
,
copyBuilder
);
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
NonPlanarDistancePlane
(),
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidNonManifoldVertex
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNotClosed.java
View file @
98b386d2
/*
-
* Copyright 202
0
Hochschule für Technik Stuttgart
/*
* Copyright 202
1
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.
...
...
@@ -13,32 +13,52 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
de.hft.stuttgart.quality.model
;
import
java.util.ArrayList
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.common.base.ModelObjects
;
import
org.citygml4j.model.common.child.ChildList
;
import
java.util.List
;
import
org.citygml4j.builder.copy.CopyBuilder
;
public
class
SolidNotClosed
extends
AbstractSolidError
{
private
List
<
Edge
>
edges
;
public
boolean
isSetEdges
()
{
return
edges
!=
null
&&
!
edges
.
isEmpty
();
}
public
List
<
Edge
>
getEdges
()
{
if
(
edges
==
null
)
{
edges
=
new
ChildList
<>(
this
);
}
public
class
SolidNotClosed
extends
SolidError
{
return
edges
;
}
private
static
final
long
serialVersionUID
=
4609395125395073697L
;
public
void
setEdges
(
List
<
Edge
>
edges
)
{
this
.
edges
=
ModelObjects
.
setParent
(
edges
,
this
);
}
private
List
<
Edge
>
edges
;
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
GE_S_NOT_CLOSED
;
}
public
boolean
isSetEdges
()
{
return
edges
!=
null
&&
!
edges
.
isEmpty
();
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SolidNotClosed
copy
=
target
==
null
?
new
SolidNotClosed
()
:
(
SolidNotClosed
)
target
;
public
List
<
Edge
>
getEdges
()
{
if
(
edges
==
null
)
{
edges
=
new
ArrayList
<>();
}
return
edges
;
}
super
.
copyTo
(
copy
,
copyBuilder
);
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidNotClosed
(),
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidNotClosed
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidPolygonWrongOrientation.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.common.base.ModelObjects
;
import
org.citygml4j.model.common.child.ChildList
;
import
java.util.List
;
public
class
SolidPolygonWrongOrientation
extends
AbstractSolidError
{
private
List
<
Edge
>
edges
;
public
boolean
isSetEdges
()
{
return
edges
!=
null
&&
!
edges
.
isEmpty
();
}
public
List
<
Edge
>
getEdges
()
{
if
(
edges
==
null
)
{
edges
=
new
ChildList
<>(
this
);
}
return
edges
;
}
public
void
setEdges
(
List
<
Edge
>
edges
)
{
this
.
edges
=
ModelObjects
.
setParent
(
edges
,
this
);
}
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
GE_S_POLYGON_WRONG_ORIENTATION
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SolidPolygonWrongOrientation
copy
=
target
==
null
?
new
SolidPolygonWrongOrientation
()
:
(
SolidPolygonWrongOrientation
)
target
;
super
.
copyTo
(
copy
,
copyBuilder
);
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidPolygonWrongOrientation
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidSelfIntersection.java
View file @
98b386d2
/*
-
* Copyright 202
0
Hochschule für Technik Stuttgart
/*
* Copyright 202
1
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.
...
...
@@ -13,41 +13,49 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
de.hft.stuttgart.quality.model
;
import
org.citygml4j.builder.copy.CopyBuilder
;
public
class
SolidSelfIntersection
extends
SolidError
{
private
static
final
long
serialVersionUID
=
4086097021438848040L
;
private
String
polygonId1
;
private
String
polygonId2
;
public
String
getPolygonId1
()
{
return
polygonId1
;
}
public
void
setPolygonId1
(
String
polygonId1
)
{
this
.
polygonId1
=
polygonId1
;
}
public
String
getPolygonId2
()
{
return
polygonId2
;
}
public
void
setPolygonId2
(
String
polygonId2
)
{
this
.
polygonId2
=
polygonId2
;
}
@Override
public
String
toString
()
{
return
"SolidSelfIntersection [geometryId="
+
getGeometryId
()
+
", polygonId1="
+
polygonId1
+
", polygonId2="
+
polygonId2
+
"]"
;
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidSelfIntersection
(),
copyBuilder
);
}
import
org.citygml4j.builder.copy.ObjectCopier
;
public
class
SolidSelfIntersection
extends
AbstractSolidError
{
private
String
polygonId1
;
private
String
polygonId2
;
public
String
getPolygonId1
()
{
return
polygonId1
;
}
public
void
setPolygonId1
(
String
polygonId1
)
{
this
.
polygonId1
=
polygonId1
;
}
public
String
getPolygonId2
()
{
return
polygonId2
;
}
public
void
setPolygonId2
(
String
polygonId2
)
{
this
.
polygonId2
=
polygonId2
;
}
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
GE_S_SELF_INTERSECTION
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SolidSelfIntersection
copy
=
target
==
null
?
new
SolidSelfIntersection
()
:
(
SolidSelfIntersection
)
target
;
super
.
copyTo
(
copy
,
copyBuilder
);
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidSelfIntersection
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/
OrientationRingsSame
.java
→
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/
SolidTooFewPolygons
.java
View file @
98b386d2
/*
-
* Copyright 202
0
Hochschule für Technik Stuttgart
/*
* Copyright 202
1
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.
...
...
@@ -13,31 +13,29 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
de.hft.stuttgart.quality.model
;
import
org.citygml4j.builder.copy.CopyBuilder
;
public
class
OrientationRingsSame
extends
PolygonError
{
private
static
final
long
serialVersionUID
=
-
6983324580253488854L
;
private
String
linearRingId
;
public
class
SolidTooFewPolygons
extends
AbstractSolidError
{
public
void
setLinearRingId
(
String
linearRingId
)
{
this
.
linearRingId
=
linearRingId
;
}
@Override
public
ErrorType
getErrorType
()
{
return
ErrorType
.
GE_S_TOO_FEW_POLYGONS
;
}
public
String
getLinearRingId
()
{
return
linearRingId
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
SolidTooFewPolygons
copy
=
target
==
null
?
new
SolidTooFewPolygons
()
:
(
SolidTooFewPolygons
)
target
;
@Override
public
String
toString
()
{
return
"OrientationRingsSame [polygonId="
+
getPolygonId
()
+
", linearRingId="
+
linearRingId
+
"]"
;
}
return
super
.
copyTo
(
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
OrientationRingsSame
(),
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
SolidTooFewPolygons
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Statistics.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.common.base.ModelObjects
;
public
class
Statistics
extends
AbstractDataType
{
private
FeatureStatistics
numErrorBuildings
;
private
FeatureStatistics
numErrorVegetation
;
private
FeatureStatistics
numErrorLandObjects
;
private
FeatureStatistics
numErrorBridgeObjects
;
private
FeatureStatistics
numErrorWaterObjects
;
private
FeatureStatistics
numErrorTransportation
;
private
ErrorStatistics
errorStatistics
;
public
FeatureStatistics
getNumErrorBuildings
()
{
return
numErrorBuildings
;
}
public
void
setNumErrorBuildings
(
FeatureStatistics
numErrorBuildings
)
{
this
.
numErrorBuildings
=
ModelObjects
.
setParent
(
numErrorBuildings
,
this
);
}
public
FeatureStatistics
getNumErrorVegetation
()
{
return
numErrorVegetation
;
}
public
void
setNumErrorVegetation
(
FeatureStatistics
numErrorVegetation
)
{
this
.
numErrorVegetation
=
ModelObjects
.
setParent
(
numErrorVegetation
,
this
);
}
public
FeatureStatistics
getNumErrorLandObjects
()
{
return
numErrorLandObjects
;
}
public
void
setNumErrorLandObjects
(
FeatureStatistics
numErrorLandObjects
)
{
this
.
numErrorLandObjects
=
ModelObjects
.
setParent
(
numErrorLandObjects
,
this
);
}
public
FeatureStatistics
getNumErrorBridgeObjects
()
{
return
numErrorBridgeObjects
;
}
public
void
setNumErrorBridgeObjects
(
FeatureStatistics
numErrorBridgeObjects
)
{
this
.
numErrorBridgeObjects
=
ModelObjects
.
setParent
(
numErrorBridgeObjects
,
this
);
}
public
FeatureStatistics
getNumErrorWaterObjects
()
{
return
numErrorWaterObjects
;
}
public
void
setNumErrorWaterObjects
(
FeatureStatistics
numErrorWaterObjects
)
{
this
.
numErrorWaterObjects
=
ModelObjects
.
setParent
(
numErrorWaterObjects
,
this
);
}
public
FeatureStatistics
getNumErrorTransportation
()
{
return
numErrorTransportation
;
}
public
void
setNumErrorTransportation
(
FeatureStatistics
numErrorTransportation
)
{
this
.
numErrorTransportation
=
ModelObjects
.
setParent
(
numErrorTransportation
,
this
);
}
public
ErrorStatistics
getErrorStatistics
()
{
return
errorStatistics
;
}
public
void
setErrorStatistics
(
ErrorStatistics
errorStatistics
)
{
this
.
errorStatistics
=
ModelObjects
.
setParent
(
errorStatistics
,
this
);
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
Statistics
copy
=
target
==
null
?
new
Statistics
()
:
(
Statistics
)
target
;
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
Statistics
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java
deleted
100644 → 0
View file @
6cf1abce
/*-
* Copyright 2020 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
public
class
TooFewPoints
extends
RingError
{
private
static
final
long
serialVersionUID
=
-
904319347280328865L
;
@Override
public
String
toString
()
{
return
"TooFewPoints [linearRingId="
+
getLinearRingId
()
+
"]"
;
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
TooFewPoints
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Validation.java
View file @
98b386d2
/*
-
* Copyright 202
0
Hochschule für Technik Stuttgart
/*
* Copyright 202
1
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.
...
...
@@ -13,74 +13,91 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
de.hft.stuttgart.quality.model
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.citygml.ade.binding.ADEModelObject
;
import
org.citygml4j.model.common.base.ModelObjects
;
import
org.citygml4j.model.common.visitor.FeatureFunctor
;
import
org.citygml4j.model.common.visitor.FeatureVisitor
;
import
org.citygml4j.model.common.visitor.GMLFunctor
;
import
org.citygml4j.model.common.visitor.GMLVisitor
;
import
org.citygml4j.model.gml.feature.AbstractFeature
;
import
java.time.ZonedDateTime
;
import
org.citygml4j.builder.copy.CopyBuilder
;
public
class
Validation
extends
AbstractFeature
implements
ADEModelObject
{
private
ZonedDateTime
validationDate
;
private
String
validationSoftware
;
private
ValidationPlan
validationPlan
;
private
Statistics
statistics
;
public
ZonedDateTime
getValidationDate
()
{
return
validationDate
;
}
public
void
setValidationDate
(
ZonedDateTime
validationDate
)
{
this
.
validationDate
=
validationDate
;
}
public
String
getValidationSoftware
()
{
return
validationSoftware
;
}
public
void
setValidationSoftware
(
String
validationSoftware
)
{
this
.
validationSoftware
=
validationSoftware
;
}
public
ValidationPlan
getValidationPlan
()
{
return
validationPlan
;
}
public
void
setValidationPlan
(
ValidationPlan
validationPlan
)
{
this
.
validationPlan
=
ModelObjects
.
setParent
(
validationPlan
,
this
);
}
public
Statistics
getStatistics
()
{
return
statistics
;
}
public
void
setStatistics
(
Statistics
statistics
)
{
this
.
statistics
=
ModelObjects
.
setParent
(
statistics
,
this
);
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
Validation
copy
=
target
==
null
?
new
Validation
()
:
(
Validation
)
target
;
super
.
copyTo
(
copy
,
copyBuilder
);
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
Validation
(),
copyBuilder
);
}
@Override
public
void
accept
(
FeatureVisitor
visitor
)
{
visitor
.
visit
(
this
);
}
@Override
public
<
T
>
T
accept
(
FeatureFunctor
<
T
>
visitor
)
{
return
visitor
.
apply
(
this
);
}
@Override
public
void
accept
(
GMLVisitor
visitor
)
{
visitor
.
visit
(
this
);
}
import
de.hft.stuttgart.quality.model.jaxb.Statistics
;
import
de.hft.stuttgart.quality.model.jaxb.ValidationPlan
;
public
class
Validation
extends
ChildObject
{
private
static
final
long
serialVersionUID
=
1738293574859506005L
;
private
ZonedDateTime
validationDate
;
private
String
validationSoftware
;
private
ValidationPlan
validationPlan
;
private
Statistics
statistics
;
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
this
;
}
public
boolean
isSetStatistics
()
{
return
statistics
!=
null
;
}
public
void
setStatistics
(
Statistics
statistics
)
{
this
.
statistics
=
statistics
;
}
public
Statistics
getStatistics
()
{
return
statistics
;
}
public
boolean
isSetValidationPlan
()
{
return
validationPlan
!=
null
;
}
public
void
setValidationPlan
(
ValidationPlan
validationPlan
)
{
this
.
validationPlan
=
validationPlan
;
}
public
ValidationPlan
getValidationPlan
()
{
return
validationPlan
;
}
public
boolean
isSetDateTime
()
{
return
validationDate
!=
null
;
}
public
boolean
isSetValidationSoftware
()
{
return
validationSoftware
!=
null
;
}
public
void
setValidationDate
(
ZonedDateTime
validationDate
)
{
this
.
validationDate
=
validationDate
;
}
public
ZonedDateTime
getValidationDate
()
{
return
validationDate
;
}
public
void
setValidationSoftware
(
String
validationSoftware
)
{
this
.
validationSoftware
=
validationSoftware
;
}
public
String
getValidationSoftware
()
{
return
validationSoftware
;
}
@Override
public
<
T
>
T
accept
(
GMLFunctor
<
T
>
visitor
)
{
return
visitor
.
apply
(
this
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationPlan.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.common.base.ModelObjects
;
import
org.citygml4j.model.common.child.ChildList
;
import
java.util.List
;
public
class
ValidationPlan
extends
AbstractDataType
{
private
List
<
Parameter
>
globalParameters
;
private
Filter
filter
;
private
Requirement
requirement
;
public
boolean
isSetGlobalParameters
()
{
return
globalParameters
!=
null
&&
!
globalParameters
.
isEmpty
();
}
public
List
<
Parameter
>
getGlobalParameters
()
{
if
(
globalParameters
==
null
)
{
globalParameters
=
new
ChildList
<>(
this
);
}
return
globalParameters
;
}
public
void
setGlobalParameters
(
List
<
Parameter
>
globalParameters
)
{
this
.
globalParameters
=
ModelObjects
.
setParent
(
globalParameters
,
this
);
}
public
Filter
getFilter
()
{
return
filter
;
}
public
void
setFilter
(
Filter
filter
)
{
this
.
filter
=
ModelObjects
.
setParent
(
filter
,
this
);
}
public
Requirement
getRequirement
()
{
return
requirement
;
}
public
void
setRequirement
(
Requirement
requirement
)
{
this
.
requirement
=
ModelObjects
.
setParent
(
requirement
,
this
);
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
ValidationPlan
copy
=
target
==
null
?
new
ValidationPlan
()
:
(
ValidationPlan
)
target
;
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
ValidationPlan
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationProperty.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.model.citygml.ade.binding.ADEModelObject
;
import
org.citygml4j.model.gml.feature.FeatureProperty
;
public
class
ValidationProperty
extends
FeatureProperty
<
Validation
>
implements
ADEModelObject
{
public
ValidationProperty
()
{
}
public
ValidationProperty
(
Validation
object
)
{
super
(
object
);
}
public
ValidationProperty
(
String
href
)
{
super
(
href
);
}
@Override
public
Class
<
Validation
>
getAssociableClass
()
{
return
Validation
.
class
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
Validation
copy
=
(
target
==
null
)
?
new
Validation
()
:
(
Validation
)
target
;
return
super
.
copyTo
(
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
Validation
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResult.java
View file @
98b386d2
/*
-
* Copyright 202
0
Hochschule für Technik Stuttgart
/*
* Copyright 202
1
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.
...
...
@@ -13,72 +13,64 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
de.hft.stuttgart.quality.model
;
import
java.util.ArrayList
;
import
java.util.List
;
package
de.hft.stuttgart.quality.model
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.model.citygml.ade.binding.ADEModelObject
;
import
org.citygml4j.model.common.visitor.FeatureFunctor
;
import
org.citygml4j.model.common.visitor.FeatureVisitor
;
import
org.citygml4j.model.common.visitor.GMLFunctor
;
import
org.citygml4j.model.common.visitor.GMLVisitor
;
import
org.citygml4j.model.gml.feature.AbstractFeature
;
import
org.citygml4j.builder.copy.ObjectCopier
;
import
org.citygml4j.model.common.base.ModelObjects
;
import
org.citygml4j.model.common.child.ChildList
;
import
de.hft.stuttgart.quality.model.jaxb.ResultType
;
import
java.util.List
;
public
class
ValidationResult
extends
AbstractFeature
implements
ADEModelObject
{
public
class
ValidationResult
extends
AbstractDataType
{
private
ValidationProperty
validation
;
private
List
<
AbstractError
>
errors
;
private
ResultType
resultType
;
private
static
final
long
serialVersionUID
=
1180762313908627342L
;
private
ResultType
result
;
private
List
<
ValidationError
>
errors
;
public
boolean
hasErrors
()
{
return
errors
!=
null
&&
!
errors
.
isEmpty
();
}
public
ValidationProperty
getValidation
()
{
return
validation
;
}
public
List
<
ValidationError
>
getErrors
()
{
if
(
errors
==
null
)
{
errors
=
new
ArrayList
<>(
2
);
}
return
errors
;
}
public
void
setValidation
(
ValidationProperty
validation
)
{
this
.
validation
=
ModelObjects
.
setParent
(
validation
,
this
);
}
public
void
setResult
(
ResultType
result
)
{
this
.
result
=
result
;
}
public
boolean
isSetErrors
(
)
{
return
errors
!=
null
&&
!
errors
.
isEmpty
()
;
}
public
ResultType
getResult
()
{
return
result
;
}
public
List
<
AbstractError
>
getErrors
()
{
if
(
errors
==
null
)
{
errors
=
new
ChildList
<>(
this
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
ValidationResult
(),
copyBuilder
);
}
return
errors
;
}
@Override
public
void
accept
(
FeatureVisitor
visitor
)
{
visitor
.
visit
(
this
);
}
public
void
setErrors
(
List
<
AbstractError
>
errors
)
{
this
.
errors
=
ModelObjects
.
setParent
(
errors
,
this
);
}
@Override
public
<
T
>
T
accept
(
FeatureFunctor
<
T
>
visitor
)
{
return
visitor
.
apply
(
this
);
}
public
ResultType
getResultType
()
{
return
resultType
;
}
@Override
public
void
accept
(
GMLVisitor
visitor
)
{
visitor
.
visit
(
this
);
}
public
void
setResultType
(
ResultType
resultType
)
{
this
.
resultType
=
resultType
;
}
@Override
public
<
T
>
T
accept
(
GMLFunctor
<
T
>
visitor
)
{
return
visitor
.
apply
(
this
);
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
ValidationResult
copy
=
target
==
null
?
new
ValidationResult
()
:
(
ValidationResult
)
target
;
return
ObjectCopier
.
copyTo
(
this
,
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
ValidationResult
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResultProperty.java
0 → 100644
View file @
98b386d2
/*
* Copyright 2021 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
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.model.citygml.ade.binding.ADEModelObject
;
import
org.citygml4j.model.gml.base.AssociationByRep
;
public
class
ValidationResultProperty
extends
AssociationByRep
<
ValidationResult
>
implements
ADEModelObject
{
public
ValidationResultProperty
()
{
super
();
}
public
ValidationResultProperty
(
ValidationResult
object
)
{
super
(
object
);
}
@Override
public
Class
<
ValidationResult
>
getAssociableClass
()
{
return
ValidationResult
.
class
;
}
@Override
public
Object
copyTo
(
Object
target
,
CopyBuilder
copyBuilder
)
{
ValidationResult
copy
=
(
target
==
null
)
?
new
ValidationResult
()
:
(
ValidationResult
)
target
;
return
super
.
copyTo
(
copy
,
copyBuilder
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
ValidationResult
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/
AllPolygonsWrongOrientation
.java
→
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/
ValidationResultPropertyElement
.java
View file @
98b386d2
/*
-
* Copyright 202
0
Hochschule für Technik Stuttgart
/*
* Copyright 202
1
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.
...
...
@@ -13,22 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
de.hft.stuttgart.quality.model
;
import
org.citygml4j.builder.copy.CopyBuilder
;
import
org.citygml4j.model.citygml.ade.binding.ADEGenericApplicationProperty
;
public
class
AllPolygonsWrongOrientation
extends
SolidError
{
private
static
final
long
serialVersionUID
=
3817224755569965908L
;
public
class
ValidationResultPropertyElement
extends
ADEGenericApplicationProperty
<
ValidationResultProperty
>
{
@Override
public
String
toString
()
{
return
"AllPolygonsWrongOrientation [geometryId="
+
getGeometryId
()
+
"]"
;
}
public
ValidationResultPropertyElement
()
{
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
AllPolygonsWrongOrientation
(),
copyBuilder
);
}
public
ValidationResultPropertyElement
(
ValidationResultProperty
value
)
{
super
(
value
);
}
@Override
public
Object
copy
(
CopyBuilder
copyBuilder
)
{
return
copyTo
(
new
ValidationResultProperty
(),
copyBuilder
);
}
}
citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AllPolygonsWrongOrientationType.java
deleted
100644 → 0
View file @
6cf1abce
/*-
* Copyright 2020 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.jaxb
;
import
javax.xml.bind.annotation.XmlRootElement
;
@XmlRootElement
(
name
=
"GE_S_ALL_POLYGONS_WRONG_ORIENTATION"
)
public
class
AllPolygonsWrongOrientationType
extends
SolidErrorType
{
}
Prev
1
…
4
5
6
7
8
9
10
11
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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