aboutsummaryrefslogtreecommitdiffstats
path: root/models-tosca/src/main
diff options
context:
space:
mode:
authorliamfallon <liam.fallon@est.tech>2021-03-02 10:55:31 +0000
committerliamfallon <liam.fallon@est.tech>2021-03-03 18:09:26 +0000
commited11e882d9128616156a2be08744e5a9bdb01111 (patch)
treeeaa79473e7dea79813062dcfa31330a8722233da /models-tosca/src/main
parentfcbf3698fa3e3fbc6ea3364d80d4a3f3a8d37650 (diff)
Refactor models for common type handling
Currently we have handling for "type" and "type_version" on TOSCA Policy class. However, the concept of a "type" and "type_version" also exists on the ToscaCapabilityAssignment, the ToscaNodeTemplate, and the ToscaRequriement classes. This review makes the type handling on Policy generic, thus extending it to the other three types. Issue-ID: POLICY-2983 Change-Id: Ia20e3a8c485f4841257075df08e0784eac415770 Signed-off-by: liamfallon <liam.fallon@est.tech>
Diffstat (limited to 'models-tosca/src/main')
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaCapabilityAssignment.java26
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplate.java7
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java33
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaRequirement.java27
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaWithTypeAndObjectProperties.java (renamed from models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaWithObjectProperties.java)36
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java4
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java26
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java58
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java4
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaWithTypeAndStringProperties.java (renamed from models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaWithStringProperties.java)88
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java28
11 files changed, 189 insertions, 148 deletions
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaCapabilityAssignment.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaCapabilityAssignment.java
index 2d9cf9a39..11ffc044b 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaCapabilityAssignment.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaCapabilityAssignment.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2020 Nordix Foundation.
+ * Copyright (C) 2020-2021 Nordix Foundation.
* Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,16 +21,38 @@
package org.onap.policy.models.tosca.authorative.concepts;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
+import lombok.NonNull;
+import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
-public class ToscaCapabilityAssignment extends ToscaWithObjectProperties {
+@ToString(callSuper = true)
+public class ToscaCapabilityAssignment extends ToscaWithTypeAndObjectProperties {
private Map<String, Object> attributes;
private List<Object> occurrences;
+
+ /**
+ * Copy constructor.
+ *
+ * @param copyObject object to copy
+ */
+ public ToscaCapabilityAssignment(@NonNull ToscaCapabilityAssignment copyObject) {
+ super(copyObject);
+
+ if (copyObject.attributes != null) {
+ attributes = new LinkedHashMap<>(copyObject.attributes);
+ }
+
+ if (copyObject.occurrences != null) {
+ occurrences = new ArrayList<>(copyObject.occurrences);
+ }
+ }
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplate.java
index c4bc84cd8..c95836de6 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplate.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplate.java
@@ -31,12 +31,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.NonNull;
+import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
-public class ToscaNodeTemplate extends ToscaWithObjectProperties {
- private String type;
+@ToString(callSuper = true)
+public class ToscaNodeTemplate extends ToscaWithTypeAndObjectProperties {
private List<Map<String, ToscaRequirement>> requirements;
private Map<String, ToscaCapabilityAssignment> capabilities;
@@ -48,8 +49,6 @@ public class ToscaNodeTemplate extends ToscaWithObjectProperties {
public ToscaNodeTemplate(@NonNull ToscaNodeTemplate copyObject) {
super(copyObject);
- this.type = copyObject.type;
-
this.requirements = (copyObject.requirements != null ? new ArrayList<>(copyObject.requirements) : null);
this.capabilities = (copyObject.capabilities != null ? new LinkedHashMap<>(copyObject.capabilities) : null);
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java
index b3a38050a..00d783d2d 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java
@@ -23,8 +23,6 @@
package org.onap.policy.models.tosca.authorative.concepts;
-import com.google.gson.annotations.SerializedName;
-import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@@ -40,40 +38,13 @@ import lombok.ToString;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@ToString(callSuper = true)
-public class ToscaPolicy extends ToscaWithObjectProperties {
- private String type;
-
- @ApiModelProperty(name = "type_version")
- @SerializedName("type_version")
- private String typeVersion;
-
+public class ToscaPolicy extends ToscaWithTypeAndObjectProperties {
/**
* Copy constructor.
*
- * @param copyObject the obejct to copy from.
+ * @param copyObject object to copy
*/
public ToscaPolicy(@NonNull ToscaPolicy copyObject) {
super(copyObject);
-
- this.type = copyObject.type;
- this.typeVersion = copyObject.typeVersion;
- }
-
- /**
- * Gets the identifier for this policy.
- *
- * @return this policy's identifier
- */
- public ToscaConceptIdentifier getIdentifier() {
- return new ToscaConceptIdentifier(getName(), getVersion());
- }
-
- /**
- * Gets the type identifier for this policy.
- *
- * @return this policy's type identifier
- */
- public ToscaConceptIdentifier getTypeIdentifier() {
- return new ToscaConceptIdentifier(getType(), getTypeVersion());
}
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaRequirement.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaRequirement.java
index 166b81174..d2c3b83a3 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaRequirement.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaRequirement.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2020 Nordix Foundation.
+ * Copyright (C) 2020-2021 Nordix Foundation.
* Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,15 +21,38 @@
package org.onap.policy.models.tosca.authorative.concepts;
+import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
-public class ToscaRequirement extends ToscaWithObjectProperties {
+@NoArgsConstructor
+@ToString(callSuper = true)
+public class ToscaRequirement extends ToscaWithTypeAndObjectProperties {
private String capability;
private String node;
private String relationship;
private List<Object> occurrences;
+
+ /**
+ * Copy constructor.
+ *
+ * @param copyObject object to copy
+ */
+ public ToscaRequirement(@NonNull ToscaRequirement copyObject) {
+ super(copyObject);
+
+ this.capability = copyObject.capability;
+ this.node = copyObject.node;
+ this.relationship = copyObject.relationship;
+
+ if (copyObject.occurrences != null) {
+ occurrences = new ArrayList<>(copyObject.occurrences);
+ }
+ }
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaWithObjectProperties.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaWithTypeAndObjectProperties.java
index f6cf24f61..0bcb1cf54 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaWithObjectProperties.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaWithTypeAndObjectProperties.java
@@ -1,6 +1,7 @@
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,6 +21,8 @@
package org.onap.policy.models.tosca.authorative.concepts;
+import com.google.gson.annotations.SerializedName;
+import io.swagger.annotations.ApiModelProperty;
import java.util.LinkedHashMap;
import java.util.Map;
import lombok.Data;
@@ -36,19 +39,46 @@ import lombok.ToString;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@ToString
-public class ToscaWithObjectProperties extends ToscaEntity {
+public class ToscaWithTypeAndObjectProperties extends ToscaEntity {
+ private String type;
+
+ @ApiModelProperty(name = "type_version")
+ @SerializedName("type_version")
+ private String typeVersion;
+
private Map<String, Object> properties;
/**
- * Cop[y constructor.
+ * Copy constructor.
*
* @param copyObject object to copy
*/
- public ToscaWithObjectProperties(@NonNull ToscaWithObjectProperties copyObject) {
+ public ToscaWithTypeAndObjectProperties(@NonNull ToscaWithTypeAndObjectProperties copyObject) {
super(copyObject);
+ this.type = copyObject.type;
+ this.typeVersion = copyObject.typeVersion;
+
if (copyObject.properties != null) {
properties = new LinkedHashMap<>(copyObject.properties);
}
}
+
+ /**
+ * Gets the identifier for this policy.
+ *
+ * @return this policy's identifier
+ */
+ public ToscaConceptIdentifier getIdentifier() {
+ return new ToscaConceptIdentifier(getName(), getVersion());
+ }
+
+ /**
+ * Gets the type identifier for this policy.
+ *
+ * @return this policy's type identifier
+ */
+ public ToscaConceptIdentifier getTypeIdentifier() {
+ return new ToscaConceptIdentifier(getType(), getTypeVersion());
+ }
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java
index bb5cf5a73..76508dabe 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2020 Nordix Foundation.
+ * Copyright (C) 2020-2021 Nordix Foundation.
* Modifications Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -50,7 +50,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityAssignme
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Data
@EqualsAndHashCode(callSuper = false)
-public class JpaToscaCapabilityAssignment extends JpaToscaWithStringProperties<ToscaCapabilityAssignment> {
+public class JpaToscaCapabilityAssignment extends JpaToscaWithTypeAndStringProperties<ToscaCapabilityAssignment> {
private static final long serialVersionUID = 1675770231921107988L;
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java
index 9507a9d2f..f6cfc1258 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2020 Nordix Foundation.
+ * Copyright (C) 2020-2021 Nordix Foundation.
* Modifications Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,7 +26,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.CascadeType;
-import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
@@ -39,8 +38,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
import org.apache.commons.lang3.ObjectUtils;
-import org.onap.policy.common.parameters.annotations.NotBlank;
-import org.onap.policy.common.parameters.annotations.NotNull;
import org.onap.policy.common.parameters.annotations.Valid;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
@@ -59,16 +56,11 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Data
@EqualsAndHashCode(callSuper = false)
-public class JpaToscaNodeTemplate extends JpaToscaWithStringProperties<ToscaNodeTemplate> {
+public class JpaToscaNodeTemplate extends JpaToscaWithTypeAndStringProperties<ToscaNodeTemplate> {
private static final long serialVersionUID = 1675770231921107988L;
private static final StandardCoder STANDARD_CODER = new StandardCoder();
- @Column
- @NotNull
- @NotBlank
- private String type;
-
// formatter:off
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "requirementsName", referencedColumnName = "name")
@@ -106,7 +98,7 @@ public class JpaToscaNodeTemplate extends JpaToscaWithStringProperties<ToscaNode
*/
public JpaToscaNodeTemplate(final JpaToscaNodeTemplate copyConcept) {
super(copyConcept);
- this.type = copyConcept.type;
+
this.requirements =
(copyConcept.requirements != null ? new JpaToscaRequirements(copyConcept.requirements) : null);
this.capabilities =
@@ -121,7 +113,6 @@ public class JpaToscaNodeTemplate extends JpaToscaWithStringProperties<ToscaNode
*/
public JpaToscaNodeTemplate(@NonNull final PfConceptKey key, final String type) {
super(key);
- this.type = type;
}
/**
@@ -139,8 +130,6 @@ public class JpaToscaNodeTemplate extends JpaToscaWithStringProperties<ToscaNode
super.setToscaEntity(toscaNodeTemplate);
super.toAuthorative();
- toscaNodeTemplate.setType(type);
-
if (requirements != null) {
toscaNodeTemplate.setRequirements(requirements.toAuthorative());
}
@@ -160,8 +149,6 @@ public class JpaToscaNodeTemplate extends JpaToscaWithStringProperties<ToscaNode
public void fromAuthorative(ToscaNodeTemplate toscaNodeTemplate) {
super.fromAuthorative(toscaNodeTemplate);
- type = toscaNodeTemplate.getType();
-
if (toscaNodeTemplate.getRequirements() != null) {
requirements = new JpaToscaRequirements();
requirements.fromAuthorative(toscaNodeTemplate.getRequirements());
@@ -212,8 +199,6 @@ public class JpaToscaNodeTemplate extends JpaToscaWithStringProperties<ToscaNode
public void clean() {
super.clean();
- type = type.trim();
-
if (requirements != null) {
requirements.clean();
}
@@ -236,11 +221,6 @@ public class JpaToscaNodeTemplate extends JpaToscaWithStringProperties<ToscaNode
final JpaToscaNodeTemplate other = (JpaToscaNodeTemplate) otherConcept;
- result = type.compareTo(other.type);
- if (result != 0) {
- return result;
- }
-
result = ObjectUtils.compare(requirements, other.requirements);
if (result != 0) {
return result;
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java
index dae3527ee..b33205c43 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java
@@ -3,7 +3,7 @@
* ONAP Policy Model
* ================================================================================
* Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,8 +25,6 @@ package org.onap.policy.models.tosca.simple.concepts;
import java.util.LinkedHashMap;
import java.util.List;
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
@@ -46,7 +44,6 @@ import org.onap.policy.models.base.PfConceptKey;
import org.onap.policy.models.base.PfKey;
import org.onap.policy.models.base.PfModelRuntimeException;
import org.onap.policy.models.base.PfUtils;
-import org.onap.policy.models.base.validation.annotations.VerifyKey;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
/**
@@ -60,7 +57,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Data
@EqualsAndHashCode(callSuper = true)
-public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
+public class JpaToscaPolicy extends JpaToscaWithTypeAndStringProperties<ToscaPolicy> {
private static final long serialVersionUID = 3265174757061982805L;
// Tags for metadata
@@ -69,23 +66,14 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
private static final StandardCoder STANDARD_CODER = new StandardCoder();
- // @formatter:off
- @Column
- @AttributeOverride(name = "name", column = @Column(name = "type_name"))
- @AttributeOverride(name = "version", column = @Column(name = "type_version"))
- @VerifyKey
- @NotNull
- private PfConceptKey type;
-
@ElementCollection
private List<@NotNull @Valid PfConceptKey> targets;
- // @formatter:on
/**
* The Default Constructor creates a {@link JpaToscaPolicy} object with a null key.
*/
public JpaToscaPolicy() {
- this(new PfConceptKey());
+ super();
}
/**
@@ -94,7 +82,7 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
* @param key the key
*/
public JpaToscaPolicy(@NonNull final PfConceptKey key) {
- this(key, new PfConceptKey());
+ super(key, new PfConceptKey());
}
/**
@@ -104,8 +92,7 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
* @param type the type of the policy
*/
public JpaToscaPolicy(@NonNull final PfConceptKey key, @NonNull final PfConceptKey type) {
- super(key);
- this.type = type;
+ super(key, type);
}
/**
@@ -115,7 +102,6 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
*/
public JpaToscaPolicy(@NonNull final JpaToscaPolicy copyConcept) {
super(copyConcept);
- this.type = new PfConceptKey(copyConcept.type);
this.targets = PfUtils.mapList(copyConcept.targets, PfConceptKey::new);
}
@@ -126,7 +112,6 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
*/
public JpaToscaPolicy(final ToscaPolicy authorativeConcept) {
super(new PfConceptKey());
- type = new PfConceptKey();
this.fromAuthorative(authorativeConcept);
}
@@ -136,14 +121,6 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
super.setToscaEntity(toscaPolicy);
super.toAuthorative();
- toscaPolicy.setType(type.getName());
-
- if (!PfKey.NULL_KEY_VERSION.equals(type.getVersion())) {
- toscaPolicy.setTypeVersion(type.getVersion());
- } else {
- toscaPolicy.setTypeVersion(null);
- }
-
return toscaPolicy;
}
@@ -151,22 +128,6 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
public void fromAuthorative(@NonNull final ToscaPolicy toscaPolicy) {
super.fromAuthorative(toscaPolicy);
- if (toscaPolicy.getType() != null) {
- type.setName(toscaPolicy.getType());
- } else {
- throw new PfModelRuntimeException(Response.Status.BAD_REQUEST,
- "PolicyType type not specified, the type of the PolicyType for this policy must be specified in "
- + "the type field");
- }
-
- if (toscaPolicy.getTypeVersion() != null) {
- type.setVersion(toscaPolicy.getTypeVersion());
- } else {
- throw new PfModelRuntimeException(Response.Status.BAD_REQUEST,
- "PolicyType version not specified, the version of the PolicyType for this policy must be specified"
- + " in the type_version field");
- }
-
// Add the property metadata if it doesn't exist already
if (toscaPolicy.getMetadata() == null) {
setMetadata(new LinkedHashMap<>());
@@ -201,8 +162,6 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
public List<PfKey> getKeys() {
final List<PfKey> keyList = super.getKeys();
- keyList.addAll(type.getKeys());
-
if (targets != null) {
keyList.addAll(targets);
}
@@ -214,8 +173,6 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
public void clean() {
super.clean();
- type.clean();
-
if (targets != null) {
for (PfConceptKey target : targets) {
target.clean();
@@ -245,11 +202,6 @@ public class JpaToscaPolicy extends JpaToscaWithStringProperties<ToscaPolicy> {
final JpaToscaPolicy other = (JpaToscaPolicy) otherConcept;
- result = type.compareTo(other.type);
- if (result != 0) {
- return result;
- }
-
return PfUtils.compareCollections(targets, other.targets);
}
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java
index eeae03dd7..20b6aff96 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java
@@ -3,7 +3,7 @@
* ONAP Requirement Model
* ================================================================================
* Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaRequirement;
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Data
@EqualsAndHashCode(callSuper = true)
-public class JpaToscaRequirement extends JpaToscaWithStringProperties<ToscaRequirement> {
+public class JpaToscaRequirement extends JpaToscaWithTypeAndStringProperties<ToscaRequirement> {
private static final long serialVersionUID = 2785481541573683089L;
private static final String AUTHORATIVE_UNBOUNDED_LITERAL = "UNBOUNDED";
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaWithStringProperties.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaWithTypeAndStringProperties.java
index afe4a84d1..1ba63cad5 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaWithStringProperties.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaWithTypeAndStringProperties.java
@@ -1,6 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,10 +22,14 @@
package org.onap.policy.models.tosca.simple.concepts;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Lob;
import javax.persistence.MappedSuperclass;
+import javax.ws.rs.core.Response;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
@@ -33,8 +38,11 @@ import org.onap.policy.common.parameters.annotations.NotNull;
import org.onap.policy.models.base.PfAuthorative;
import org.onap.policy.models.base.PfConcept;
import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfKey;
+import org.onap.policy.models.base.PfModelRuntimeException;
import org.onap.policy.models.base.PfUtils;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaWithObjectProperties;
+import org.onap.policy.models.base.validation.annotations.VerifyKey;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaWithTypeAndObjectProperties;
/**
* Class to represent JPA TOSCA classes containing property maps whose values are Strings.
@@ -42,31 +50,47 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaWithObjectProperti
@MappedSuperclass
@Data
@EqualsAndHashCode(callSuper = true)
-public abstract class JpaToscaWithStringProperties<T extends ToscaWithObjectProperties> extends JpaToscaEntityType<T>
- implements PfAuthorative<T> {
+public abstract class JpaToscaWithTypeAndStringProperties<T extends ToscaWithTypeAndObjectProperties>
+ extends JpaToscaEntityType<T> implements PfAuthorative<T> {
private static final long serialVersionUID = 2785481541573683089L;
+ @Column
+ @AttributeOverride(name = "name", column = @Column(name = "type_name"))
+ @AttributeOverride(name = "version", column = @Column(name = "type_version"))
+ @VerifyKey
+ @NotNull
+ private PfConceptKey type;
+
@ElementCollection
@Lob
private Map<@NotNull String, @NotNull String> properties;
/**
- * The Default Constructor creates a {@link JpaToscaWithStringProperties} object with
- * a null key.
+ * The Default Constructor creates a {@link JpaToscaWithTypeAndStringProperties} object with a null key.
*/
- protected JpaToscaWithStringProperties() {
+ protected JpaToscaWithTypeAndStringProperties() {
this(new PfConceptKey());
}
/**
- * The Key Constructor creates a {@link JpaToscaWithStringProperties} object with the
- * given concept key.
+ * The Key Constructor creates a {@link JpaToscaWithTypeAndStringProperties} object with the given concept key.
+ *
+ * @param key the key
+ */
+ protected JpaToscaWithTypeAndStringProperties(@NonNull final PfConceptKey key) {
+ this(key, new PfConceptKey());
+ }
+
+ /**
+ * The full Constructor creates a {@link JpaToscaWithTypeAndStringProperties} object with all mandatory fields.
*
* @param key the key
+ * @param type the type of the policy
*/
- protected JpaToscaWithStringProperties(@NonNull final PfConceptKey key) {
+ protected JpaToscaWithTypeAndStringProperties(@NonNull final PfConceptKey key, @NonNull final PfConceptKey type) {
super(key);
+ this.type = type;
}
/**
@@ -74,8 +98,9 @@ public abstract class JpaToscaWithStringProperties<T extends ToscaWithObjectProp
*
* @param copyConcept the concept to copy from
*/
- protected JpaToscaWithStringProperties(@NonNull final JpaToscaWithStringProperties<T> copyConcept) {
+ protected JpaToscaWithTypeAndStringProperties(@NonNull final JpaToscaWithTypeAndStringProperties<T> copyConcept) {
super(copyConcept);
+ this.type = new PfConceptKey(copyConcept.type);
this.properties = (copyConcept.properties != null ? new LinkedHashMap<>(copyConcept.properties) : null);
}
@@ -84,8 +109,9 @@ public abstract class JpaToscaWithStringProperties<T extends ToscaWithObjectProp
*
* @param authorativeConcept the authorative concept to copy from
*/
- protected JpaToscaWithStringProperties(final T authorativeConcept) {
+ protected JpaToscaWithTypeAndStringProperties(final T authorativeConcept) {
super(new PfConceptKey());
+ type = new PfConceptKey();
this.fromAuthorative(authorativeConcept);
}
@@ -93,6 +119,14 @@ public abstract class JpaToscaWithStringProperties<T extends ToscaWithObjectProp
public T toAuthorative() {
T tosca = super.toAuthorative();
+ tosca.setType(type.getName());
+
+ if (!PfKey.NULL_KEY_VERSION.equals(type.getVersion())) {
+ tosca.setTypeVersion(type.getVersion());
+ } else {
+ tosca.setTypeVersion(null);
+ }
+
tosca.setProperties(PfUtils.mapMap(properties, this::deserializePropertyValue));
return tosca;
@@ -102,6 +136,21 @@ public abstract class JpaToscaWithStringProperties<T extends ToscaWithObjectProp
public void fromAuthorative(@NonNull final T authorativeConcept) {
super.fromAuthorative(authorativeConcept);
+ if (authorativeConcept.getType() != null) {
+ type.setName(authorativeConcept.getType());
+ } else {
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST,
+ "Type not specified, the type of this TOSCA entity must be specified in the type field");
+ }
+
+ if (authorativeConcept.getTypeVersion() != null) {
+ type.setVersion(authorativeConcept.getTypeVersion());
+ } else {
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST,
+ "Version not specified, the version of this TOSCA entity must be specified"
+ + " in the type_version field");
+ }
+
properties = PfUtils.mapMap(authorativeConcept.getProperties(), this::serializePropertyValue);
}
@@ -121,11 +170,21 @@ public abstract class JpaToscaWithStringProperties<T extends ToscaWithObjectProp
*/
protected abstract String serializePropertyValue(Object propValue);
+ @Override
+ public List<PfKey> getKeys() {
+ final List<PfKey> keyList = super.getKeys();
+
+ keyList.addAll(type.getKeys());
+
+ return keyList;
+ }
@Override
public void clean() {
super.clean();
+ type.clean();
+
properties = PfUtils.mapMap(properties, String::trim);
}
@@ -155,7 +214,12 @@ public abstract class JpaToscaWithStringProperties<T extends ToscaWithObjectProp
}
@SuppressWarnings("unchecked")
- final JpaToscaWithStringProperties<T> other = (JpaToscaWithStringProperties<T>) otherConcept;
+ final JpaToscaWithTypeAndStringProperties<T> other = (JpaToscaWithTypeAndStringProperties<T>) otherConcept;
+
+ result = type.compareTo(other.type);
+ if (result != 0) {
+ return result;
+ }
return PfUtils.compareMaps(properties, other.properties);
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java
index b806e4152..5dda6ecfc 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019-2020 Nordix Foundation.
+ * Copyright (C) 2019-2021 Nordix Foundation.
* Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -145,7 +145,7 @@ public final class ToscaUtils {
* @param serviceTemplate the service template containing policy types to be checked
*/
public static void assertExist(final JpaToscaServiceTemplate serviceTemplate,
- final Function<JpaToscaServiceTemplate, String> checkerFunction) {
+ final Function<JpaToscaServiceTemplate, String> checkerFunction) {
String message = checkerFunction.apply(serviceTemplate);
if (message != null) {
throw new PfModelRuntimeException(Response.Status.NOT_FOUND, message);
@@ -158,7 +158,7 @@ public final class ToscaUtils {
* @param serviceTemplate the service template containing policy types to be checked
*/
public static boolean doExist(final JpaToscaServiceTemplate serviceTemplate,
- final Function<JpaToscaServiceTemplate, String> checkerFunction) {
+ final Function<JpaToscaServiceTemplate, String> checkerFunction) {
return checkerFunction.apply(serviceTemplate) == null;
}
@@ -220,8 +220,8 @@ public final class ToscaUtils {
* @return the entity set containing the ancestors of the incoming entity
*/
public static Collection<JpaToscaEntityType<ToscaEntity>> getEntityTypeAncestors(
- @NonNull PfConceptContainer<? extends PfConcept, ? extends PfNameVersion> entityTypes,
- @NonNull JpaToscaEntityType<?> entityType, @NonNull final BeanValidationResult result) {
+ @NonNull PfConceptContainer<? extends PfConcept, ? extends PfNameVersion> entityTypes,
+ @NonNull JpaToscaEntityType<?> entityType, @NonNull final BeanValidationResult result) {
PfConceptKey parentEntityTypeKey = entityType.getDerivedFrom();
if (parentEntityTypeKey == null || parentEntityTypeKey.getName().endsWith(ROOT_KEY_NAME_SUFFIX)) {
@@ -230,17 +230,17 @@ public final class ToscaUtils {
if (entityType.getKey().equals(parentEntityTypeKey)) {
result.addResult(new ObjectValidationResult("entity type", entityType.getKey().getId(),
- ValidationStatus.INVALID, "ancestor of itself"));
+ ValidationStatus.INVALID, "ancestor of itself"));
throw new PfModelRuntimeException(Response.Status.CONFLICT, result.getResult());
}
@SuppressWarnings("unchecked")
Set<JpaToscaEntityType<ToscaEntity>> ancestorEntitySet = (Set<JpaToscaEntityType<ToscaEntity>>) entityTypes
- .getAll(parentEntityTypeKey.getName(), parentEntityTypeKey.getVersion());
+ .getAll(parentEntityTypeKey.getName(), parentEntityTypeKey.getVersion());
Set<JpaToscaEntityType<ToscaEntity>> ancestorEntitySetToReturn = new HashSet<>(ancestorEntitySet);
if (ancestorEntitySet.isEmpty()) {
- result.addResult(new ObjectValidationResult("parent", parentEntityTypeKey.getId(),
- ValidationStatus.INVALID, Validated.NOT_FOUND));
+ result.addResult(new ObjectValidationResult("parent", parentEntityTypeKey.getId(), ValidationStatus.INVALID,
+ Validated.NOT_FOUND));
} else {
for (JpaToscaEntityType<?> filteredEntityType : ancestorEntitySet) {
ancestorEntitySetToReturn.addAll(getEntityTypeAncestors(entityTypes, filteredEntityType, result));
@@ -257,18 +257,18 @@ public final class ToscaUtils {
* @param entityVersion the version of the entity
*/
public static void getEntityTree(
- @NonNull final PfConceptContainer<? extends PfConcept, ? extends PfNameVersion> entityTypes,
- final String entityName, final String entityVersion) {
+ @NonNull final PfConceptContainer<? extends PfConcept, ? extends PfNameVersion> entityTypes,
+ final String entityName, final String entityVersion) {
BeanValidationResult result = new BeanValidationResult("entity", entityName);
@SuppressWarnings("unchecked")
Set<JpaToscaEntityType<?>> filteredEntitySet =
- (Set<JpaToscaEntityType<?>>) entityTypes.getAllNamesAndVersions(entityName, entityVersion);
+ (Set<JpaToscaEntityType<?>>) entityTypes.getAllNamesAndVersions(entityName, entityVersion);
Set<JpaToscaEntityType<?>> filteredEntitySetToReturn = new HashSet<>(filteredEntitySet);
for (JpaToscaEntityType<?> filteredEntityType : filteredEntitySet) {
filteredEntitySetToReturn
- .addAll(ToscaUtils.getEntityTypeAncestors(entityTypes, filteredEntityType, result));
+ .addAll(ToscaUtils.getEntityTypeAncestors(entityTypes, filteredEntityType, result));
}
if (!result.isValid()) {
@@ -276,6 +276,6 @@ public final class ToscaUtils {
}
entityTypes.getConceptMap().entrySet()
- .removeIf(entityEntry -> !filteredEntitySetToReturn.contains(entityEntry.getValue()));
+ .removeIf(entityEntry -> !filteredEntitySetToReturn.contains(entityEntry.getValue()));
}
}