aboutsummaryrefslogtreecommitdiffstats
path: root/models-base/src
diff options
context:
space:
mode:
Diffstat (limited to 'models-base/src')
-rw-r--r--models-base/src/main/java/org/onap/policy/models/base/PfAuthorative.java5
-rw-r--r--models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java150
-rw-r--r--models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java36
-rw-r--r--models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java47
-rw-r--r--models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyAuthorativeConcept.java52
-rw-r--r--models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConcept.java56
-rw-r--r--models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConceptContainer.java77
-rw-r--r--models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java21
-rw-r--r--models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConceptContainer.java2
9 files changed, 389 insertions, 57 deletions
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfAuthorative.java b/models-base/src/main/java/org/onap/policy/models/base/PfAuthorative.java
index fd35d20d0..b0610e4ea 100644
--- a/models-base/src/main/java/org/onap/policy/models/base/PfAuthorative.java
+++ b/models-base/src/main/java/org/onap/policy/models/base/PfAuthorative.java
@@ -37,7 +37,8 @@ public interface PfAuthorative<T> {
/**
* Set an instance of the persist concept to the equivalent values as the other concept.
+ *
+ * @param authorativeConcept the authorative concept
*/
- public void fromAuthorative(final T authorativeClass);
-
+ public void fromAuthorative(final T authorativeConcept);
}
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java b/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java
index 46094610a..e197e13a4 100644
--- a/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java
+++ b/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java
@@ -20,6 +20,9 @@
package org.onap.policy.models.base;
+import java.lang.reflect.ParameterizedType;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -41,25 +44,26 @@ import lombok.NonNull;
import org.onap.policy.common.utils.validation.Assertions;
import org.onap.policy.models.base.PfValidationResult.ValidationResult;
+// @formatter:off
/**
- * This class is a concept container and holds a map of concepts. The {@link PfConceptContainer}
- * class implements the helper methods of the {@link PfConceptGetter} interface to allow
- * {@link PfConceptContainer} instances to be retrieved by calling methods directly on this class
- * without referencing the contained map.
+ * This class is a concept container and holds a map of concepts. The {@link PfConceptContainer} class implements the
+ * helper methods of the {@link PfConceptGetter} interface to allow {@link PfConceptContainer} instances to be retrieved
+ * by calling methods directly on this class without referencing the contained map.
*
- * <p>Validation checks that the container key is not null. An error is issued if no concepts are
- * defined in the container. Each concept entry is checked to ensure that its key and value are not
- * null and that the key matches the key in the map value. Each concept entry is then validated
- * individually.
+ * <p>Validation checks that a container key is not null. An error is issued if no concepts are defined in a container.
+ * Each concept entry is checked to ensure that its key and value are not null and that the key matches the key in the
+ * map value. Each concept entry is then validated individually.
*
* @param C the concept being contained
*/
+//@formatter:on
@Entity
@Table(name = "PfConceptContainer")
@Data
@EqualsAndHashCode(callSuper = false)
-public class PfConceptContainer<C extends PfConcept> extends PfConcept implements PfConceptGetter<C> {
+public class PfConceptContainer<C extends PfConcept, A extends PfNameVersion> extends PfConcept
+ implements PfConceptGetter<C>, PfAuthorative<List<Map<String, A>>> {
private static final long serialVersionUID = -324211738823208318L;
@EmbeddedId
@@ -69,16 +73,16 @@ public class PfConceptContainer<C extends PfConcept> extends PfConcept implement
private Map<PfConceptKey, C> conceptMap;
/**
- * The Default Constructor creates a {@link PfConceptContainer} object with a null artifact key
- * and creates an empty concept map.
+ * The Default Constructor creates a {@link PfConceptContainer} object with a null artifact key and creates an empty
+ * concept map.
*/
public PfConceptContainer() {
this(new PfConceptKey());
}
/**
- * The Key Constructor creates a {@link PfConceptContainer} object with the given artifact key
- * and creates an empty concept map.
+ * The Key Constructor creates a {@link PfConceptContainer} object with the given artifact key and creates an empty
+ * concept map.
*
* @param key the concept key
*/
@@ -104,7 +108,7 @@ public class PfConceptContainer<C extends PfConcept> extends PfConcept implement
*
* @param copyConcept the concept to copy from
*/
- public PfConceptContainer(@NonNull final PfConceptContainer<C> copyConcept) {
+ public PfConceptContainer(@NonNull final PfConceptContainer<C, A> copyConcept) {
super(copyConcept);
}
@@ -120,6 +124,65 @@ public class PfConceptContainer<C extends PfConcept> extends PfConcept implement
}
@Override
+ public List<Map<String, A>> toAuthorative() {
+ Map<String, A> toscaPolicyMap = new LinkedHashMap<>();
+
+ for (Entry<PfConceptKey, C> conceptEntry : getConceptMap().entrySet()) {
+ @SuppressWarnings("unchecked")
+ PfAuthorative<A> authoritiveImpl = (PfAuthorative<A>) conceptEntry.getValue();
+ toscaPolicyMap.put(conceptEntry.getKey().getName(), authoritiveImpl.toAuthorative());
+ }
+
+ List<Map<String, A>> toscaPolicyMapList = new ArrayList<>();
+ toscaPolicyMapList.add(toscaPolicyMap);
+
+ return toscaPolicyMapList;
+ }
+
+ @Override
+ public void fromAuthorative(List<Map<String, A>> authorativeList) {
+ // Clear any existing map entries
+ conceptMap.clear();
+
+ // Concepts are in lists of maps
+ for (Map<String, A> incomingConceptMap : authorativeList) {
+ // Add the map entries one by one
+ for (Entry<String, A> incomingConceptEntry : incomingConceptMap.entrySet()) {
+ C jpaConcept = getConceptNewInstance();
+
+ // This cast allows us to call the fromAuthorative method
+ @SuppressWarnings("unchecked")
+ PfAuthorative<A> authoritiveImpl = (PfAuthorative<A>) jpaConcept;
+
+ if (incomingConceptEntry.getValue().getName() == null) {
+ incomingConceptEntry.getValue().setName(incomingConceptEntry.getKey());
+ }
+
+ // Set the key name and the rest of the values on the concept
+ authoritiveImpl.fromAuthorative(incomingConceptEntry.getValue());
+
+ // This cast gets the key of the concept
+ PfConceptKey conceptKey = (PfConceptKey) jpaConcept.getKey();
+
+ // Set the concept key of the concept
+ conceptKey.setName(incomingConceptEntry.getValue().getName());
+
+ if (incomingConceptEntry.getValue().getVersion() != null) {
+ conceptKey.setVersion(incomingConceptEntry.getValue().getVersion());
+ }
+
+ // After all that, save the map entry
+ conceptMap.put(conceptKey, jpaConcept);
+ }
+ }
+
+ if (conceptMap.isEmpty()) {
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST,
+ "An incoming list of concepts must have at least one entry");
+ }
+ }
+
+ @Override
public void clean() {
key.clean();
for (final Entry<PfConceptKey, C> conceptEntry : conceptMap.entrySet()) {
@@ -162,17 +225,19 @@ public class PfConceptContainer<C extends PfConcept> extends PfConcept implement
if (conceptEntry.getKey().equals(PfConceptKey.getNullKey())) {
result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
"key on concept entry " + conceptEntry.getKey() + " may not be the null key"));
- } else if (conceptEntry.getValue() == null) {
- result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
- "value on concept entry " + conceptEntry.getKey() + " may not be null"));
- } else if (!conceptEntry.getKey().equals(conceptEntry.getValue().getKey())) {
- result.addValidationMessage(new PfValidationMessage(key, this.getClass(),
- ValidationResult.INVALID, "key on concept entry key " + conceptEntry.getKey()
- + " does not equal concept value key " + conceptEntry.getValue().getKey()));
- result = conceptEntry.getValue().validate(result);
- } else {
- result = conceptEntry.getValue().validate(result);
- }
+ } else
+ if (conceptEntry.getValue() == null) {
+ result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "value on concept entry " + conceptEntry.getKey() + " may not be null"));
+ } else
+ if (!conceptEntry.getKey().equals(conceptEntry.getValue().getKey())) {
+ result.addValidationMessage(new PfValidationMessage(key, this.getClass(),
+ ValidationResult.INVALID, "key on concept entry key " + conceptEntry.getKey()
+ + " does not equal concept value key " + conceptEntry.getValue().getKey()));
+ result = conceptEntry.getValue().validate(result);
+ } else {
+ result = conceptEntry.getValue().validate(result);
+ }
}
return result;
}
@@ -190,7 +255,7 @@ public class PfConceptContainer<C extends PfConcept> extends PfConcept implement
}
@SuppressWarnings("unchecked")
- final PfConceptContainer<C> other = (PfConceptContainer<C>) otherConcept;
+ final PfConceptContainer<C, A> other = (PfConceptContainer<C, A>) otherConcept;
int retVal = key.compareTo(other.key);
if (retVal != 0) {
return retVal;
@@ -208,12 +273,13 @@ public class PfConceptContainer<C extends PfConcept> extends PfConcept implement
Assertions.instanceOf(target, PfConceptContainer.class);
@SuppressWarnings("unchecked")
- final PfConceptContainer<C> copy = (PfConceptContainer<C>) target;
+ final PfConceptContainer<C, A> copy = (PfConceptContainer<C, A>) target;
copy.setKey(new PfConceptKey(key));
final Map<PfConceptKey, C> newConceptMap = new TreeMap<>();
for (final Entry<PfConceptKey, C> conceptMapEntry : conceptMap.entrySet()) {
- newConceptMap.put(new PfConceptKey(conceptMapEntry.getKey()),
- new ConceptCloner().cloneConcept(conceptMapEntry.getValue()));
+ C newC = getConceptNewInstance();
+ conceptMapEntry.getValue().copyTo(newC);
+ newConceptMap.put(new PfConceptKey(conceptMapEntry.getKey()), newC);
}
copy.setConceptMap(newConceptMap);
@@ -248,21 +314,19 @@ public class PfConceptContainer<C extends PfConcept> extends PfConcept implement
}
/**
- * Private inner class that returns a clone of a concept by calling the copy constructor on the
- * original class.
+ * Get a new empty instance of a concept for this concept map.
+ *
+ * @return the new instance
*/
- private class ConceptCloner {
- @SuppressWarnings("unchecked")
- public C cloneConcept(final C originalConcept) {
- try {
- C clonedConcept = (C) originalConcept.getClass().newInstance();
- originalConcept.copyTo(clonedConcept);
- return clonedConcept;
- } catch (Exception ex) {
- throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR,
- "Failed to create a clone of class \"" + originalConcept.getClass().getCanonicalName() + "\"",
- ex);
- }
+ @SuppressWarnings("unchecked")
+ private C getConceptNewInstance() {
+ try {
+ String conceptClassName =
+ ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0].getTypeName();
+ return (C) Class.forName(conceptClassName).newInstance();
+ } catch (Exception ex) {
+ throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR,
+ "failed to instantiate instance of container concept class", ex);
}
}
}
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java b/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java
new file mode 100644
index 000000000..47238fc40
--- /dev/null
+++ b/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.base;
+
+/**
+ * An interface that forces a POJO to have getName() and getVersion() methods.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public interface PfNameVersion {
+ public String getName();
+
+ public void setName(final String name);
+
+ public String getVersion();
+
+ public void setVersion(final String version);
+}
diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java
index 0ed04c4e6..3ae7c4c9d 100644
--- a/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java
+++ b/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java
@@ -20,18 +20,23 @@
package org.onap.policy.models.base;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.junit.Test;
+import org.onap.policy.models.base.testconcepts.DummyAuthorativeConcept;
+import org.onap.policy.models.base.testconcepts.DummyBadPfConceptContainer;
import org.onap.policy.models.base.testconcepts.DummyPfConcept;
import org.onap.policy.models.base.testconcepts.DummyPfConceptContainer;
import org.onap.policy.models.base.testconcepts.DummyPfConceptSub;
@@ -44,7 +49,7 @@ import org.onap.policy.models.base.testconcepts.DummyPfConceptSub;
public class PfConceptContainerTest {
@Test
- public void test() {
+ public void testConceptContainer() {
DummyPfConceptContainer container = new DummyPfConceptContainer();
assertNotNull(container);
@@ -179,16 +184,38 @@ public class PfConceptContainerTest {
assertEquals(conceptKey, returnSet.iterator().next().getKey());
container.getConceptMap().put(conceptKey, new DummyPfConceptSub(conceptKey));
+ }
- DummyPfConceptContainer exceptionOnCopyContainer = new DummyPfConceptContainer();
- try {
- container.copyTo(exceptionOnCopyContainer);
- fail("test should throw an exception here");
- } catch (Exception exc) {
- assertEquals(
- "Failed to create a clone of class \"org.onap.policy.models.base.testconcepts.DummyPfConceptSub\"",
- exc.getMessage());
- }
+ @Test
+ public void testAuthorative() {
+ Map<String, DummyAuthorativeConcept> dacMap = new LinkedHashMap<>();
+ dacMap.put("name0", new DummyAuthorativeConcept("name0", "1.2.3", "Hello"));
+ dacMap.put("name1", new DummyAuthorativeConcept("name1", "1.2.3", "Hi"));
+ dacMap.put("name2", new DummyAuthorativeConcept("name2", "1.2.3", "Howdy"));
+
+ List<Map<String, DummyAuthorativeConcept>> authorativeList = new ArrayList<>();
+ authorativeList.add(dacMap);
+
+ DummyPfConceptContainer container = new DummyPfConceptContainer();
+ container.fromAuthorative(authorativeList);
+
+ assertEquals("Hello", container.getConceptMap().get(new PfConceptKey("name0:1.2.3")).getDescription());
+ assertEquals("Hi", container.getConceptMap().get(new PfConceptKey("name1:1.2.3")).getDescription());
+ assertEquals("Howdy", container.getConceptMap().get(new PfConceptKey("name2:1.2.3")).getDescription());
+
+ List<Map<String, DummyAuthorativeConcept>> outMapList = container.toAuthorative();
+
+ assertEquals(dacMap, outMapList.get(0));
+
+ DummyBadPfConceptContainer badContainer = new DummyBadPfConceptContainer();
+ assertThatThrownBy(() -> {
+ badContainer.fromAuthorative(authorativeList);
+ }).hasMessage("failed to instantiate instance of container concept class");
+
+ authorativeList.clear();
+ assertThatThrownBy(() -> {
+ container.fromAuthorative(authorativeList);
+ }).hasMessage("An incoming list of concepts must have at least one entry");
}
@Test(expected = NullPointerException.class)
diff --git a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyAuthorativeConcept.java b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyAuthorativeConcept.java
new file mode 100644
index 000000000..02ff75061
--- /dev/null
+++ b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyAuthorativeConcept.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.base.testconcepts;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import org.onap.policy.models.base.PfNameVersion;
+
+/**
+ * Dummy authorative concept.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+@Data
+@NoArgsConstructor
+public class DummyAuthorativeConcept implements PfNameVersion {
+ private String name;
+ private String version;
+ private String description;
+
+ /**
+ * Constructor.
+ *
+ * @param name the name
+ * @param version the version
+ * @param description the description
+ */
+ public DummyAuthorativeConcept(final String name, final String version, final String description) {
+ this.name = name;
+ this.version = version;
+ this.description = description;
+ }
+}
diff --git a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConcept.java b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConcept.java
new file mode 100644
index 000000000..05fd5992b
--- /dev/null
+++ b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConcept.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.base.testconcepts;
+
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptKey;
+
+/**
+ * Bad dummy concept throws exception on default constructor.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class DummyBadPfConcept extends DummyPfConcept {
+ private static final long serialVersionUID = 1L;
+
+ public DummyBadPfConcept() {
+ throw new NumberFormatException();
+ }
+
+ /**
+ * The Key Constructor creates a {@link DummyPfConcept} object with the given concept key.
+ *
+ * @param key the key
+ */
+ public DummyBadPfConcept(@NonNull final PfConceptKey key) {
+ throw new NumberFormatException();
+ }
+
+ /**
+ * Copy constructor.
+ *
+ * @param copyConcept the concept to copy from
+ */
+ public DummyBadPfConcept(final DummyBadPfConcept copyConcept) {
+ throw new NumberFormatException();
+ }
+}
diff --git a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConceptContainer.java b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConceptContainer.java
new file mode 100644
index 000000000..c328a01aa
--- /dev/null
+++ b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConceptContainer.java
@@ -0,0 +1,77 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.base.testconcepts;
+
+import java.util.Map;
+
+import lombok.NonNull;
+
+import org.onap.policy.models.base.PfConceptContainer;
+import org.onap.policy.models.base.PfConceptKey;
+
+/**
+ * Dummy container for PF concepts.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class DummyBadPfConceptContainer extends PfConceptContainer<DummyBadPfConcept, DummyAuthorativeConcept> {
+ private static final long serialVersionUID = -3018432331484294280L;
+
+
+ /**
+ * The Default Constructor creates a {@link DummyBadPfConceptContainer} object with a null artifact key
+ * and creates an empty concept map.
+ */
+ public DummyBadPfConceptContainer() {
+ super();
+ }
+
+ /**
+ * The Key Constructor creates a {@link DummyBadPfConceptContainer} object with the given artifact key and
+ * creates an empty concept map.
+ *
+ * @param key the concept key
+ */
+ public DummyBadPfConceptContainer(@NonNull final PfConceptKey key) {
+ super(key);
+ }
+
+ /**
+ * This Constructor creates an concept container with all of its fields defined.
+ *
+ * @param key the concept container key
+ * @param conceptMap the concepts to be stored in the concept container
+ */
+ public DummyBadPfConceptContainer(@NonNull final PfConceptKey key,
+ @NonNull final Map<PfConceptKey, DummyBadPfConcept> conceptMap) {
+ super(key, conceptMap);
+ }
+
+ /**
+ * Copy constructor.
+ *
+ * @param copyConcept the concept to copy from
+ */
+ public DummyBadPfConceptContainer(@NonNull final DummyBadPfConceptContainer copyConcept) {
+ super(copyConcept);
+ }
+
+}
diff --git a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java
index 9fb6b5793..5e74fb2f9 100644
--- a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java
+++ b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java
@@ -30,6 +30,7 @@ import lombok.NonNull;
import org.apache.commons.lang3.ObjectUtils;
import org.onap.policy.common.utils.validation.Assertions;
+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;
@@ -39,13 +40,31 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult;
@Data
@EqualsAndHashCode(callSuper = false)
-public class DummyPfConcept extends PfConcept {
+public class DummyPfConcept extends PfConcept implements PfAuthorative<DummyAuthorativeConcept> {
private static final long serialVersionUID = 1L;
@EmbeddedId
private PfConceptKey key;
private String description;
+
+ @Override
+ public DummyAuthorativeConcept toAuthorative() {
+ DummyAuthorativeConcept dac = new DummyAuthorativeConcept();
+ dac.setName(key.getName());
+ dac.setVersion(key.getVersion());
+ dac.setDescription(description);
+
+ return dac;
+ }
+
+ @Override
+ public void fromAuthorative(DummyAuthorativeConcept dac) {
+ key.setName(dac.getName());
+ key.setVersion(dac.getVersion());
+ description = dac.getDescription();
+ }
+
/**
* The Default Constructor creates a {@link DummyPfConcept} object with a null key.
*/
diff --git a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConceptContainer.java b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConceptContainer.java
index ac72ef8f6..45de69e68 100644
--- a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConceptContainer.java
+++ b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConceptContainer.java
@@ -32,7 +32,7 @@ import org.onap.policy.models.base.PfConceptKey;
*
* @author Liam Fallon (liam.fallon@est.tech)
*/
-public class DummyPfConceptContainer extends PfConceptContainer<DummyPfConcept> {
+public class DummyPfConceptContainer extends PfConceptContainer<DummyPfConcept, DummyAuthorativeConcept> {
private static final long serialVersionUID = -3018432331484294280L;