Add copy constructor to ToscaNodeTemplate 89/116889/1
authorliamfallon <liam.fallon@est.tech>
Wed, 13 Jan 2021 10:04:43 +0000 (10:04 +0000)
committerliamfallon <liam.fallon@est.tech>
Thu, 14 Jan 2021 20:48:19 +0000 (20:48 +0000)
In order to support serialization and deserialization of
ToscaNodeTemplate objects onto DMaaP, we need a copy constructor on the
ToscaNodeTemplate object.

Issue-ID: POLICY-2971
Change-Id: If6dc6c54d5673cef46734a88d0a91ae868c11dcb
Signed-off-by: liamfallon <liam.fallon@est.tech>
models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplate.java
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplateTest.java [new file with mode: 0644]

index 343eb8e..d470447 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Model
  * ================================================================================
- * Copyright (C) 2020 Nordix Foundation.
+ * Copyright (C) 2020-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.
 
 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;
 
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -36,4 +39,19 @@ public class ToscaNodeTemplate extends ToscaEntity {
     private Map<String, Object> properties;
     private List<Map<String, ToscaRequirement>> requirements;
     private Map<String, ToscaCapabilityAssignment> capabilities;
+
+    /**
+     * Copy constructor.
+     *
+     * @param copyObject the obejct to copy from.
+     */
+    public ToscaNodeTemplate(@NonNull ToscaNodeTemplate copyObject) {
+        super(copyObject);
+
+        this.type = copyObject.type;
+
+        this.properties = (copyObject.properties != null ? new LinkedHashMap<>(copyObject.properties) : null);
+        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/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplateTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNodeTemplateTest.java
new file mode 100644 (file)
index 0000000..5cfc864
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * 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.
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import org.junit.Test;
+
+public class ToscaNodeTemplateTest {
+
+    @Test
+    public void testToscaNodeTemplate() {
+        assertThatThrownBy(() -> {
+            new ToscaNodeTemplate(null);
+        }).hasMessageMatching("copyObject is marked .*on.*ull but is null");
+
+        assertNotNull(new ToscaNodeTemplate(new ToscaNodeTemplate()));
+
+        ToscaNodeTemplate origNt = new ToscaNodeTemplate();
+
+        assertEquals(origNt, new ToscaNodeTemplate(origNt));
+
+        origNt.setProperties(new HashMap<>());
+        origNt.setCapabilities(new HashMap<>());
+        origNt.setRequirements(new ArrayList<>());
+        assertEquals(origNt, new ToscaNodeTemplate(origNt));
+    }
+}