diff --git a/.gitignore b/.gitignore
index f190e4bc19841cf1aa289fc09f5b260ea70f0b82..8b4f9f0291beadfb206d34c1571ce6884d367d7b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -148,10 +148,10 @@ fabric.properties
### Intellij Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
-# *.iml
-# modules.xml
-# .idea/misc.xml
-# *.ipr
+ *.iml
+ modules.xml
+ .idea/misc.xml
+ *.ipr
# Sonarlint plugin
.idea/sonarlint
@@ -271,4 +271,6 @@ $RECYCLE.BIN/
# Windows shortcuts
*.lnk
+**/.idea/
+
# End of https://www.gitignore.io/api/java,maven,macos,linux,eclipse,windows,netbeans,intellij
diff --git a/citygml4j-quality-ade/.gitignore b/citygml4j-quality-ade/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..a2ca7a03ecc6d82159ead0f4ebbe153a08237050
--- /dev/null
+++ b/citygml4j-quality-ade/.gitignore
@@ -0,0 +1,2 @@
+/.apt_generated_tests/
+*.iml
diff --git a/citygml4j-quality-ade/pom.xml b/citygml4j-quality-ade/pom.xml
index 4c65c090ee5cdc7c243476c2c97a1108c03674f7..64d79092065b2c0a02aa9e5270cfc85f8c581c80 100644
--- a/citygml4j-quality-ade/pom.xml
+++ b/citygml4j-quality-ade/pom.xml
@@ -4,21 +4,25 @@
4.0.0
de.hft.stuttgart
citygml4j-quality-ade
- 0.1.3
+ 3.1.4
UTF-8
- 1.8
- 1.8
+ 11
+ 11
-
-
- org.citygml4j
- citygml4j
- 2.10.2
-
+
+ org.citygml4j
+ citygml4j-core
+ 3.0.0-rc.4
+
+
+ org.citygml4j
+ citygml4j-xml
+ 3.0.0-rc.4
+
org.junit.jupiter
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java
index f1e7d58cdf742678cc3a8ed408f4cbc331ef53a0..f7b70bafdee1cdcfd3fc884b474a5a17b5061716 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java
@@ -18,36 +18,23 @@ package de.hft.stuttgart.quality;
import java.util.Collections;
import java.util.List;
-import org.citygml4j.model.citygml.ade.binding.ADEContext;
-import org.citygml4j.model.citygml.ade.binding.ADEMarshaller;
-import org.citygml4j.model.citygml.ade.binding.ADEUnmarshaller;
-import org.citygml4j.model.module.ade.ADEModule;
+import org.citygml4j.core.visitor.ADEWalker;
+import org.citygml4j.xml.ade.CityGMLADE;
+import org.citygml4j.xml.module.ade.ADEModule;
-import de.hft.stuttgart.quality.marshaller.QualityAdeMarshaller;
-import de.hft.stuttgart.quality.marshaller.QualityAdeUnmarshaller;
-public class QualityADEContext implements ADEContext {
+public class QualityADEContext implements CityGMLADE {
- private final List modules = Collections.singletonList(QualityADEModule.V0_1_3);
+ private final List modules = Collections.singletonList(QualityADEModule.V0_1_4);
@Override
public List getADEModules() {
return modules;
}
-
- @Override
- public List getModelPackageNames() {
- return Collections.singletonList("de.hft.stuttgart.quality.model");
- }
-
- @Override
- public ADEMarshaller createADEMarshaller() {
- return new QualityAdeMarshaller();
- }
-
+
@Override
- public ADEUnmarshaller createADEUnmarshaller() {
- return new QualityAdeUnmarshaller();
+ public ADEWalker getADEWalker() {
+ return new QualityADEWalker();
}
}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java
index 9270a2539ecc1c8915c3513663a16c15822639a3..58d389b7ca2d5da3a12d71cf1dc4f88d266737f2 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java
@@ -16,66 +16,22 @@
package de.hft.stuttgart.quality;
import java.net.URL;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import javax.xml.namespace.QName;
-
-import org.citygml4j.model.gml.feature.AbstractFeature;
-import org.citygml4j.model.module.ade.ADEModule;
-import org.citygml4j.model.module.citygml.CityGMLVersion;
+import org.citygml4j.core.model.CityGMLVersion;
+import org.citygml4j.xml.module.ade.ADEModule;
public class QualityADEModule extends ADEModule {
- public static final String NAMESPACE_URI = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3";
-
- public static final QualityADEModule V0_1_3 = new QualityADEModule();
-
- private static final long serialVersionUID = -8208579547274734280L;
-
- public QualityADEModule() {
- super(NAMESPACE_URI, "qual", CityGMLVersion.v2_0_0);
- }
-
- @Override
- public URL getSchemaResource() {
- return QualityADEContext.class.getResource("/qualityAde.xsd");
- }
-
- @Override
- public List getJAXBPackageNames() {
- return Collections.singletonList("de.hft.stuttgart.quality.model.jaxb");
- }
+ public static final String NAMESPACE_URI = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4";
- @Override
- public boolean hasFeatureProperty(String name) {
- return false;
- }
+ public static final QualityADEModule V0_1_4 = new QualityADEModule();
- @Override
- public boolean hasFeature(String name) {
- return false;
- }
-
- @Override
- public Class extends AbstractFeature> getFeatureClass(String name) {
- throw new IllegalStateException("No feature classes available");
- }
-
- @Override
- public QName getFeatureName(Class extends AbstractFeature> featureClass) {
- return null;
- }
-
- @Override
- public Map> getFeatures() {
- return Collections.emptyMap();
- }
-
- @Override
- public boolean isTopLevelFeature(String name) {
- return false;
- }
+ public QualityADEModule() {
+ super(NAMESPACE_URI, "qual", CityGMLVersion.v2_0);
+ }
+ @Override
+ public URL getSchemaResource() {
+ return QualityADEContext.class.getResource("/qualityAde.xsd");
+ }
}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEWalker.java
similarity index 72%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationError.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEWalker.java
index a1b5a8e2faba36caba5ebc77e4c545f208573f2a..6c035a38f229166b4ed7bd88668405ea47c44a09 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationError.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEWalker.java
@@ -1,5 +1,5 @@
/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+ * 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.
@@ -13,9 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package de.hft.stuttgart.quality.model;
+package de.hft.stuttgart.quality;
-public abstract class ValidationError extends ChildObject {
+import org.citygml4j.core.visitor.ADEWalker;
+
+public class QualityADEWalker extends ADEWalker {
+
- private static final long serialVersionUID = -2995694676938108325L;
}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractErrorPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractErrorPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef88670d617810281ac5e59148017a6e1880e037
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractErrorPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class AbstractErrorPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public AbstractErrorProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new AbstractErrorProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractGeometryErrorPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractGeometryErrorPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..45b39300951e3d63fb0c4bb1be78bd8575771000
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractGeometryErrorPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.AbstractGeometryErrorProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class AbstractGeometryErrorPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public AbstractGeometryErrorProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new AbstractGeometryErrorProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractPolygonErrorPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractPolygonErrorPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ef49fafb5696dfbc5972270358cc314180e0b48
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractPolygonErrorPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.AbstractPolygonErrorProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class AbstractPolygonErrorPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public AbstractPolygonErrorProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new AbstractPolygonErrorProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractRingErrorPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractRingErrorPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..586548eb1ab5b5fc7ddba94e4249c63e3d93d22c
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractRingErrorPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.AbstractRingErrorProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class AbstractRingErrorPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public AbstractRingErrorProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new AbstractRingErrorProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractSemanticErrorPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractSemanticErrorPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..3301ceb80cabfbb64ae8fb75c4f7f6ec3c2f58a6
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractSemanticErrorPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.AbstractSemanticErrorProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class AbstractSemanticErrorPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public AbstractSemanticErrorProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new AbstractSemanticErrorProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractSolidErrorPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractSolidErrorPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a28b4fd0d1633b7881f26680afecb6c9282b219
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/AbstractSolidErrorPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.AbstractSolidErrorProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class AbstractSolidErrorPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public AbstractSolidErrorProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new AbstractSolidErrorProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/CheckingPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/CheckingPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..60e31d583e789b4269a3aba81f6a2e3f48bbab60
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/CheckingPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.CheckingProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class CheckingPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public CheckingProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new CheckingProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/EdgeListPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/EdgeListPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..a928e0592c2058e743a97d76095ee775358a43ee
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/EdgeListPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.EdgeListProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class EdgeListPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public EdgeListProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new EdgeListProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/EdgePropertyAdapter.java
similarity index 52%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/EdgePropertyAdapter.java
index 7e1272228341b9adb212f2b3af5066f349ffd51b..9ec5629cdd7ac722f37d6351d376b07af7606943 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/EdgePropertyAdapter.java
@@ -1,5 +1,5 @@
/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+ * 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.
@@ -13,21 +13,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package de.hft.stuttgart.quality.model;
+package de.hft.stuttgart.quality.adapter.properties;
-import org.citygml4j.builder.copy.CopyBuilder;
+import de.hft.stuttgart.quality.model.properties.EdgeProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
-public class TooFewPoints extends RingError {
+import javax.xml.namespace.QName;
- private static final long serialVersionUID = -904319347280328865L;
-
- @Override
- public String toString() {
- return "TooFewPoints [linearRingId=" + getLinearRingId() + "]";
- }
+public class EdgePropertyAdapter extends AbstractInlinePropertyAdapter {
@Override
- public Object copy(CopyBuilder copyBuilder) {
- return copyTo(new TooFewPoints(), copyBuilder);
+ public EdgeProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new EdgeProperty();
}
}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InteriorDisconnected.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ErrorPropertyAdapter.java
similarity index 52%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InteriorDisconnected.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ErrorPropertyAdapter.java
index 64da8cc78e1e5768201a0023646424b86b7c4ba2..421dca24f09e057c74f95d2fbffd191c240bb3c4 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InteriorDisconnected.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ErrorPropertyAdapter.java
@@ -1,5 +1,5 @@
/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+ * 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.
@@ -13,21 +13,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package de.hft.stuttgart.quality.model;
+package de.hft.stuttgart.quality.adapter.properties;
-import org.citygml4j.builder.copy.CopyBuilder;
+import de.hft.stuttgart.quality.model.properties.ErrorProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
-public class InteriorDisconnected extends PolygonError {
+import javax.xml.namespace.QName;
- private static final long serialVersionUID = 8443642232356795359L;
-
- @Override
- public String toString() {
- return "InteriorDisconnected [polygonId=" + getPolygonId() + "]";
- }
+public class ErrorPropertyAdapter extends AbstractInlinePropertyAdapter {
@Override
- public Object copy(CopyBuilder copyBuilder) {
- return copyTo(new InteriorDisconnected(), copyBuilder);
+ public ErrorProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new ErrorProperty();
}
}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/FeatureStatisticsPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/FeatureStatisticsPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..2dffab4f99179a733e3ac6d5d9048a13f24ef9fe
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/FeatureStatisticsPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.FeatureStatisticsProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class FeatureStatisticsPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public FeatureStatisticsProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new FeatureStatisticsProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AllPolygonsWrongOrientation.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/FilterPropertyAdapter.java
similarity index 52%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AllPolygonsWrongOrientation.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/FilterPropertyAdapter.java
index 0b384b735f8fe70961198da21773642cac5ba538..9c0e26f4c14d60af5be737f027f4ea7ff77ae181 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AllPolygonsWrongOrientation.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/FilterPropertyAdapter.java
@@ -1,5 +1,5 @@
/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+ * 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.
@@ -13,22 +13,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package de.hft.stuttgart.quality.model;
+package de.hft.stuttgart.quality.adapter.properties;
-import org.citygml4j.builder.copy.CopyBuilder;
+import de.hft.stuttgart.quality.model.properties.FilterProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
-public class AllPolygonsWrongOrientation extends SolidError {
+import javax.xml.namespace.QName;
- private static final long serialVersionUID = 3817224755569965908L;
+public class FilterPropertyAdapter extends AbstractInlinePropertyAdapter {
@Override
- public String toString() {
- return "AllPolygonsWrongOrientation [geometryId=" + getGeometryId() + "]";
+ public FilterProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new FilterProperty();
}
-
- @Override
- public Object copy(CopyBuilder copyBuilder) {
- return copyTo(new AllPolygonsWrongOrientation(), copyBuilder);
- }
-
}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/GlobalParametersPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/GlobalParametersPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..7321e2ffedd95577537163a058e103d0804b33c4
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/GlobalParametersPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.GlobalParametersProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class GlobalParametersPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public GlobalParametersProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new GlobalParametersProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ParameterPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ParameterPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c9e80fb950b2a87d630e98d00dbee3bbebc1ed9
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ParameterPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.ParameterProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class ParameterPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public ParameterProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new ParameterProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/PolygonIdListPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/PolygonIdListPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..31ff49dd8b29c57c1df8da28670b0e7066aa5336
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/PolygonIdListPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.PolygonIdListProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class PolygonIdListPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public PolygonIdListProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new PolygonIdListProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/RequirementPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/RequirementPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c746fd17e3131c6260ef9e99906f533496e6841
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/RequirementPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.RequirementProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class RequirementPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public RequirementProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new RequirementProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/StatisticsPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/StatisticsPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..53f0e3e135317e3500a1d4261e9294a47afa4266
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/StatisticsPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.StatisticsProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class StatisticsPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public StatisticsProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new StatisticsProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationPlanPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationPlanPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e38ff2ce06c33c1e03d05e0d7b7e0c6e3f8871a
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationPlanPropertyAdapter.java
@@ -0,0 +1,30 @@
+/*-
+ * 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.adapter.properties;
+
+import de.hft.stuttgart.quality.model.properties.ValidationPlanProperty;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlinePropertyAdapter;
+
+import javax.xml.namespace.QName;
+
+public class ValidationPlanPropertyAdapter extends AbstractInlinePropertyAdapter {
+
+ @Override
+ public ValidationPlanProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new ValidationPlanProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..47f40014fa7371e0c537470c27dfc61b748397c6
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationPropertyAdapter.java
@@ -0,0 +1,31 @@
+/*-
+ * 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.adapter.properties;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlineOrByReferencePropertyAdapter;
+
+import de.hft.stuttgart.quality.model.properties.ValidationProperty;
+
+public class ValidationPropertyAdapter extends AbstractInlineOrByReferencePropertyAdapter {
+
+ @Override
+ public ValidationProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new ValidationProperty();
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationResultPropertyAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationResultPropertyAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..4eae3e65d3cab2c8552c259bf6eb6ed1cca16ad6
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/properties/ValidationResultPropertyAdapter.java
@@ -0,0 +1,33 @@
+/*-
+ * 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.adapter.properties;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.base.AbstractInlineOrByReferencePropertyAdapter;
+
+import de.hft.stuttgart.quality.model.properties.ValidationResultProperty;
+
+public class ValidationResultPropertyAdapter
+ extends AbstractInlineOrByReferencePropertyAdapter {
+
+ @Override
+ public ValidationResultProperty createObject(QName name, Object parent) throws ObjectBuildException {
+ return new ValidationResultProperty();
+ }
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba552871fd5750188529c50984c3848730ca5ce9
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractErrorAdapter.java
@@ -0,0 +1,10 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializer;
+
+import de.hft.stuttgart.quality.model.types.AbstractError;
+
+public abstract class AbstractErrorAdapter implements ObjectBuilder, ObjectSerializer {
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractGeometryErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractGeometryErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa33625961584d26239cf494056efea368453df5
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractGeometryErrorAdapter.java
@@ -0,0 +1,7 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import de.hft.stuttgart.quality.model.types.AbstractGeometryError;
+
+public abstract class AbstractGeometryErrorAdapter extends AbstractErrorAdapter {
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractPolygonErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractPolygonErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbdcc9eb19c01477ecf161a751462ed6e16ee80d
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractPolygonErrorAdapter.java
@@ -0,0 +1,45 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.AbstractPolygonError;
+
+public abstract class AbstractPolygonErrorAdapter
+ extends AbstractGeometryErrorAdapter {
+
+ @Override
+ public void buildChildObject(AbstractPolygonError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "polygonId":
+ reader.getTextContent().ifPresent(object::setPolygonId);
+ break;
+ default:
+ throw new IllegalStateException(
+ "Cannot handle name " + name + " when building AbstractPolygonError element");
+ }
+ }
+
+ @Override
+ public void writeChildElements(AbstractPolygonError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getPolygonId() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "polygonId").addTextContent(object.getPolygonId()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractRingErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractRingErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae355bca6248471829b237d5606bd9a381878d3c
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractRingErrorAdapter.java
@@ -0,0 +1,41 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.AbstractRingError;
+
+public abstract class AbstractRingErrorAdapter extends AbstractGeometryErrorAdapter {
+
+ @Override
+ public void buildChildObject(AbstractRingError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "linearRingId":
+ reader.getTextContent().ifPresent(object::setLinearRingId);
+ break;
+ }
+ }
+
+ @Override
+ public void writeChildElements(AbstractRingError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getLinearRingId() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "linearRingId")
+ .addTextContent(object.getLinearRingId()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractSemanticErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractSemanticErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..c429b9788441b89a07dad51ca4a771cd93a0f8b3
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractSemanticErrorAdapter.java
@@ -0,0 +1,7 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import de.hft.stuttgart.quality.model.types.AbstractSemanticError;
+
+public abstract class AbstractSemanticErrorAdapter extends AbstractErrorAdapter {
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractSolidErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractSolidErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..41171ca98982a356c1b79d9e0f18244bfe10e9b6
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AbstractSolidErrorAdapter.java
@@ -0,0 +1,43 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.AbstractSolidError;
+
+public abstract class AbstractSolidErrorAdapter extends AbstractGeometryErrorAdapter {
+
+ @Override
+ public void buildChildObject(AbstractSolidError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "geometryId":
+ reader.getTextContent().ifPresent(object::setGeometryId);
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building AbstractSolidError element");
+ }
+ }
+
+ @Override
+ public void writeChildElements(AbstractSolidError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getGeometryId() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "geometryId").addTextContent(object.getGeometryId()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AllPolygonsOrientedWrongErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AllPolygonsOrientedWrongErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..496231a7d63b316f3f9264313f0205e78aa9557c
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/AllPolygonsOrientedWrongErrorAdapter.java
@@ -0,0 +1,28 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.AllPolygonsOrientedWrongError;
+
+@XMLElement(name = "GE_S_ALL_POLYGONS_WRONG_ORIENTATION", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class AllPolygonsOrientedWrongErrorAdapter extends AbstractSolidErrorAdapter {
+
+ @Override
+ public AllPolygonsOrientedWrongError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new AllPolygonsOrientedWrongError();
+ }
+
+ @Override
+ public Element createElement(AllPolygonsOrientedWrongError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_S_ALL_POLYGONS_WRONG_ORIENTATION");
+ }
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/CheckingAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/CheckingAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9af1002c184fc3702cd5d707c1c86c9ce760d2d
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/CheckingAdapter.java
@@ -0,0 +1,59 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import de.hft.stuttgart.quality.model.enums.TopLevelFeatureType;
+import de.hft.stuttgart.quality.model.types.Checking;
+
+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;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import javax.xml.namespace.QName;
+
+@XMLElement(name = "Checking", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class CheckingAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public Checking createObject(QName name, Object parent) throws ObjectBuildException {
+ return new Checking();
+ }
+
+ @Override
+ public void buildChildObject(Checking object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "featureType":
+ reader.getTextContent().ifPresent(s -> object.setFeatureType(TopLevelFeatureType.valueOf(s)));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building Checking element");
+ }
+ }
+
+ @Override
+ public Element createElement(Checking object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "Checking");
+ }
+
+ @Override
+ public void writeChildElements(Checking object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getFeatureType() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "featureType")
+ .addTextContent(object.getFeatureType().toString()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/CityObjectPropertiesAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/CityObjectPropertiesAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..f981bc59da5663d5b96c1a8beaeccdcd295bf050
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/CityObjectPropertiesAdapter.java
@@ -0,0 +1,55 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.ValidationResultPropertyAdapter;
+import de.hft.stuttgart.quality.model.types.CityObjectProperties;
+
+@XMLElement(name = "validationResult", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class CityObjectPropertiesAdapter
+ implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public CityObjectProperties createObject(QName name, Object parent) throws ObjectBuildException {
+ return new CityObjectProperties();
+ }
+
+ @Override
+ public void buildChildObject(CityObjectProperties object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "ValidationResult":
+ object.setValidationResult(reader.getObjectUsingBuilder(ValidationResultPropertyAdapter.class));
+ break;
+ default:
+ throw new IllegalStateException(
+ "Cannot handle name " + name + " when building CityObjectProperties element");
+ }
+ }
+
+ @Override
+ public void writeChildElements(CityObjectProperties object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getValidationResult() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "validationResult"),
+ object.getValidationResult(), ValidationResultPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ConsecutivePointsSameErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ConsecutivePointsSameErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f923fbfa7c29b25d3c18265113697ded6e3d19d
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ConsecutivePointsSameErrorAdapter.java
@@ -0,0 +1,66 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.geometry.DirectPositionAdapter;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.ConsecutivePointsSameError;
+
+@XMLElement(name = "GE_R_CONSECUTIVE_POINTS_SAME", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class ConsecutivePointsSameErrorAdapter extends AbstractRingErrorAdapter {
+
+ @Override
+ public ConsecutivePointsSameError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new ConsecutivePointsSameError();
+ }
+
+ @Override
+ public void buildChildObject(ConsecutivePointsSameError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "vertex1":
+ object.setVertex1(reader.getObjectUsingBuilder(DirectPositionAdapter.class));
+ break;
+ case "vertex2":
+ object.setVertex2(reader.getObjectUsingBuilder(DirectPositionAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(ConsecutivePointsSameError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_R_CONSECUTIVE_POINTS_SAME");
+ }
+
+ @Override
+ public void writeChildElements(ConsecutivePointsSameError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+
+ if (object.getVertex1() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "vertex1"),
+ object.getVertex1(), DirectPositionAdapter.class, namespaces);
+ }
+ if (object.getVertex2() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "vertex2"),
+ object.getVertex2(), DirectPositionAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/EdgeAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/EdgeAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..285418cb8826bff835f0e725d90d876eaf668c67
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/EdgeAdapter.java
@@ -0,0 +1,65 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.gml.adapter.geometry.DirectPositionAdapter;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.Edge;
+
+@XMLElement(name = "Edge", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class EdgeAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public Edge createObject(QName name, Object parent) throws ObjectBuildException {
+ return new Edge();
+ }
+
+ @Override
+ public void buildChildObject(Edge object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "from":
+ object.setFrom(reader.getObjectUsingBuilder(DirectPositionAdapter.class));
+ break;
+ case "to":
+ object.setTo(reader.getObjectUsingBuilder(DirectPositionAdapter.class));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building Edge element");
+ }
+ }
+
+ @Override
+ public Element createElement(Edge object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "Edge");
+ }
+
+ @Override
+ public void writeChildElements(Edge object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getFrom() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "from"), object.getFrom(),
+ DirectPositionAdapter.class, namespaces);
+ }
+ if (object.getTo() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "to"), object.getTo(),
+ DirectPositionAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/EdgeListAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/EdgeListAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ddbcd0762135daaaba6ddfce86749cda08fe77b
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/EdgeListAdapter.java
@@ -0,0 +1,59 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.EdgePropertyAdapter;
+import de.hft.stuttgart.quality.model.properties.EdgeProperty;
+import de.hft.stuttgart.quality.model.types.EdgeList;
+
+@XMLElement(name = "EdgeList", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class EdgeListAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public EdgeList createObject(QName name, Object parent) throws ObjectBuildException {
+ return new EdgeList();
+ }
+
+ @Override
+ public void buildChildObject(EdgeList object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "edge":
+ object.getEdges().add(reader.getObjectUsingBuilder(EdgePropertyAdapter.class));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building EdgeList element");
+ }
+ }
+
+ @Override
+ public Element createElement(EdgeList object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "EdgeList");
+ }
+
+ @Override
+ public void writeChildElements(EdgeList object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ for (EdgeProperty edgeProp : object.getEdges()) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "edge"), edgeProp,
+ EdgePropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b5d0cad1157828b79c1afe0a464d193382f5d07
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ErrorAdapter.java
@@ -0,0 +1,63 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+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, ObjectSerializer {
+
+ @Override
+ public Error createObject(QName name, Object parent) throws ObjectBuildException {
+ return new Error();
+ }
+
+ @Override
+ public void buildChildObject(Error object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "occurrences":
+ reader.getTextContent().ifPresent(s -> object.setOccurrences(Integer.parseInt(s)));
+ break;
+ case "name":
+ reader.getTextContent().ifPresent(s -> object.setName(ErrorId.valueOf(s)));
+ break;
+ 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)
+ throws ObjectSerializeException, XMLWriteException {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "occurrences")
+ .addTextContent(Integer.toString(object.getOccurrences())));
+ if (object.getName() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "name").addTextContent(object.getName().toString()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/FeatureStatisticsAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/FeatureStatisticsAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..2169b7fb97d32773644b7905733b4deabb4491a5
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/FeatureStatisticsAdapter.java
@@ -0,0 +1,61 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import de.hft.stuttgart.quality.model.types.FeatureStatistics;
+
+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;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import javax.xml.namespace.QName;
+
+@XMLElement(name = "FeatureStatistics", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class FeatureStatisticsAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public FeatureStatistics createObject(QName name, Object parent) throws ObjectBuildException {
+ return new FeatureStatistics();
+ }
+
+ @Override
+ public void buildChildObject(FeatureStatistics object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "numChecked":
+ reader.getTextContent().ifPresent(s -> object.setNumChecked(Integer.parseInt(s)));
+ break;
+ case "numErrors":
+ reader.getTextContent().ifPresent(s -> object.setNumErrors(Integer.parseInt(s)));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building FeatureStatistics element");
+ }
+ }
+
+ @Override
+ public Element createElement(FeatureStatistics object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "FeatureStatistics");
+ }
+
+ @Override
+ public void writeChildElements(FeatureStatistics object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "numChecked")
+ .addTextContent(Integer.toString(object.getNumChecked())));
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "numErrors")
+ .addTextContent(Integer.toString(object.getNumErrors())));
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/FilterAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/FilterAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..bebe70fa0c742141c5ce54c95d9ac2104ddb65a5
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/FilterAdapter.java
@@ -0,0 +1,59 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.CheckingPropertyAdapter;
+import de.hft.stuttgart.quality.model.properties.CheckingProperty;
+import de.hft.stuttgart.quality.model.types.Filter;
+
+@XMLElement(name = "Filter", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class FilterAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public Filter createObject(QName name, Object parent) throws ObjectBuildException {
+ return new Filter();
+ }
+
+ @Override
+ public void buildChildObject(Filter object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "checking":
+ object.getChecking().add(reader.getObjectUsingBuilder(CheckingPropertyAdapter.class));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building Filter element");
+ }
+ }
+
+ @Override
+ public Element createElement(Filter object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "Filter");
+ }
+
+ @Override
+ public void writeChildElements(Filter object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ for (CheckingProperty checkProp : object.getChecking()) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "checking"), checkProp,
+ CheckingPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/GlobalParametersAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/GlobalParametersAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..0708065d835233b041c104c22610093140eff114
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/GlobalParametersAdapter.java
@@ -0,0 +1,59 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.ParameterPropertyAdapter;
+import de.hft.stuttgart.quality.model.properties.ParameterProperty;
+import de.hft.stuttgart.quality.model.types.GlobalParameters;
+
+@XMLElement(name = "GlobalParameters", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class GlobalParametersAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public GlobalParameters createObject(QName name, Object parent) throws ObjectBuildException {
+ return new GlobalParameters();
+ }
+
+ @Override
+ public void buildChildObject(GlobalParameters object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "parameter":
+ object.getParameters().add(reader.getObjectUsingBuilder(ParameterPropertyAdapter.class));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building GlobalParameters element");
+ }
+ }
+
+ @Override
+ public Element createElement(GlobalParameters object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GlobalParameters");
+ }
+
+ @Override
+ public void writeChildElements(GlobalParameters object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ for (ParameterProperty gpp : object.getParameters()) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "parameter"), gpp,
+ ParameterPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/HoleOutsideErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/HoleOutsideErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b7a3a238fd4db795a8bc2bed27212750d46bf92
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/HoleOutsideErrorAdapter.java
@@ -0,0 +1,57 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.HoleOutsideError;
+
+@XMLElement(name = "GE_P_HOLE_OUTSIDE", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class HoleOutsideErrorAdapter extends AbstractPolygonErrorAdapter {
+
+ @Override
+ public HoleOutsideError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new HoleOutsideError();
+ }
+
+ @Override
+ public void buildChildObject(HoleOutsideError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "linearRingId":
+ reader.getTextContent().ifPresent(object::setLinearRingId);
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(HoleOutsideError object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_P_HOLE_OUTSIDE");
+ }
+
+ @Override
+ public void writeChildElements(HoleOutsideError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+
+ if (object.getLinearRingId() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "linearRingId")
+ .addTextContent(object.getLinearRingId()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/InnerRingsNestedErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/InnerRingsNestedErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..45d6cdc66cd0106f8dd2217208153b8bfcc8bd02
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/InnerRingsNestedErrorAdapter.java
@@ -0,0 +1,63 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.InnerRingsNestedError;
+
+@XMLElement(name = "GE_P_INNER_RINGS_NESTED", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class InnerRingsNestedErrorAdapter extends AbstractPolygonErrorAdapter {
+
+ @Override
+ public InnerRingsNestedError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new InnerRingsNestedError();
+ }
+
+ @Override
+ public void buildChildObject(InnerRingsNestedError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "linearRingId1":
+ reader.getTextContent().ifPresent(object::setLinearRingId1);
+ break;
+ case "linearRingId2":
+ reader.getTextContent().ifPresent(object::setLinearRingId2);
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(InnerRingsNestedError object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_P_INNER_RINGS_NESTED");
+ }
+
+ @Override
+ public void writeChildElements(InnerRingsNestedError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getLinearRingId1() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "linearRingId1")
+ .addTextContent(object.getLinearRingId1()));
+ }
+ if (object.getLinearRingId2() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "linearRingId2")
+ .addTextContent(object.getLinearRingId2()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/InteriorDisconnectedErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/InteriorDisconnectedErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..c530f04c5eaa5b519b4c45cbc9a42c6326b19f6f
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/InteriorDisconnectedErrorAdapter.java
@@ -0,0 +1,28 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.InteriorDisconnectedError;
+
+@XMLElement(name = "GE_P_INTERIOR_DISCONNECTED", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class InteriorDisconnectedErrorAdapter extends AbstractPolygonErrorAdapter {
+
+ @Override
+ public InteriorDisconnectedError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new InteriorDisconnectedError();
+ }
+
+ @Override
+ public Element createElement(InteriorDisconnectedError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_P_INTERIOR_DISCONNECTED");
+ }
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/IntersectingRingsErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/IntersectingRingsErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fd59f0c435ed162ee5d87c6137496864f996fd3
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/IntersectingRingsErrorAdapter.java
@@ -0,0 +1,64 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.IntersectingRingsError;
+
+@XMLElement(name = "GE_P_INTERSECTING_RINGS", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class IntersectingRingsErrorAdapter extends AbstractPolygonErrorAdapter {
+
+ @Override
+ public IntersectingRingsError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new IntersectingRingsError();
+ }
+
+ @Override
+ public void buildChildObject(IntersectingRingsError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "linearRingId1":
+ reader.getTextContent().ifPresent(object::setLinearRingId1);
+ break;
+ case "linearRingId2":
+ reader.getTextContent().ifPresent(object::setLinearRingId2);
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(IntersectingRingsError object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_P_INTERSECTING_RINGS");
+ }
+
+ @Override
+ public void writeChildElements(IntersectingRingsError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+
+ if (object.getLinearRingId1() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "linearRingId1")
+ .addTextContent(object.getLinearRingId1()));
+ }
+ if (object.getLinearRingId2() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "linearRingId2")
+ .addTextContent(object.getLinearRingId2()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/MultipleComponentsErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/MultipleComponentsErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a353890736b3ea5c28e4e1b4dc57b3ba8435025
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/MultipleComponentsErrorAdapter.java
@@ -0,0 +1,59 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.PolygonIdListPropertyAdapter;
+import de.hft.stuttgart.quality.model.properties.PolygonIdListProperty;
+import de.hft.stuttgart.quality.model.types.MultipleComponentsError;
+
+@XMLElement(name = "GE_S_MULTIPLE_CONNECTED_COMPONENTS", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class MultipleComponentsErrorAdapter extends AbstractSolidErrorAdapter {
+
+ @Override
+ public MultipleComponentsError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new MultipleComponentsError();
+ }
+
+ @Override
+ public void buildChildObject(MultipleComponentsError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "component":
+ object.getComponents().add(reader.getObjectUsingBuilder(PolygonIdListPropertyAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(MultipleComponentsError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_S_MULTIPLE_CONNECTED_COMPONENTS");
+ }
+
+ @Override
+ public void writeChildElements(MultipleComponentsError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ for (PolygonIdListProperty clp : object.getComponents()) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "component"), clp,
+ PolygonIdListPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/NonManifoldEdgeErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/NonManifoldEdgeErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..e9ab81c5a56a6003a37198bae6bc1e50535e3573
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/NonManifoldEdgeErrorAdapter.java
@@ -0,0 +1,57 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.EdgeListPropertyAdapter;
+import de.hft.stuttgart.quality.model.types.NonManifoldEdgeError;
+
+@XMLElement(name = "GE_S_NON_MANIFOLD_EDGE", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class NonManifoldEdgeErrorAdapter extends AbstractSolidErrorAdapter {
+
+ @Override
+ public NonManifoldEdgeError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new NonManifoldEdgeError();
+ }
+
+ @Override
+ public void buildChildObject(NonManifoldEdgeError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "edges":
+ object.setEdges(reader.getObjectUsingBuilder(EdgeListPropertyAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(NonManifoldEdgeError object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_S_NON_MANIFOLD_EDGE");
+ }
+
+ @Override
+ public void writeChildElements(NonManifoldEdgeError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getEdges() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "edges"), object.getEdges(),
+ EdgeListPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/NonManifoldVertexErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/NonManifoldVertexErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..2dcf8bc1af01cdc09ffddc06c929726cfbc68959
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/NonManifoldVertexErrorAdapter.java
@@ -0,0 +1,57 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.geometry.DirectPositionAdapter;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.NonManifoldVertexError;
+
+@XMLElement(name = "GE_S_NON_MANIFOLD_VERTEX", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class NonManifoldVertexErrorAdapter extends AbstractSolidErrorAdapter {
+
+ @Override
+ public NonManifoldVertexError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new NonManifoldVertexError();
+ }
+
+ @Override
+ public void buildChildObject(NonManifoldVertexError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "vertex":
+ object.setVertex(reader.getObjectUsingBuilder(DirectPositionAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(NonManifoldVertexError object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_S_NON_MANIFOLD_VERTEX");
+ }
+
+ @Override
+ public void writeChildElements(NonManifoldVertexError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getVertex() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "vertex"), object.getVertex(),
+ DirectPositionAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/OrientationRingsSameErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/OrientationRingsSameErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebf8ffa7ae42a49bc742ed0bb693e36e86a1a72f
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/OrientationRingsSameErrorAdapter.java
@@ -0,0 +1,57 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.OrientationRingsSameError;
+
+@XMLElement(name = "GE_P_ORIENTATION_RINGS_SAME", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class OrientationRingsSameErrorAdapter extends AbstractPolygonErrorAdapter {
+
+ @Override
+ public OrientationRingsSameError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new OrientationRingsSameError();
+ }
+
+ @Override
+ public void buildChildObject(OrientationRingsSameError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "linearRingId":
+ reader.getTextContent().ifPresent(object::setLinearRing);
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(OrientationRingsSameError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_P_ORIENTATION_RINGS_SAME");
+ }
+
+ @Override
+ public void writeChildElements(OrientationRingsSameError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getLinearRing() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "linearRingId").addTextContent(object.getLinearRing()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ParameterAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ParameterAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..89c91c2d1a953907da2db116edd8088327421074
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ParameterAdapter.java
@@ -0,0 +1,69 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import de.hft.stuttgart.quality.model.types.Parameter;
+
+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;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import javax.xml.namespace.QName;
+
+@XMLElement(name = "Parameter", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class ParameterAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public Parameter createObject(QName name, Object parent) throws ObjectBuildException {
+ return new Parameter();
+ }
+
+ @Override
+ public void buildChildObject(Parameter object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "name":
+ reader.getTextContent().ifPresent(object::setName);
+ break;
+ case "uom":
+ reader.getTextContent().ifPresent(object::setUom);
+ break;
+ case "value":
+ reader.getTextContent().ifPresent(object::setValue);
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building Parameter element");
+ }
+ }
+
+ @Override
+ public Element createElement(Parameter object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "Parameter");
+ }
+
+ @Override
+ public void writeChildElements(Parameter object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getName() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "name").addTextContent(object.getName()));
+ }
+ if (object.getUom() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "uom").addTextContent(object.getUom()));
+ }
+ if (object.getValue() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "value").addTextContent(object.getValue()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PlanarDistancePlaneErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PlanarDistancePlaneErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..38aa5205bf0e05d1c0893489d0ef8ca0687784e1
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PlanarDistancePlaneErrorAdapter.java
@@ -0,0 +1,67 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.geometry.DirectPositionAdapter;
+import org.xmlobjects.gml.adapter.measures.LengthAdapter;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.PlanarDistancePlaneError;
+
+@XMLElement(name = "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class PlanarDistancePlaneErrorAdapter extends AbstractPolygonErrorAdapter {
+
+ @Override
+ public PlanarDistancePlaneError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new PlanarDistancePlaneError();
+ }
+
+ @Override
+ public void buildChildObject(PlanarDistancePlaneError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "vertex":
+ object.setVertex(reader.getObjectUsingBuilder(DirectPositionAdapter.class));
+ break;
+ case "distance":
+ object.setDistance(reader.getObjectUsingBuilder(LengthAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(PlanarDistancePlaneError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE");
+ }
+
+ @Override
+ public void writeChildElements(PlanarDistancePlaneError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getDistance() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "distance"),
+ object.getDistance(), LengthAdapter.class, namespaces);
+ }
+ if (object.getVertex() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "vertex"), object.getVertex(),
+ DirectPositionAdapter.class, namespaces);
+ }
+
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PlanarNormalsDeviationErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PlanarNormalsDeviationErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0d21307bab6606c5b9178880d163a846e4c6058
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PlanarNormalsDeviationErrorAdapter.java
@@ -0,0 +1,58 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.measures.AngleAdapter;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.PlanarNormalsDeviationError;
+
+@XMLElement(name = "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class PlanarNormalsDeviationErrorAdapter extends AbstractPolygonErrorAdapter {
+
+ @Override
+ public PlanarNormalsDeviationError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new PlanarNormalsDeviationError();
+ }
+
+ @Override
+ public void buildChildObject(PlanarNormalsDeviationError object, QName name, Attributes attributes,
+ XMLReader reader) throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "deviation":
+ object.setDeviation(reader.getObjectUsingBuilder(AngleAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(PlanarNormalsDeviationError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION");
+ }
+
+ @Override
+ public void writeChildElements(PlanarNormalsDeviationError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getDeviation() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "deviation"),
+ object.getDeviation(), AngleAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PolygonIdListAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PolygonIdListAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..f031f38072baffe9eb7ac649b18e1204641a76f0
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PolygonIdListAdapter.java
@@ -0,0 +1,57 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import de.hft.stuttgart.quality.model.types.PolygonIdList;
+
+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;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import javax.xml.namespace.QName;
+
+@XMLElement(name = "PolygonIdList", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class PolygonIdListAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public PolygonIdList createObject(QName name, Object parent) throws ObjectBuildException {
+ return new PolygonIdList();
+ }
+
+ @Override
+ public void buildChildObject(PolygonIdList object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "polygonId":
+ object.getPolygonIds().add(reader.getTextContent().get());
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building PolygonIdList element");
+ }
+ }
+
+ @Override
+ public Element createElement(PolygonIdList object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "PolygonIdList");
+ }
+
+ @Override
+ public void writeChildElements(PolygonIdList object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ for (String polygonId : object.getPolygonIds()) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "polygonId").addTextContent(polygonId));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PolygonWrongOrientationErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PolygonWrongOrientationErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a67fc1046f53a02456921748a1dbfc748f8a85d
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/PolygonWrongOrientationErrorAdapter.java
@@ -0,0 +1,58 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.EdgeListPropertyAdapter;
+import de.hft.stuttgart.quality.model.types.PolygonWrongOrientationError;
+
+@XMLElement(name = "GE_S_POLYGON_WRONG_ORIENTATION", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class PolygonWrongOrientationErrorAdapter extends AbstractSolidErrorAdapter {
+
+ @Override
+ public PolygonWrongOrientationError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new PolygonWrongOrientationError();
+ }
+
+ @Override
+ public void buildChildObject(PolygonWrongOrientationError object, QName name, Attributes attributes,
+ XMLReader reader) throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "edges":
+ object.setEdges(reader.getObjectUsingBuilder(EdgeListPropertyAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(PolygonWrongOrientationError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_S_POLYGON_WRONG_ORIENTATION");
+ }
+
+ @Override
+ public void writeChildElements(PolygonWrongOrientationError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getEdges() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "edges"), object.getEdges(),
+ EdgeListPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RequirementAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RequirementAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c4ea09e4f78b76522896302ba52beb859ec0c43
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RequirementAdapter.java
@@ -0,0 +1,73 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import de.hft.stuttgart.quality.model.enums.RequirementId;
+import de.hft.stuttgart.quality.model.properties.ParameterProperty;
+import de.hft.stuttgart.quality.model.types.Requirement;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.ParameterPropertyAdapter;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import javax.xml.namespace.QName;
+
+@XMLElement(name = "Requirement", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class RequirementAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public Requirement createObject(QName name, Object parent) throws ObjectBuildException {
+ return new Requirement();
+ }
+
+ @Override
+ public void buildChildObject(Requirement object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "enabled":
+ reader.getTextContent().ifPresent(s -> object.setEnabled(Boolean.parseBoolean(s)));
+ break;
+ case "requirementType":
+ object.setRequirementType(RequirementId.valueOf(reader.getTextContent().get()));
+ break;
+ case "parameter":
+ object.getParameters().add(reader.getObjectUsingBuilder(ParameterPropertyAdapter.class));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building Requirement element");
+ }
+ }
+
+ @Override
+ public Element createElement(Requirement object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "Requirement");
+ }
+
+ @Override
+ public void writeChildElements(Requirement object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "enabled")
+ .addTextContent(Boolean.toString(object.isEnabled())));
+ if (object.getRequirementType() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "requirementType")
+ .addTextContent(object.getRequirementType().toString()));
+ }
+ for (ParameterProperty params : object.getParameters()) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "parameter"), params,
+ ParameterPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingNotClosedErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingNotClosedErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..a34143eb4c59176b0c3f4e95819eef2c1f81637b
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingNotClosedErrorAdapter.java
@@ -0,0 +1,26 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.RingNotClosedError;
+
+@XMLElement(name = "GE_R_NOT_CLOSED", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class RingNotClosedErrorAdapter extends AbstractRingErrorAdapter {
+
+ @Override
+ public RingNotClosedError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new RingNotClosedError();
+ }
+
+ @Override
+ public Element createElement(RingNotClosedError object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_R_NOT_CLOSED");
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingSelfIntersectionErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingSelfIntersectionErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..7598322692f59b7086e37a2d7ee2982ea539fe96
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingSelfIntersectionErrorAdapter.java
@@ -0,0 +1,88 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.gml.adapter.geometry.DirectPositionAdapter;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.EdgePropertyAdapter;
+import de.hft.stuttgart.quality.model.enums.RingSelfIntType;
+import de.hft.stuttgart.quality.model.types.RingSelfIntersectionError;
+
+@XMLElement(name = "GE_R_SELF_INTERSECTION", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class RingSelfIntersectionErrorAdapter extends AbstractRingErrorAdapter {
+
+ @Override
+ public RingSelfIntersectionError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new RingSelfIntersectionError();
+ }
+
+ @Override
+ public void buildChildObject(RingSelfIntersectionError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "type":
+ reader.getTextContent().ifPresent(s -> object.setType(RingSelfIntType.valueOf(s)));
+ break;
+ case "edge1":
+ object.setEdge1(reader.getObjectUsingBuilder(EdgePropertyAdapter.class));
+ break;
+ case "edge2":
+ object.setEdge2(reader.getObjectUsingBuilder(EdgePropertyAdapter.class));
+ break;
+ case "vertex1":
+ object.setVertex1(reader.getObjectUsingBuilder(DirectPositionAdapter.class));
+ break;
+ case "vertex2":
+ object.setVertex2(reader.getObjectUsingBuilder(DirectPositionAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(RingSelfIntersectionError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_R_SELF_INTERSECTION");
+ }
+
+ @Override
+ public void writeChildElements(RingSelfIntersectionError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getEdge1() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "edge1"), object.getEdge1(),
+ EdgePropertyAdapter.class, namespaces);
+ }
+ if (object.getEdge2() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "edge2"), object.getEdge2(),
+ EdgePropertyAdapter.class, namespaces);
+ }
+ if (object.getVertex1() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "vertex1"),
+ object.getVertex1(), DirectPositionAdapter.class, namespaces);
+ }
+ if (object.getVertex2() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "vertex2"),
+ object.getVertex2(), DirectPositionAdapter.class, namespaces);
+ }
+ if (object.getType() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "type").addTextContent(object.getType().toString()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingTooFewPointsErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingTooFewPointsErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..a325d9d5e060485f2c749afe60de3cd50656af46
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/RingTooFewPointsErrorAdapter.java
@@ -0,0 +1,27 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.RingTooFewPointsError;
+
+@XMLElement(name = "GE_R_TOO_FEW_POINTS", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class RingTooFewPointsErrorAdapter extends AbstractRingErrorAdapter {
+
+ @Override
+ public RingTooFewPointsError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new RingTooFewPointsError();
+ }
+
+ @Override
+ public Element createElement(RingTooFewPointsError object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_R_TOO_FEW_POINTS");
+ }
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SemanticAttributeMissingErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SemanticAttributeMissingErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..c47bcfc846a218138eca1d49167300601ee0605f
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SemanticAttributeMissingErrorAdapter.java
@@ -0,0 +1,69 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.SemanticAttributeMissingError;
+
+@XMLElement(name = "SE_ATTRIBUTE_MISSING", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class SemanticAttributeMissingErrorAdapter extends AbstractSemanticErrorAdapter {
+
+ @Override
+ public SemanticAttributeMissingError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new SemanticAttributeMissingError();
+ }
+
+ @Override
+ public void buildChildObject(SemanticAttributeMissingError object, QName name, Attributes attributes,
+ XMLReader reader) throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "childId":
+ reader.getTextContent().ifPresent(object::setChildId);
+ break;
+ case "attributeName":
+ reader.getTextContent().ifPresent(object::setAttributeName);
+ break;
+ case "generic":
+ reader.getTextContent().ifPresent(s -> object.setGeneric(Boolean.parseBoolean(s)));
+ break;
+ default:
+ throw new IllegalStateException(
+ "Cannot handle name " + name + " when building SemanticAttributeMissingError element");
+ }
+ }
+
+ @Override
+ public Element createElement(SemanticAttributeMissingError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "SE_ATTRIBUTE_MISSING");
+ }
+
+ @Override
+ public void writeChildElements(SemanticAttributeMissingError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getChildId() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "childId").addTextContent(object.getChildId()));
+ }
+ if (object.getAttributeName() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "attributeName")
+ .addTextContent(object.getAttributeName()));
+ }
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "generic")
+ .addTextContent(Boolean.toString(object.isGeneric())));
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SemanticAttributeWrongValueErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SemanticAttributeWrongValueErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..923bf5edbb65d828bd2c12954f9b4869441f8ef5
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SemanticAttributeWrongValueErrorAdapter.java
@@ -0,0 +1,71 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.SemanticAttributeWrongValueError;
+
+@XMLElement(name = "SE_ATTRIBUTE_WRONG_VALUE", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class SemanticAttributeWrongValueErrorAdapter
+ extends AbstractSemanticErrorAdapter {
+
+ @Override
+ public SemanticAttributeWrongValueError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new SemanticAttributeWrongValueError();
+ }
+
+ @Override
+ public void buildChildObject(SemanticAttributeWrongValueError object, QName name, Attributes attributes,
+ XMLReader reader) throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "childId":
+ reader.getTextContent().ifPresent(object::setChildId);
+ break;
+ case "attributeName":
+ reader.getTextContent().ifPresent(object::setAttributeName);
+ break;
+ case "generic":
+ reader.getTextContent().ifPresent(s -> object.setGeneric(Boolean.parseBoolean(s)));
+ break;
+ default:
+ throw new IllegalStateException(
+ "Cannot handle name " + name + " when building SemanticAttributeWrongValueError element");
+ }
+ }
+
+ @Override
+ public Element createElement(SemanticAttributeWrongValueError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "SE_ATTRIBUTE_WRONG_VALUE");
+ }
+
+ @Override
+ public void writeChildElements(SemanticAttributeWrongValueError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getChildId() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "childId").addTextContent(object.getChildId()));
+ }
+ if (object.getAttributeName() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "attributeName")
+ .addTextContent(object.getAttributeName()));
+ }
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "generic")
+ .addTextContent(Boolean.toString(object.isGeneric())));
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidNotClosedErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidNotClosedErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..54c7760fa66b16355e9b8e92e8024d00bc0fa62a
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidNotClosedErrorAdapter.java
@@ -0,0 +1,57 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.EdgeListPropertyAdapter;
+import de.hft.stuttgart.quality.model.types.SolidNotClosedError;
+
+@XMLElement(name = "GE_S_NOT_CLOSED", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class SolidNotClosedErrorAdapter extends AbstractSolidErrorAdapter {
+
+ @Override
+ public SolidNotClosedError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new SolidNotClosedError();
+ }
+
+ @Override
+ public void buildChildObject(SolidNotClosedError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "edges":
+ object.setEdges(reader.getObjectUsingBuilder(EdgeListPropertyAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(SolidNotClosedError object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_S_NOT_CLOSED");
+ }
+
+ @Override
+ public void writeChildElements(SolidNotClosedError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getEdges() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "edges"), object.getEdges(),
+ EdgeListPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidSelfIntersectionErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidSelfIntersectionErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0491cf97e28b8f97ac800a1b8265aab686ea775
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidSelfIntersectionErrorAdapter.java
@@ -0,0 +1,64 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.SolidSelfIntersectionError;
+
+@XMLElement(name = "GE_S_SELF_INTERSECTION", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class SolidSelfIntersectionErrorAdapter extends AbstractSolidErrorAdapter {
+
+ @Override
+ public SolidSelfIntersectionError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new SolidSelfIntersectionError();
+ }
+
+ @Override
+ public void buildChildObject(SolidSelfIntersectionError object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "polygonId1":
+ reader.getTextContent().ifPresent(object::setPolygonId1);
+ break;
+ case "polygonId2":
+ reader.getTextContent().ifPresent(object::setPolygonId2);
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(SolidSelfIntersectionError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_S_SELF_INTERSECTION");
+ }
+
+ @Override
+ public void writeChildElements(SolidSelfIntersectionError object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getPolygonId1() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "polygonId1").addTextContent(object.getPolygonId1()));
+ }
+ if (object.getPolygonId2() != null) {
+ writer.writeElement(
+ Element.of(QualityADEModule.NAMESPACE_URI, "polygonId2").addTextContent(object.getPolygonId2()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidTooFewPolygonsErrorAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidTooFewPolygonsErrorAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..7588b418b24e9e4415f826d0852078faedb47376
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/SolidTooFewPolygonsErrorAdapter.java
@@ -0,0 +1,28 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.model.types.SolidTooFewPolygonsError;
+
+@XMLElement(name = "GE_S_TOO_FEW_POLYGONS", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class SolidTooFewPolygonsErrorAdapter extends AbstractSolidErrorAdapter {
+
+ @Override
+ public SolidTooFewPolygonsError createObject(QName name, Object parent) throws ObjectBuildException {
+ return new SolidTooFewPolygonsError();
+ }
+
+ @Override
+ public Element createElement(SolidTooFewPolygonsError object, Namespaces namespaces)
+ throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "GE_S_TOO_FEW_POLYGONS");
+ }
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/StatisticsAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/StatisticsAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..faa53f6fdd91abad3c52bbe0f4ed6005680d9d1a
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/StatisticsAdapter.java
@@ -0,0 +1,102 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+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)
+public class StatisticsAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public Statistics createObject(QName name, Object parent) throws ObjectBuildException {
+ return new Statistics();
+ }
+
+ @Override
+ public void buildChildObject(Statistics object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "numErrorBuildings":
+ object.setNumErrorBuildings(reader.getObjectUsingBuilder(FeatureStatisticsPropertyAdapter.class));
+ break;
+ case "numErrorVegetation":
+ object.setNumErrorVegetation(reader.getObjectUsingBuilder(FeatureStatisticsPropertyAdapter.class));
+ break;
+ case "numErrorLandObjects":
+ object.setNumErrorLandObjects(reader.getObjectUsingBuilder(FeatureStatisticsPropertyAdapter.class));
+ break;
+ case "numErrorBridgeObjects":
+ object.setNumErrorBridgeObjects(reader.getObjectUsingBuilder(FeatureStatisticsPropertyAdapter.class));
+ break;
+ case "numErrorWaterObjects":
+ object.setNumErrorWaterObjects(reader.getObjectUsingBuilder(FeatureStatisticsPropertyAdapter.class));
+ break;
+ case "numErrorTransportation":
+ object.setNumErrorTransportation(reader.getObjectUsingBuilder(FeatureStatisticsPropertyAdapter.class));
+ break;
+ case "error":
+ object.getErrors().add(reader.getObjectUsingBuilder(ErrorPropertyAdapter.class));
+ break;
+ 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");
+ }
+
+ @Override
+ public void writeChildElements(Statistics object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getNumErrorBuildings() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "numErrorBuildings"),
+ object.getNumErrorBuildings(), FeatureStatisticsPropertyAdapter.class, namespaces);
+ }
+ if (object.getNumErrorVegetation() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "numErrorVegetation"),
+ object.getNumErrorVegetation(), FeatureStatisticsPropertyAdapter.class, namespaces);
+ }
+ if (object.getNumErrorLandObjects() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "numErrorLandObjects"),
+ object.getNumErrorLandObjects(), FeatureStatisticsPropertyAdapter.class, namespaces);
+ }
+ if (object.getNumErrorBridgeObjects() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "numErrorBridgeObjects"),
+ object.getNumErrorBridgeObjects(), FeatureStatisticsPropertyAdapter.class, namespaces);
+ }
+ if (object.getNumErrorWaterObjects() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "numErrorWaterObjects"),
+ object.getNumErrorWaterObjects(), FeatureStatisticsPropertyAdapter.class, namespaces);
+ }
+ if (object.getNumErrorTransportation() != null) {
+ 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);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd347f05475f03db9ca84a70e40a5c87afca47e1
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationAdapter.java
@@ -0,0 +1,82 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.citygml4j.xml.adapter.core.AbstractFeatureAdapter;
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.StatisticsPropertyAdapter;
+import de.hft.stuttgart.quality.adapter.properties.ValidationPlanPropertyAdapter;
+import de.hft.stuttgart.quality.model.types.Validation;
+
+@XMLElement(name = "Validation", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class ValidationAdapter extends AbstractFeatureAdapter {
+
+ private static final ZonedDateTimeAdapter DATE_TIME_ADAPTER = new ZonedDateTimeAdapter();
+
+ @Override
+ public Validation createObject(QName name, Object parent) throws ObjectBuildException {
+ return new Validation();
+ }
+
+ @Override
+ public void buildChildObject(Validation object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "validationDate":
+ reader.getTextContent().ifPresent(s -> object.setValidationDate(DATE_TIME_ADAPTER.fromString(s)));
+ break;
+ case "validationSoftware":
+ reader.getTextContent().ifPresent(object::setValidationSoftware);
+ break;
+ case "statistics":
+ object.setStatistics(reader.getObjectUsingBuilder(StatisticsPropertyAdapter.class));
+ break;
+ case "validationPlan":
+ object.setValidationPlan(reader.getObjectUsingBuilder(ValidationPlanPropertyAdapter.class));
+ break;
+ default:
+ super.buildChildObject(object, name, attributes, reader);
+ }
+ }
+
+ @Override
+ public Element createElement(Validation object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "Validation");
+ }
+
+ @Override
+ public void writeChildElements(Validation object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ super.writeChildElements(object, namespaces, writer);
+ if (object.getValidationDate() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "validationDate")
+ .addTextContent(DATE_TIME_ADAPTER.toString(object.getValidationDate())));
+ }
+ if (object.getValidationSoftware() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "validationSoftware")
+ .addTextContent(object.getValidationSoftware()));
+ }
+ if (object.getStatistics() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "statistics"),
+ object.getStatistics(), StatisticsPropertyAdapter.class, namespaces);
+ }
+ if (object.getValidationPlan() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "validationPlan"),
+ object.getValidationPlan(), ValidationPlanPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationPlanAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationPlanAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..b84f85e2098255b7861addfdc353033d8d51ac2e
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationPlanAdapter.java
@@ -0,0 +1,75 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.FilterPropertyAdapter;
+import de.hft.stuttgart.quality.adapter.properties.GlobalParametersPropertyAdapter;
+import de.hft.stuttgart.quality.adapter.properties.RequirementPropertyAdapter;
+import de.hft.stuttgart.quality.model.properties.RequirementProperty;
+import de.hft.stuttgart.quality.model.types.ValidationPlan;
+
+@XMLElement(name = "ValidationPlan", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class ValidationPlanAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public ValidationPlan createObject(QName name, Object parent) throws ObjectBuildException {
+ return new ValidationPlan();
+ }
+
+ @Override
+ public void buildChildObject(ValidationPlan object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "globalParameters":
+ object.setGlobalParameters(reader.getObjectUsingBuilder(GlobalParametersPropertyAdapter.class));
+ break;
+ case "filter":
+ object.setFilter(reader.getObjectUsingBuilder(FilterPropertyAdapter.class));
+ break;
+ case "requirement":
+ object.getRequirements().add(reader.getObjectUsingBuilder(RequirementPropertyAdapter.class));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building ValidationPlan element");
+ }
+ }
+
+ @Override
+ public Element createElement(ValidationPlan object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "ValidationPlan");
+ }
+
+ @Override
+ public void writeChildElements(ValidationPlan object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getGlobalParameters() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "globalParameters"),
+ object.getGlobalParameters(), GlobalParametersPropertyAdapter.class, namespaces);
+ }
+ if (object.getFilter() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "filter"), object.getFilter(),
+ FilterPropertyAdapter.class, namespaces);
+ }
+ for (RequirementProperty req : object.getRequirements()) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "requirement"), req,
+ RequirementPropertyAdapter.class, namespaces);
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationResultAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationResultAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e65ca926bf906a48ce5cfd43970542deb35b314
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ValidationResultAdapter.java
@@ -0,0 +1,75 @@
+package de.hft.stuttgart.quality.adapter.types;
+
+import javax.xml.namespace.QName;
+
+import org.xmlobjects.annotation.XMLElement;
+import org.xmlobjects.builder.ObjectBuildException;
+import org.xmlobjects.builder.ObjectBuilder;
+import org.xmlobjects.gml.adapter.base.ReferenceAdapter;
+import org.xmlobjects.serializer.ObjectSerializeException;
+import org.xmlobjects.serializer.ObjectSerializer;
+import org.xmlobjects.stream.XMLReadException;
+import org.xmlobjects.stream.XMLReader;
+import org.xmlobjects.stream.XMLWriteException;
+import org.xmlobjects.stream.XMLWriter;
+import org.xmlobjects.xml.Attributes;
+import org.xmlobjects.xml.Element;
+import org.xmlobjects.xml.Namespaces;
+
+import de.hft.stuttgart.quality.QualityADEModule;
+import de.hft.stuttgart.quality.adapter.properties.AbstractErrorPropertyAdapter;
+import de.hft.stuttgart.quality.model.enums.ResultType;
+import de.hft.stuttgart.quality.model.properties.AbstractErrorProperty;
+import de.hft.stuttgart.quality.model.types.ValidationResult;
+
+@XMLElement(name = "ValidationResult", namespaceURI = QualityADEModule.NAMESPACE_URI)
+public class ValidationResultAdapter implements ObjectBuilder, ObjectSerializer {
+
+ @Override
+ public ValidationResult createObject(QName name, Object parent) throws ObjectBuildException {
+ return new ValidationResult();
+ }
+
+ @Override
+ public void buildChildObject(ValidationResult object, QName name, Attributes attributes, XMLReader reader)
+ throws ObjectBuildException, XMLReadException {
+ if (!QualityADEModule.NAMESPACE_URI.equals(name.getNamespaceURI())) {
+ return;
+ }
+ switch (name.getLocalPart()) {
+ case "validationPlanID":
+ object.setValidationPlanID(reader.getObjectUsingBuilder(ReferenceAdapter.class));
+ break;
+ case "error":
+ object.getErrors().add(reader.getObjectUsingBuilder(AbstractErrorPropertyAdapter.class));
+ break;
+ case "resultType":
+ reader.getTextContent().ifPresent(s -> object.setResultType(ResultType.valueOf(s)));
+ break;
+ default:
+ throw new IllegalStateException("Cannot handle name " + name + " when building ValidationResult element");
+ }
+ }
+
+ @Override
+ public Element createElement(ValidationResult object, Namespaces namespaces) throws ObjectSerializeException {
+ return Element.of(QualityADEModule.NAMESPACE_URI, "ValidationResult");
+ }
+
+ @Override
+ public void writeChildElements(ValidationResult object, Namespaces namespaces, XMLWriter writer)
+ throws ObjectSerializeException, XMLWriteException {
+ if (object.getValidationPlanID() != null) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "validationPlanID"),
+ object.getValidationPlanID(), ReferenceAdapter.class, namespaces);
+ }
+ for (AbstractErrorProperty err : object.getErrors()) {
+ writer.writeElementUsingSerializer(Element.of(QualityADEModule.NAMESPACE_URI, "error"), err,
+ AbstractErrorPropertyAdapter.class, namespaces);
+ }
+ if (object.getResultType() != null) {
+ writer.writeElement(Element.of(QualityADEModule.NAMESPACE_URI, "resultType")
+ .addTextContent(object.getResultType().toString()));
+ }
+ }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/ZonedDateTimeAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ZonedDateTimeAdapter.java
similarity index 71%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/ZonedDateTimeAdapter.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ZonedDateTimeAdapter.java
index bf9101cd0aa816982b9f18c1858474de3b8d8fb1..5a66e344a0aaa5b679ce36188caa840c28900a06 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/ZonedDateTimeAdapter.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/adapter/types/ZonedDateTimeAdapter.java
@@ -1,5 +1,5 @@
/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+ * 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.
@@ -13,19 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package de.hft.stuttgart.quality.marshaller;
+package de.hft.stuttgart.quality.adapter.types;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
+public class ZonedDateTimeAdapter {
-public class ZonedDateTimeAdapter extends XmlAdapter {
-
- @Override
- public ZonedDateTime unmarshal(String v) throws Exception {
+ public ZonedDateTime fromString(String v) {
try {
return ZonedDateTime.from(DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(v));
} catch (Exception e) {
@@ -33,11 +30,8 @@ public class ZonedDateTimeAdapter extends XmlAdapter {
}
}
- @Override
- public String marshal(ZonedDateTime v) throws Exception {
+ public String toString(ZonedDateTime v) {
return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(v);
}
-
-
}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java
deleted file mode 100644
index cd0528a760628127453cad9dc063bf21519bfec4..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java
+++ /dev/null
@@ -1,412 +0,0 @@
-/*-
- * 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.marshaller;
-
-import java.util.List;
-import java.util.concurrent.locks.ReentrantLock;
-
-import javax.xml.bind.JAXBElement;
-
-import org.citygml4j.builder.jaxb.marshal.citygml.ade.ADEMarshallerHelper;
-import org.citygml4j.model.citygml.ade.binding.ADEMarshaller;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.util.mapper.TypeMapper;
-
-import de.hft.stuttgart.quality.model.AllPolygonsWrongOrientation;
-import de.hft.stuttgart.quality.model.AttributeMissing;
-import de.hft.stuttgart.quality.model.AttributeWrongValue;
-import de.hft.stuttgart.quality.model.ConsecutivePointsSame;
-import de.hft.stuttgart.quality.model.Edge;
-import de.hft.stuttgart.quality.model.HoleOutside;
-import de.hft.stuttgart.quality.model.InnerRingsNested;
-import de.hft.stuttgart.quality.model.InteriorDisconnected;
-import de.hft.stuttgart.quality.model.IntersectingRings;
-import de.hft.stuttgart.quality.model.MultipleConnectedComponents;
-import de.hft.stuttgart.quality.model.NonManifoldEdge;
-import de.hft.stuttgart.quality.model.NonManifoldVertex;
-import de.hft.stuttgart.quality.model.NonPlanarDistancePlane;
-import de.hft.stuttgart.quality.model.NonPlanarNormalsDeviation;
-import de.hft.stuttgart.quality.model.OrientationRingsSame;
-import de.hft.stuttgart.quality.model.PolygonWrongOrientation;
-import de.hft.stuttgart.quality.model.RingNotClosed;
-import de.hft.stuttgart.quality.model.RingSelfIntersection;
-import de.hft.stuttgart.quality.model.SolidNotClosed;
-import de.hft.stuttgart.quality.model.SolidSelfIntersection;
-import de.hft.stuttgart.quality.model.TooFewPoints;
-import de.hft.stuttgart.quality.model.TooFewPolygons;
-import de.hft.stuttgart.quality.model.Validation;
-import de.hft.stuttgart.quality.model.ValidationError;
-import de.hft.stuttgart.quality.model.ValidationResult;
-import de.hft.stuttgart.quality.model.jaxb.AllPolygonsWrongOrientationType;
-import de.hft.stuttgart.quality.model.jaxb.AttributeMissingType;
-import de.hft.stuttgart.quality.model.jaxb.AttributeWrongValueType;
-import de.hft.stuttgart.quality.model.jaxb.ConsecutivePointsSameType;
-import de.hft.stuttgart.quality.model.jaxb.EdgeType;
-import de.hft.stuttgart.quality.model.jaxb.HoleOutsideType;
-import de.hft.stuttgart.quality.model.jaxb.InnerRingsNestedType;
-import de.hft.stuttgart.quality.model.jaxb.InteriorDisconnectedType;
-import de.hft.stuttgart.quality.model.jaxb.IntersectingRingsType;
-import de.hft.stuttgart.quality.model.jaxb.MultipleConnectedComponentsType;
-import de.hft.stuttgart.quality.model.jaxb.NonManifoldEdgeType;
-import de.hft.stuttgart.quality.model.jaxb.NonManifoldVertexType;
-import de.hft.stuttgart.quality.model.jaxb.NonPlanarDistancePlaneType;
-import de.hft.stuttgart.quality.model.jaxb.NonPlanarNormalsDeviationType;
-import de.hft.stuttgart.quality.model.jaxb.ObjectFactory;
-import de.hft.stuttgart.quality.model.jaxb.OrientationRingsSameType;
-import de.hft.stuttgart.quality.model.jaxb.PolygonWrongOrientationType;
-import de.hft.stuttgart.quality.model.jaxb.RingNotClosedType;
-import de.hft.stuttgart.quality.model.jaxb.RingSelfIntersectionType;
-import de.hft.stuttgart.quality.model.jaxb.SolidNotClosedType;
-import de.hft.stuttgart.quality.model.jaxb.SolidSelfIntersectionType;
-import de.hft.stuttgart.quality.model.jaxb.TooFewPointsType;
-import de.hft.stuttgart.quality.model.jaxb.TooFewPolygonsType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationErrorType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationResultType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationType;
-
-public class QualityAdeMarshaller implements ADEMarshaller {
-
- private final ReentrantLock lock = new ReentrantLock();
- private final ObjectFactory factory = new ObjectFactory();
- private TypeMapper> elementMapper;
- private TypeMapper