summaryrefslogtreecommitdiffstats
path: root/model/context-model/src
diff options
context:
space:
mode:
authorliamfallon <liam.fallon@est.tech>2022-02-07 17:56:44 +0000
committerliamfallon <liam.fallon@est.tech>2022-02-08 18:39:03 +0000
commit59b90519eda3b95b0cfc49b6349a591c7d0c78e2 (patch)
tree810e07f7d5cf270582264c40245372f597c713a2 /model/context-model/src
parentdef44b294fa00bb5470e977eef9a05e5087035f0 (diff)
Remove JAXB and XML, use GSON for JSON
This review converst apex-pdp to use GSON for JSON handling. In order to preserve backward compatibility with the JAXB format of JSON, custom handling of maps was required. Therefore, the policy-common StandardCoder could not be used. There are a lot of small changes, removing annotations from concepts and tweaking of test data. However, this cleans up the code base so it is worth doing. Issue-ID: POLICY-1820 Change-Id: I213fa64f6d7f3f1df8d10f111d9fbedbe80f9fe0 Signed-off-by: liamfallon <liam.fallon@est.tech>
Diffstat (limited to 'model/context-model/src')
-rw-r--r--model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java15
-rw-r--r--model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbums.java39
-rw-r--r--model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextModel.java14
-rw-r--r--model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java15
-rw-r--r--model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchemas.java62
-rw-r--r--model/context-model/src/test/java/org/onap/policy/apex/model/contextmodel/handling/ApexContextModelTest.java5
-rw-r--r--model/context-model/src/test/resources/json/ContextModel.json156
7 files changed, 29 insertions, 277 deletions
diff --git a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java
index d7d8a1d96..db64f8847 100644
--- a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java
+++ b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java
@@ -23,11 +23,6 @@
package org.onap.policy.apex.model.contextmodel.concepts;
import java.util.List;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
@@ -66,11 +61,6 @@ import org.onap.policy.common.utils.validation.Assertions;
@ToString
@EqualsAndHashCode(callSuper = false)
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlRootElement(name = "apexContextAlbum", namespace = "http://www.onap.org/policy/apex-pdp")
-@XmlType(name = "AxContextAlbum", namespace = "http://www.onap.org/policy/apex-pdp", propOrder =
- { "key", "scope", "isWritable", "itemSchema" })
-
public class AxContextAlbum extends AxConcept {
private static final String SCOPE_STRING = "scope";
@@ -84,17 +74,12 @@ public class AxContextAlbum extends AxConcept {
/** The value of scope for a context album for which a scope has not been specified. */
public static final String SCOPE_UNDEFINED = "UNDEFINED";
- @XmlElement(name = "key", required = true)
private AxArtifactKey key;
-
- @XmlElement(name = SCOPE_STRING, required = true)
private String scope;
- @XmlElement(name = "isWritable", required = true)
@Setter
private boolean isWritable;
- @XmlElement(name = "itemSchema", required = true)
private AxArtifactKey itemSchema;
/**
diff --git a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbums.java b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbums.java
index 65247ab80..54e3ce44b 100644
--- a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbums.java
+++ b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbums.java
@@ -28,11 +28,6 @@ import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.Set;
import java.util.TreeMap;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@@ -61,18 +56,11 @@ import org.onap.policy.common.utils.validation.Assertions;
@Getter
@ToString
@EqualsAndHashCode(callSuper = false)
-
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "AxContextAlbums", namespace = "http://www.onap.org/policy/apex-pdp", propOrder =
- { "key", "albums" })
-
public final class AxContextAlbums extends AxConcept implements AxConceptGetter<AxContextAlbum> {
private static final long serialVersionUID = -4844259809024470975L;
- @XmlElement(name = "key", required = true)
private AxArtifactKey key;
- @XmlElement(name = "albums", required = true)
@Getter(AccessLevel.NONE)
private Map<AxArtifactKey, AxContextAlbum> albums;
@@ -120,25 +108,6 @@ public final class AxContextAlbums extends AxConcept implements AxConceptGetter<
}
/**
- * When a model is unmarshalled from disk or from the database, the context album map is returned as a raw hash map.
- * This method is called by JAXB after unmarshaling and is used to convert the hash map to a {@link NavigableMap} so
- * that it will work with the {@link AxConceptGetter} interface.
- *
- * @param unmarsaller the unmarshaler that is unmarshaling the model
- * @param parent the parent object of this object in the unmarshaler
- */
- public void afterUnmarshal(final Unmarshaller unmarsaller, final Object parent) {
- Assertions.argumentNotNull(unmarsaller, "unmarsaller should not be null");
- Assertions.argumentNotNull(parent, "parent should not be null");
-
- // The map must be navigable to allow name and version searching, unmarshaling returns a
- // hash map
- final NavigableMap<AxArtifactKey, AxContextAlbum> navigableAlbums = new TreeMap<>();
- navigableAlbums.putAll(albums);
- albums = navigableAlbums;
- }
-
- /**
* {@inheritDoc}.
*/
@Override
@@ -153,6 +122,14 @@ public final class AxContextAlbums extends AxConcept implements AxConceptGetter<
}
/**
+ * {@inheritDoc}.
+ */
+ @Override
+ public void buildReferences() {
+ albums.values().stream().forEach(album -> album.buildReferences());
+ }
+
+ /**
* Sets the key of the context album container.
*
* @param key the context album container key
diff --git a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextModel.java b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextModel.java
index e17149336..1effe8079 100644
--- a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextModel.java
+++ b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextModel.java
@@ -23,11 +23,6 @@
package org.onap.policy.apex.model.contextmodel.concepts;
import java.util.List;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
@@ -52,19 +47,10 @@ import org.onap.policy.common.utils.validation.Assertions;
@Getter
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
-
-@XmlRootElement(name = "apexContextModel", namespace = "http://www.onap.org/policy/apex-pdp")
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "AxContextModel", namespace = "http://www.onap.org/policy/apex-pdp",
- propOrder = { "schemas", "albums" })
-
public class AxContextModel extends AxModel {
private static final long serialVersionUID = 8800599637708309945L;
- @XmlElement(name = "schemas", required = true)
private AxContextSchemas schemas;
-
- @XmlElement(name = "albums", required = true)
private AxContextAlbums albums;
/**
diff --git a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java
index a1560c07b..61434ca67 100644
--- a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java
+++ b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java
@@ -23,11 +23,6 @@
package org.onap.policy.apex.model.contextmodel.concepts;
import java.util.List;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.ToString;
@@ -59,12 +54,6 @@ import org.onap.policy.common.utils.validation.Assertions;
*/
@Getter
@ToString
-
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlRootElement(name = "apexContextSchema", namespace = "http://www.onap.org/policy/apex-pdp")
-@XmlType(name = "AxContextSchema", namespace = "http://www.onap.org/policy/apex-pdp", propOrder =
- { "key", "schemaFlavour", "schemaDefinition" })
-
public class AxContextSchema extends AxConcept {
private static final String SCHEMA_FLAVOUR = "schemaFlavour";
private static final String WHITESPACE_REGEXP = "\\s+$";
@@ -80,13 +69,9 @@ public class AxContextSchema extends AxConcept {
/** The maximum permissible size of a schema definition. */
public static final int MAX_SCHEMA_SIZE = 32672; // The maximum size supported by Apache Derby
- @XmlElement(name = "key", required = true)
private AxArtifactKey key;
-
- @XmlElement(required = true)
private String schemaFlavour;
- @XmlElement(name = "schemaDefinition", required = true)
@Getter(AccessLevel.NONE)
private String schemaDefinition;
diff --git a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchemas.java b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchemas.java
index a5b56f244..5b79a3dcb 100644
--- a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchemas.java
+++ b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchemas.java
@@ -28,11 +28,6 @@ import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.Set;
import java.util.TreeMap;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@@ -60,18 +55,11 @@ import org.onap.policy.common.utils.validation.Assertions;
@Getter
@ToString
@EqualsAndHashCode(callSuper = false)
-
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "AxContextSchemas", namespace = "http://www.onap.org/policy/apex-pdp", propOrder =
- { "key", "schemas" })
-
public class AxContextSchemas extends AxConcept implements AxConceptGetter<AxContextSchema> {
private static final long serialVersionUID = -3203734282886453582L;
- @XmlElement(name = "key", required = true)
private AxArtifactKey key;
- @XmlElement(name = "schemas", required = true)
@Getter(AccessLevel.NONE)
private Map<AxArtifactKey, AxContextSchema> schemas;
@@ -105,7 +93,7 @@ public class AxContextSchemas extends AxConcept implements AxConceptGetter<AxCon
/**
* This Constructor creates a {@link AxContextSchemas} object with all its fields defined.
*
- * @param key the key of the context schema container
+ * @param key the key of the context schema container
* @param schemas a map of the schemas to insert in the context schema container
*/
public AxContextSchemas(final AxArtifactKey key, final Map<AxArtifactKey, AxContextSchema> schemas) {
@@ -119,22 +107,6 @@ public class AxContextSchemas extends AxConcept implements AxConceptGetter<AxCon
}
/**
- * When a model is unmarshalled from disk or from the database, the context schema map is returned as a raw hash
- * map. This method is called by JAXB after unmarshaling and is used to convert the hash map to a
- * {@link NavigableMap} so that it will work with the {@link AxConceptGetter} interface.
- *
- * @param unmarshaller the unmarshaler that is unmarshaling the model
- * @param parent the parent object of this object in the unmarshaler
- */
- public void afterUnmarshal(final Unmarshaller unmarshaller, final Object parent) {
- // The map must be navigable to allow name and version searching, unmarshaling returns a
- // hash map
- final NavigableMap<AxArtifactKey, AxContextSchema> navigableContextSchemas = new TreeMap<>();
- navigableContextSchemas.putAll(schemas);
- schemas = navigableContextSchemas;
- }
-
- /**
* {@inheritDoc}.
*/
@Override
@@ -146,6 +118,14 @@ public class AxContextSchemas extends AxConcept implements AxConceptGetter<AxCon
}
/**
+ * {@inheritDoc}.
+ */
+ @Override
+ public void buildReferences() {
+ schemas.values().stream().forEach(schema -> schema.buildReferences());
+ }
+
+ /**
* Sets the key of the context schema container.
*
* @param key the key of the container
@@ -185,30 +165,30 @@ public class AxContextSchemas extends AxConcept implements AxConceptGetter<AxCon
if (key.equals(AxArtifactKey.getNullKey())) {
result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
- "key is a null key"));
+ "key is a null key"));
}
result = key.validate(result);
if (schemas.size() == 0) {
result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
- "contextSchemas may not be empty"));
+ "contextSchemas may not be empty"));
} else {
for (final Entry<AxArtifactKey, AxContextSchema> contextSchemaEntry : schemas.entrySet()) {
if (contextSchemaEntry.getKey().equals(AxArtifactKey.getNullKey())) {
result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
- "key on schemas entry " + contextSchemaEntry.getKey()
- + " may not be the null key"));
+ "key on schemas entry " + contextSchemaEntry.getKey()
+ + " may not be the null key"));
} else if (contextSchemaEntry.getValue() == null) {
result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
- "value on schemas entry " + contextSchemaEntry.getKey() + " may not be null"));
+ "value on schemas entry " + contextSchemaEntry.getKey() + " may not be null"));
} else {
if (!contextSchemaEntry.getKey().equals(contextSchemaEntry.getValue().getKey())) {
result.addValidationMessage(
- new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
- "key on schemas entry " + contextSchemaEntry.getKey()
- + " does not equal entry key "
- + contextSchemaEntry.getValue().getKey()));
+ new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "key on schemas entry " + contextSchemaEntry.getKey()
+ + " does not equal entry key "
+ + contextSchemaEntry.getValue().getKey()));
}
result = contextSchemaEntry.getValue().validate(result);
@@ -247,7 +227,7 @@ public class AxContextSchemas extends AxConcept implements AxConceptGetter<AxCon
final Map<AxArtifactKey, AxContextSchema> newcontextSchemas = new TreeMap<>();
for (final Entry<AxArtifactKey, AxContextSchema> contextSchemasEntry : schemas.entrySet()) {
newcontextSchemas.put(new AxArtifactKey(contextSchemasEntry.getKey()),
- new AxContextSchema(contextSchemasEntry.getValue()));
+ new AxContextSchema(contextSchemasEntry.getValue()));
}
copy.setSchemasMap(newcontextSchemas);
@@ -302,7 +282,7 @@ public class AxContextSchemas extends AxConcept implements AxConceptGetter<AxCon
@Override
public AxContextSchema get(final String conceptKeyName, final String conceptKeyVersion) {
return new AxConceptGetterImpl<>((NavigableMap<AxArtifactKey, AxContextSchema>) schemas).get(conceptKeyName,
- conceptKeyVersion);
+ conceptKeyVersion);
}
/**
@@ -319,6 +299,6 @@ public class AxContextSchemas extends AxConcept implements AxConceptGetter<AxCon
@Override
public Set<AxContextSchema> getAll(final String conceptKeyName, final String conceptKeyVersion) {
return new AxConceptGetterImpl<>((NavigableMap<AxArtifactKey, AxContextSchema>) schemas).getAll(conceptKeyName,
- conceptKeyVersion);
+ conceptKeyVersion);
}
}
diff --git a/model/context-model/src/test/java/org/onap/policy/apex/model/contextmodel/handling/ApexContextModelTest.java b/model/context-model/src/test/java/org/onap/policy/apex/model/contextmodel/handling/ApexContextModelTest.java
index a18065ed9..998469bac 100644
--- a/model/context-model/src/test/java/org/onap/policy/apex/model/contextmodel/handling/ApexContextModelTest.java
+++ b/model/context-model/src/test/java/org/onap/policy/apex/model/contextmodel/handling/ApexContextModelTest.java
@@ -118,11 +118,6 @@ public class ApexContextModelTest {
}
@Test
- public void testModelWriteReadXml() throws Exception {
- testApexModel.testApexModelWriteReadXml();
- }
-
- @Test
public void testModelWriteReadJson() throws Exception {
testApexModel.testApexModelWriteReadJson();
}
diff --git a/model/context-model/src/test/resources/json/ContextModel.json b/model/context-model/src/test/resources/json/ContextModel.json
deleted file mode 100644
index 2c93ef1c2..000000000
--- a/model/context-model/src/test/resources/json/ContextModel.json
+++ /dev/null
@@ -1,156 +0,0 @@
-{
- "apexContextModel" : {
- "key" : {
- "name" : "contextModel",
- "version" : "0.0.1"
- },
- "keyInformation" : {
- "key" : {
- "name" : "KeyInfoMapKey",
- "version" : "0.0.1"
- },
- "keyInfoMap" : {
- "keyInfoEntry" : [ {
- "key" : {
- "name" : "StringType",
- "version" : "0.0.1"
- },
- "UUID" : "00000000-0000-0000-0000-000000000000",
- "description" : "axContextType0"
- }, {
- "key" : {
- "name" : "MapType",
- "version" : "0.0.1"
- },
- "UUID" : "00000000-0000-0000-0000-000000000001",
- "description" : "axContextType1"
- }, {
- "key" : {
- "name" : "contextMap0",
- "version" : "0.0.1"
- },
- "UUID" : "00000000-0000-0000-0000-000000000002",
- "description" : "contextMap0"
- }, {
- "key" : {
- "name" : "contextMap1",
- "version" : "0.0.1"
- },
- "UUID" : "00000000-0000-0000-0000-000000000003",
- "description" : "contextMap1"
- }, {
- "key" : {
- "name" : "context",
- "version" : "0.0.1"
- },
- "UUID" : "00000000-0000-0000-0000-000000000004",
- "description" : "axContext"
- }, {
- "key" : {
- "name" : "contextModel",
- "version" : "0.0.1"
- },
- "UUID" : "00000000-0000-0000-0000-000000000005",
- "description" : "contextModel"
- }, {
- "key" : {
- "name" : "KeyInfoMapKey",
- "version" : "0.0.1"
- },
- "UUID" : "00000000-0000-0000-0000-000000000006",
- "description" : "keyInformation"
- } ]
- }
- },
- "context" : {
- "key" : {
- "name" : "context",
- "version" : "0.0.1"
- },
- "contextMaps" : {
- "entry" : [ {
- "key" : "contextMap0",
- "value" : {
- "key" : {
- "name" : "contextMap0",
- "version" : "0.0.1"
- },
- "scope" : "APPLICATION",
- "mapType" : "BAG",
- "contextMap" : {
- "contextItem" : [ {
- "key" : "axContextItem0_0",
- "contextType" : {
- "key" : {
- "name" : "StringType",
- "version" : "0.0.1"
- },
- "javaType" : "org.onap.policy.apex.core.contextmodel.concepts.TestContextItem000"
- },
- "isWritable" : true,
- "valueString" : ""
- }, {
- "key" : "axContextItem0_1",
- "contextType" : {
- "key" : {
- "name" : "MapType",
- "version" : "0.0.1"
- },
- "javaType" : "org.onap.policy.apex.core.contextmodel.concepts.TestContextItem00A"
- },
- "isWritable" : true,
- "valueString" : ""
- }, {
- "key" : "axContextItem0_2",
- "contextType" : {
- "key" : {
- "name" : "StringType",
- "version" : "0.0.1"
- },
- "javaType" : "org.onap.policy.apex.core.contextmodel.concepts.TestContextItem000"
- },
- "isWritable" : true,
- "valueString" : ""
- }, {
- "key" : "axContextItem0_3",
- "contextType" : {
- "key" : {
- "name" : "MapType",
- "version" : "0.0.1"
- },
- "javaType" : "org.onap.policy.apex.core.contextmodel.concepts.TestContextItem00A"
- },
- "isWritable" : true,
- "valueString" : ""
- } ]
- }
- }
- }, {
- "key" : "contextMap1",
- "value" : {
- "key" : {
- "name" : "contextMap1",
- "version" : "0.0.1"
- },
- "scope" : "GLOBAL",
- "mapType" : "SAMETYPE",
- "templateContextItem" : {
- "key" : "axTemplateContextItem",
- "contextType" : {
- "key" : {
- "name" : "MapType",
- "version" : "0.0.1"
- },
- "javaType" : "org.onap.policy.apex.core.contextmodel.concepts.TestContextItem00A"
- },
- "isWritable" : true
- },
- "contextMap" : {
- "contextItem" : [ ]
- }
- }
- } ]
- }
- }
- }
-} \ No newline at end of file