From 2e9186e1eb441b3ec47cf2a959e34b9409134aba Mon Sep 17 00:00:00 2001 From: liamfallon Date: Mon, 1 Apr 2019 00:34:34 +0000 Subject: [PATCH] Refactor to authorative TOSCA serializtion This review refactors the TOSCA support to use authorative serialization and mapping. It removes the JPA entities from the Proider interface It brings the mapping support from and to authorative concepts out of the JSON serialization classes directly into the JPA classes It adapts the unit tests to work with the refactored structure. Apologies for the review size but it all had to be done in a single block of work. Issue-ID: POLICY-1095 Change-Id: I4827d1dc67ef7aac98cba230ffcd79c6de71e805 Signed-off-by: liamfallon --- .../org/onap/policy/models/base/PfAuthorative.java | 5 +- .../policy/models/base/PfConceptContainer.java | 150 +++++++---- .../org/onap/policy/models/base/PfNameVersion.java | 23 +- .../policy/models/base/PfConceptContainerTest.java | 47 +++- .../base/testconcepts/DummyAuthorativeConcept.java | 52 ++++ .../base/testconcepts/DummyBadPfConcept.java | 56 ++++ .../testconcepts/DummyBadPfConceptContainer.java | 77 ++++++ .../models/base/testconcepts/DummyPfConcept.java | 21 +- .../base/testconcepts/DummyPfConceptContainer.java | 2 +- .../models/provider/PolicyModelsProvider.java | 38 +-- .../impl/DatabasePolicyModelsProviderImpl.java | 40 +-- .../impl/DummyPolicyModelsProviderImpl.java | 36 +-- .../impl/DatabasePolicyModelsProviderTest.java | 76 ++++-- .../models/provider/impl/DummyBadProviderImpl.java | 19 +- .../impl/DummyPolicyModelsProviderSubImpl.java | 6 +- .../impl/DummyPolicyModelsProviderTest.java | 41 ++- .../provider/impl/PolicyPersistenceTest.java | 32 ++- .../provider/impl/PolicyToscaPersistenceTest.java | 33 +-- .../authorative/concepts/ToscaConstraint.java | 14 + .../tosca/authorative/concepts/ToscaDataType.java | 19 +- .../tosca/authorative/concepts/ToscaEntity.java | 74 ++++++ .../authorative/concepts/ToscaEntrySchema.java | 4 + .../tosca/authorative/concepts/ToscaPolicy.java | 30 ++- .../authorative/concepts/ToscaPolicyType.java | 18 +- .../tosca/authorative/concepts/ToscaProperty.java | 18 +- .../authorative/concepts/ToscaServiceTemplate.java | 5 +- .../mapping/PlainToscaServiceTemplateMapper.java | 56 ---- .../provider/AuthorativeToscaProvider.java | 157 ++++++++++++ .../tosca/simple/concepts/JpaToscaConstraint.java | 100 ++------ .../simple/concepts/JpaToscaConstraintLogical.java | 135 ++++++---- .../concepts/JpaToscaConstraintLogicalKey.java | 155 ----------- .../concepts/JpaToscaConstraintLogicalString.java | 137 ---------- .../concepts/JpaToscaConstraintOperation.java | 46 ++++ .../concepts/JpaToscaConstraintValidValues.java | 99 +++---- .../tosca/simple/concepts/JpaToscaDataType.java | 100 ++++++-- .../tosca/simple/concepts/JpaToscaDataTypes.java | 21 +- .../tosca/simple/concepts/JpaToscaEntityType.java | 86 ++++++- .../tosca/simple/concepts/JpaToscaEntrySchema.java | 159 ++++++------ .../tosca/simple/concepts/JpaToscaPolicies.java | 23 +- .../tosca/simple/concepts/JpaToscaPolicy.java | 65 ++++- .../tosca/simple/concepts/JpaToscaPolicyType.java | 66 ++++- .../tosca/simple/concepts/JpaToscaPolicyTypes.java | 21 +- .../tosca/simple/concepts/JpaToscaProperty.java | 109 ++++++-- .../simple/concepts/JpaToscaServiceTemplate.java | 76 +++++- .../simple/concepts/JpaToscaServiceTemplates.java | 13 +- .../simple/concepts/JpaToscaTopologyTemplate.java | 36 ++- .../tosca/simple/concepts/JpaToscaTrigger.java | 14 - .../serialization/ToscaDataTypeJsonAdapter.java | 139 ---------- .../serialization/ToscaDataTypesJsonAdapter.java | 94 ------- .../serialization/ToscaPoliciesJsonAdapter.java | 79 ------ .../serialization/ToscaPolicyJsonAdapter.java | 164 ------------ .../serialization/ToscaPolicyTypeJsonAdapter.java | 139 ---------- .../serialization/ToscaPolicyTypesJsonAdapter.java | 94 ------- .../serialization/ToscaPropertiesJsonAdapter.java | 284 --------------------- .../ToscaServiceTemplateJsonAdapter.java | 122 --------- .../ToscaServiceTemplateMessageBodyHandler.java | 73 ------ .../ToscaTopologyTemplateJsonAdapter.java | 91 ------- ...t.java => ToscaServiceTemplateMappingTest.java} | 32 ++- .../concepts/JpaToscaConstraintLogicalKeyTest.java | 136 ---------- .../JpaToscaConstraintLogicalStringTest.java | 135 ---------- .../concepts/JpaToscaConstraintLogicalTest.java | 124 +-------- .../simple/concepts/JpaToscaDataTypeTest.java | 15 +- .../simple/concepts/JpaToscaEntrySchemaTest.java | 36 +-- .../simple/concepts/JpaToscaPolicyTypeTest.java | 15 +- .../simple/concepts/JpaToscaPropertyTest.java | 21 +- .../tosca/simple/concepts/JpaToscaTriggerTest.java | 7 +- .../models/tosca/simple/concepts/TestPojos.java | 15 +- .../testconcepts/DummyToscaConstraint.java | 26 +- .../simple/provider/SimpleToscaProviderTest.java | 53 ++-- .../MonitoringPolicySerializationTest.java | 30 ++- .../MonitoringPolicyTypeSerializationTest.java | 187 +++++++------- 71 files changed, 1869 insertions(+), 2852 deletions(-) rename models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/package-info.java => models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java (66%) create mode 100644 models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyAuthorativeConcept.java create mode 100644 models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConcept.java create mode 100644 models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyBadPfConceptContainer.java create mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntity.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapper.java create mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalKey.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalString.java create mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintOperation.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypeJsonAdapter.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypesJsonAdapter.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypeJsonAdapter.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypesJsonAdapter.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPropertiesJsonAdapter.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java delete mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java rename models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/{PlainToscaServiceTemplateMapperTest.java => ToscaServiceTemplateMappingTest.java} (68%) delete mode 100644 models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalKeyTest.java delete mode 100644 models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalStringTest.java 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 { /** * 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. * - *

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. + *

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 extends PfConcept implements PfConceptGetter { +public class PfConceptContainer extends PfConcept + implements PfConceptGetter, PfAuthorative>> { private static final long serialVersionUID = -324211738823208318L; @EmbeddedId @@ -69,16 +73,16 @@ public class PfConceptContainer extends PfConcept implement private Map 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 extends PfConcept implement * * @param copyConcept the concept to copy from */ - public PfConceptContainer(@NonNull final PfConceptContainer copyConcept) { + public PfConceptContainer(@NonNull final PfConceptContainer copyConcept) { super(copyConcept); } @@ -119,6 +123,65 @@ public class PfConceptContainer extends PfConcept implement return keyList; } + @Override + public List> toAuthorative() { + Map toscaPolicyMap = new LinkedHashMap<>(); + + for (Entry conceptEntry : getConceptMap().entrySet()) { + @SuppressWarnings("unchecked") + PfAuthorative authoritiveImpl = (PfAuthorative) conceptEntry.getValue(); + toscaPolicyMap.put(conceptEntry.getKey().getName(), authoritiveImpl.toAuthorative()); + } + + List> toscaPolicyMapList = new ArrayList<>(); + toscaPolicyMapList.add(toscaPolicyMap); + + return toscaPolicyMapList; + } + + @Override + public void fromAuthorative(List> authorativeList) { + // Clear any existing map entries + conceptMap.clear(); + + // Concepts are in lists of maps + for (Map incomingConceptMap : authorativeList) { + // Add the map entries one by one + for (Entry incomingConceptEntry : incomingConceptMap.entrySet()) { + C jpaConcept = getConceptNewInstance(); + + // This cast allows us to call the fromAuthorative method + @SuppressWarnings("unchecked") + PfAuthorative authoritiveImpl = (PfAuthorative) 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(); @@ -162,17 +225,19 @@ public class PfConceptContainer 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 extends PfConcept implement } @SuppressWarnings("unchecked") - final PfConceptContainer other = (PfConceptContainer) otherConcept; + final PfConceptContainer other = (PfConceptContainer) otherConcept; int retVal = key.compareTo(other.key); if (retVal != 0) { return retVal; @@ -208,12 +273,13 @@ public class PfConceptContainer extends PfConcept implement Assertions.instanceOf(target, PfConceptContainer.class); @SuppressWarnings("unchecked") - final PfConceptContainer copy = (PfConceptContainer) target; + final PfConceptContainer copy = (PfConceptContainer) target; copy.setKey(new PfConceptKey(key)); final Map newConceptMap = new TreeMap<>(); for (final Entry 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 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-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/package-info.java b/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java similarity index 66% rename from models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/package-info.java rename to models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java index e9b87c6ab..47238fc40 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/package-info.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java @@ -1,8 +1,6 @@ /*- * ============LICENSE_START======================================================= - * ONAP Policy Model - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * 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. @@ -20,12 +18,19 @@ * ============LICENSE_END========================================================= */ +package org.onap.policy.models.base; + /** - * This package includes all the mappers used to transform plain TOSCA POJOs into internal representation - * of TOSCA concepts with JPA annotations added. - */ -/** - * @author Chenfei Gao (cgao@research.att.com) + * An interface that forces a POJO to have getName() and getVersion() methods. * + * @author Liam Fallon (liam.fallon@est.tech) */ -package org.onap.policy.models.tosca.authorative.mapping; \ No newline at end of file +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 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> 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> 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 { + 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 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 { 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 { +public class DummyPfConceptContainer extends PfConceptContainer { private static final long serialVersionUID = -3018432331484294280L; diff --git a/models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProvider.java b/models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProvider.java index e390a04f0..a8d8483e3 100644 --- a/models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProvider.java +++ b/models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProvider.java @@ -24,13 +24,12 @@ import java.util.Map; import lombok.NonNull; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.pdp.concepts.PdpGroups; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; /** * This interface describes the operations that are provided to users and components for reading objects from and @@ -49,12 +48,13 @@ public interface PolicyModelsProvider extends AutoCloseable { /** * Get policy types. * - * @param policyTypeKey the policy type key for the policy types to be retrieved. A null key name returns all policy - * types. A null key version returns all versions of the policy type name specified in the key. + * @param name the name of the policy type to get. + * @param version the version of the policy type to get. * @return the policy types found * @throws PfModelException on errors getting policy types */ - public JpaToscaServiceTemplate getPolicyTypes(@NonNull final PfConceptKey policyTypeKey) throws PfModelException; + public ToscaServiceTemplate getPolicyTypes(@NonNull final String name, @NonNull final String version) + throws PfModelException; /** * Create policy types. @@ -63,7 +63,7 @@ public interface PolicyModelsProvider extends AutoCloseable { * @return the TOSCA service template containing the created policy types * @throws PfModelException on errors creating policy types */ - public JpaToscaServiceTemplate createPolicyTypes(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate createPolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException; /** @@ -73,28 +73,30 @@ public interface PolicyModelsProvider extends AutoCloseable { * @return the TOSCA service template containing the modified policy types * @throws PfModelException on errors updating policy types */ - public JpaToscaServiceTemplate updatePolicyTypes(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate updatePolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException; /** * Delete policy types. * - * @param policyTypeKey the policy type key for the policy types to be deleted, if the version of the key is null, - * all versions of the policy type are deleted. + * @param name the name of the policy type to delete. + * @param version the version of the policy type to delete. * @return the TOSCA service template containing the policy types that were deleted * @throws PfModelException on errors deleting policy types */ - public JpaToscaServiceTemplate deletePolicyTypes(@NonNull final PfConceptKey policyTypeKey) throws PfModelException; + public ToscaServiceTemplate deletePolicyTypes(@NonNull final String name, @NonNull final String version) + throws PfModelException; /** * Get policies. * - * @param policyKey the policy key for the policies to be retrieved. The parent name and version must be specified. - * A null local name returns all policies for a parent policy type. + * @param name the name of the policy to get. + * @param version the version of the policy to get. * @return the policies found * @throws PfModelException on errors getting policies */ - public JpaToscaServiceTemplate getPolicies(@NonNull final PfConceptKey policyKey) throws PfModelException; + public ToscaServiceTemplate getPolicies(@NonNull final String name, @NonNull final String version) + throws PfModelException; /** * Create policies. @@ -103,7 +105,7 @@ public interface PolicyModelsProvider extends AutoCloseable { * @return the TOSCA service template containing the policy types that were created * @throws PfModelException on errors creating policies */ - public JpaToscaServiceTemplate createPolicies(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate createPolicies(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException; @@ -114,17 +116,19 @@ public interface PolicyModelsProvider extends AutoCloseable { * @return the TOSCA service template containing the policies that were updated * @throws PfModelException on errors updating policies */ - public JpaToscaServiceTemplate updatePolicies(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate updatePolicies(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException; /** * Delete policies. * - * @param policyKey the policy key + * @param name the name of the policy to delete. + * @param version the version of the policy to delete. * @return the TOSCA service template containing the policy types that were deleted * @throws PfModelException on errors deleting policies */ - public JpaToscaServiceTemplate deletePolicies(@NonNull final PfConceptKey policyKey) throws PfModelException; + public ToscaServiceTemplate deletePolicies(@NonNull final String name, @NonNull final String version) + throws PfModelException; /** * Get legacy operational policy. diff --git a/models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java b/models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java index 85c4d139c..9a32feb65 100644 --- a/models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java +++ b/models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java @@ -29,7 +29,6 @@ import javax.ws.rs.core.Response; import lombok.NonNull; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.dao.DaoParameters; @@ -40,12 +39,12 @@ import org.onap.policy.models.pdp.concepts.PdpGroups; import org.onap.policy.models.pdp.persistence.provider.PdpProvider; import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; +import org.onap.policy.models.tosca.authorative.provider.AuthorativeToscaProvider; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; import org.onap.policy.models.tosca.legacy.provider.LegacyProvider; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.provider.SimpleToscaProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -138,56 +137,59 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { } @Override - public JpaToscaServiceTemplate getPolicyTypes(@NonNull final PfConceptKey policyTypeKey) throws PfModelException { + public ToscaServiceTemplate getPolicyTypes(@NonNull final String name, @NonNull final String version) + throws PfModelException { assertInitilized(); - return new SimpleToscaProvider().getPolicyTypes(pfDao, policyTypeKey); + return new AuthorativeToscaProvider().getPolicyTypes(pfDao, name, version); } @Override - public JpaToscaServiceTemplate createPolicyTypes(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate createPolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitilized(); - return new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().createPolicyTypes(pfDao, serviceTemplate); } @Override - public JpaToscaServiceTemplate updatePolicyTypes(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate updatePolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitilized(); - return new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().updatePolicyTypes(pfDao, serviceTemplate); } @Override - public JpaToscaServiceTemplate deletePolicyTypes(@NonNull final PfConceptKey policyTypeKey) + public ToscaServiceTemplate deletePolicyTypes(@NonNull final String name, @NonNull final String version) throws PfModelException { assertInitilized(); - return new SimpleToscaProvider().deletePolicyTypes(pfDao, policyTypeKey); + return new AuthorativeToscaProvider().deletePolicyTypes(pfDao, name, version); } @Override - public JpaToscaServiceTemplate getPolicies(@NonNull final PfConceptKey policyKey) throws PfModelException { + public ToscaServiceTemplate getPolicies(@NonNull final String name, @NonNull final String version) + throws PfModelException { assertInitilized(); - return new SimpleToscaProvider().getPolicies(pfDao, policyKey); + return new AuthorativeToscaProvider().getPolicies(pfDao, name, version); } @Override - public JpaToscaServiceTemplate createPolicies(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate createPolicies(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitilized(); - return new SimpleToscaProvider().createPolicies(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().createPolicies(pfDao, serviceTemplate); } @Override - public JpaToscaServiceTemplate updatePolicies(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate updatePolicies(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitilized(); - return new SimpleToscaProvider().updatePolicies(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().updatePolicies(pfDao, serviceTemplate); } @Override - public JpaToscaServiceTemplate deletePolicies(@NonNull final PfConceptKey policyKey) throws PfModelException { + public ToscaServiceTemplate deletePolicies(@NonNull final String name, @NonNull final String version) + throws PfModelException { assertInitilized(); - return new SimpleToscaProvider().deletePolicies(pfDao, policyKey); + return new AuthorativeToscaProvider().deletePolicies(pfDao, name, version); } @Override diff --git a/models-provider/src/main/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderImpl.java b/models-provider/src/main/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderImpl.java index e37b1d632..8881ed08e 100644 --- a/models-provider/src/main/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderImpl.java +++ b/models-provider/src/main/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderImpl.java @@ -21,25 +21,23 @@ package org.onap.policy.models.provider.impl; -import com.google.gson.Gson; - import java.util.HashMap; import java.util.Map; import javax.ws.rs.core.Response; import lombok.NonNull; + +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.pdp.concepts.PdpGroups; import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; /** * This class provides a dummy implementation of the Policy Models Provider for the ONAP Policy Framework. @@ -66,47 +64,50 @@ public class DummyPolicyModelsProviderImpl implements PolicyModelsProvider { } @Override - public JpaToscaServiceTemplate getPolicyTypes(@NonNull final PfConceptKey policyTypeKey) throws PfModelException { + public ToscaServiceTemplate getPolicyTypes(@NonNull final String name, @NonNull final String version) + throws PfModelException { return getDummyResponse("dummyimpl/DummyToscaPolicyTypeGetResponse.json"); } @Override - public JpaToscaServiceTemplate createPolicyTypes(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate createPolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { return serviceTemplate; } @Override - public JpaToscaServiceTemplate updatePolicyTypes(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate updatePolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { return serviceTemplate; } @Override - public JpaToscaServiceTemplate deletePolicyTypes(@NonNull final PfConceptKey policyTypeKey) + public ToscaServiceTemplate deletePolicyTypes(@NonNull final String name, @NonNull final String version) throws PfModelException { return getDummyResponse("dummyimpl/DummyToscaPolicyTypeDeleteResponse.json"); } @Override - public JpaToscaServiceTemplate getPolicies(@NonNull final PfConceptKey policyKey) throws PfModelException { + public ToscaServiceTemplate getPolicies(@NonNull final String name, @NonNull final String version) + throws PfModelException { return getDummyResponse("dummyimpl/DummyToscaPolicyGetResponse.json"); } @Override - public JpaToscaServiceTemplate createPolicies(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate createPolicies(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { return serviceTemplate; } @Override - public JpaToscaServiceTemplate updatePolicies(@NonNull final JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate updatePolicies(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { return serviceTemplate; } @Override - public JpaToscaServiceTemplate deletePolicies(@NonNull final PfConceptKey policyKey) throws PfModelException { + public ToscaServiceTemplate deletePolicies(@NonNull final String name, @NonNull final String version) + throws PfModelException { return getDummyResponse("dummyimpl/DummyToscaPolicyDeleteResponse.json"); } @@ -182,12 +183,13 @@ public class DummyPolicyModelsProviderImpl implements PolicyModelsProvider { * @param fileName the file name containing the dummy response * @return the ToscaServiceTemplate with the dummy response */ - protected JpaToscaServiceTemplate getDummyResponse(@NonNull final String fileName) { - Gson gson = new ToscaServiceTemplateMessageBodyHandler().getGson(); - JpaToscaServiceTemplate serviceTemplate; + protected ToscaServiceTemplate getDummyResponse(@NonNull final String fileName) { + StandardCoder standardCoder = new StandardCoder(); + ToscaServiceTemplate serviceTemplate; try { - serviceTemplate = gson.fromJson(ResourceUtils.getResourceAsString(fileName), JpaToscaServiceTemplate.class); + serviceTemplate = + standardCoder.decode(ResourceUtils.getResourceAsString(fileName), ToscaServiceTemplate.class); if (serviceTemplate == null) { throw new PfModelException(Response.Status.INTERNAL_SERVER_ERROR, "error reading specified file"); } diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderTest.java index 335233476..7eb712236 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderTest.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderTest.java @@ -28,14 +28,13 @@ import java.util.Base64; import org.junit.Before; import org.junit.Test; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.pdp.concepts.PdpGroups; import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.provider.PolicyModelsProviderFactory; import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -120,9 +119,16 @@ public class DatabasePolicyModelsProviderTest { databaseProvider.init(); assertThatThrownBy(() -> { - databaseProvider.getPolicyTypes(null); - }).hasMessage("policyTypeKey is marked @NonNull but is null"); + databaseProvider.getPolicyTypes(null, null); + }).hasMessage("name is marked @NonNull but is null"); + assertThatThrownBy(() -> { + databaseProvider.getPolicyTypes("aaa", null); + }).hasMessage("version is marked @NonNull but is null"); + + assertThatThrownBy(() -> { + databaseProvider.getPolicyTypes(null, "aaa"); + }).hasMessage("name is marked @NonNull but is null"); assertThatThrownBy(() -> { databaseProvider.createPolicyTypes(null); @@ -133,12 +139,28 @@ public class DatabasePolicyModelsProviderTest { }).hasMessage("serviceTemplate is marked @NonNull but is null"); assertThatThrownBy(() -> { - databaseProvider.deletePolicyTypes(null); - }).hasMessage("policyTypeKey is marked @NonNull but is null"); + databaseProvider.deletePolicyTypes(null, null); + }).hasMessage("name is marked @NonNull but is null"); + + assertThatThrownBy(() -> { + databaseProvider.deletePolicyTypes("aaa", null); + }).hasMessage("version is marked @NonNull but is null"); + + assertThatThrownBy(() -> { + databaseProvider.deletePolicyTypes(null, "aaa"); + }).hasMessage("name is marked @NonNull but is null"); assertThatThrownBy(() -> { - databaseProvider.getPolicies(null); - }).hasMessage("policyKey is marked @NonNull but is null"); + databaseProvider.getPolicies(null, null); + }).hasMessage("name is marked @NonNull but is null"); + + assertThatThrownBy(() -> { + databaseProvider.getPolicies(null, "aaa"); + }).hasMessage("name is marked @NonNull but is null"); + + assertThatThrownBy(() -> { + databaseProvider.getPolicies("aaa", null); + }).hasMessage("version is marked @NonNull but is null"); assertThatThrownBy(() -> { databaseProvider.createPolicies(null); @@ -149,8 +171,16 @@ public class DatabasePolicyModelsProviderTest { }).hasMessage("serviceTemplate is marked @NonNull but is null"); assertThatThrownBy(() -> { - databaseProvider.deletePolicies(null); - }).hasMessage("policyKey is marked @NonNull but is null"); + databaseProvider.deletePolicies(null, null); + }).hasMessage("name is marked @NonNull but is null"); + + assertThatThrownBy(() -> { + databaseProvider.deletePolicies(null, "aaa"); + }).hasMessage("name is marked @NonNull but is null"); + + assertThatThrownBy(() -> { + databaseProvider.deletePolicies("aaa", null); + }).hasMessage("version is marked @NonNull but is null"); assertThatThrownBy(() -> { databaseProvider.getOperationalPolicy(null); @@ -210,7 +240,7 @@ public class DatabasePolicyModelsProviderTest { new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters); assertThatThrownBy(() -> { - databaseProvider.getPolicyTypes(new PfConceptKey()); + databaseProvider.getPolicyTypes("name", "version"); }).hasMessage("policy models provider is not initilaized"); } @@ -221,36 +251,36 @@ public class DatabasePolicyModelsProviderTest { databaseProvider.init(); assertThatThrownBy(() -> { - databaseProvider.getPolicyTypes(new PfConceptKey()); - }).hasMessage("policy type not found: NULL:0.0.0"); + databaseProvider.getPolicyTypes("name", "version"); + }).hasMessage("policy type not found: name:version"); assertThatThrownBy(() -> { - databaseProvider.createPolicyTypes(new JpaToscaServiceTemplate()); + databaseProvider.createPolicyTypes(new ToscaServiceTemplate()); }).hasMessage("no policy types specified on service template"); assertThatThrownBy(() -> { - databaseProvider.updatePolicyTypes(new JpaToscaServiceTemplate()); + databaseProvider.updatePolicyTypes(new ToscaServiceTemplate()); }).hasMessage("no policy types specified on service template"); assertThatThrownBy(() -> { - databaseProvider.deletePolicyTypes(new PfConceptKey()); - }).hasMessage("policy type not found: NULL:0.0.0"); + databaseProvider.deletePolicyTypes("name", "version"); + }).hasMessage("policy type not found: name:version"); assertThatThrownBy(() -> { - databaseProvider.getPolicies(new PfConceptKey()); - }).hasMessage("policy not found: NULL:0.0.0"); + databaseProvider.getPolicies("name", "version"); + }).hasMessage("policy not found: name:version"); assertThatThrownBy(() -> { - databaseProvider.createPolicies(new JpaToscaServiceTemplate()); + databaseProvider.createPolicies(new ToscaServiceTemplate()); }).hasMessage("topology template not specified on service template"); assertThatThrownBy(() -> { - databaseProvider.updatePolicies(new JpaToscaServiceTemplate()); + databaseProvider.updatePolicies(new ToscaServiceTemplate()); }).hasMessage("topology template not specified on service template"); assertThatThrownBy(() -> { - databaseProvider.deletePolicies(new PfConceptKey()); - }).hasMessage("policy not found: NULL:0.0.0"); + databaseProvider.deletePolicies("name", "version"); + }).hasMessage("policy not found: name:version"); assertThatThrownBy(() -> { databaseProvider.getOperationalPolicy("policy_id"); diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyBadProviderImpl.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyBadProviderImpl.java index 2ee210c13..a9a0d13e3 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyBadProviderImpl.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyBadProviderImpl.java @@ -26,15 +26,14 @@ import javax.ws.rs.core.Response; import lombok.NonNull; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.pdp.concepts.PdpGroups; import org.onap.policy.models.provider.PolicyModelsProvider; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; /** * Dummy implementation of {@link PolicyModelsProvider} with bad constructor. @@ -53,46 +52,46 @@ public class DummyBadProviderImpl implements PolicyModelsProvider { public void init() throws PfModelException {} @Override - public JpaToscaServiceTemplate getPolicyTypes(@NonNull PfConceptKey policyTypeKey) throws PfModelException { + public ToscaServiceTemplate getPolicyTypes(final String name, final String version) throws PfModelException { return null; } @Override - public JpaToscaServiceTemplate createPolicyTypes(@NonNull JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate createPolicyTypes(@NonNull ToscaServiceTemplate serviceTemplate) throws PfModelException { return null; } @Override - public JpaToscaServiceTemplate updatePolicyTypes(@NonNull JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate updatePolicyTypes(@NonNull ToscaServiceTemplate serviceTemplate) throws PfModelException { return null; } @Override - public JpaToscaServiceTemplate deletePolicyTypes(@NonNull PfConceptKey policyTypeKey) throws PfModelException { + public ToscaServiceTemplate deletePolicyTypes(final String name, final String version) throws PfModelException { return null; } @Override - public JpaToscaServiceTemplate getPolicies(@NonNull PfConceptKey policyKey) throws PfModelException { + public ToscaServiceTemplate getPolicies(final String name, final String version) throws PfModelException { return null; } @Override - public JpaToscaServiceTemplate createPolicies(@NonNull JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate createPolicies(@NonNull ToscaServiceTemplate serviceTemplate) throws PfModelException { return null; } @Override - public JpaToscaServiceTemplate updatePolicies(@NonNull JpaToscaServiceTemplate serviceTemplate) + public ToscaServiceTemplate updatePolicies(@NonNull ToscaServiceTemplate serviceTemplate) throws PfModelException { return null; } @Override - public JpaToscaServiceTemplate deletePolicies(@NonNull PfConceptKey policyKey) throws PfModelException { + public ToscaServiceTemplate deletePolicies(final String name, final String version) throws PfModelException { return null; } diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderSubImpl.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderSubImpl.java index 66c7762f8..797b1ac36 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderSubImpl.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderSubImpl.java @@ -23,7 +23,7 @@ package org.onap.policy.models.provider.impl; import lombok.NonNull; import org.onap.policy.models.provider.PolicyModelsProviderParameters; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** * Sub class to check getDummyResponse() method in base class. @@ -40,11 +40,11 @@ public class DummyPolicyModelsProviderSubImpl extends DummyPolicyModelsProviderI super(parameters); } - public JpaToscaServiceTemplate getBadDummyResponse1() { + public ToscaServiceTemplate getBadDummyResponse1() { return super.getDummyResponse("/i/dont/exist"); } - public JpaToscaServiceTemplate getBadDummyResponse2() { + public ToscaServiceTemplate getBadDummyResponse2() { return super.getDummyResponse(null); } } diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderTest.java index af76edbcb..3e13d854c 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderTest.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/DummyPolicyModelsProviderTest.java @@ -26,14 +26,13 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import org.junit.Test; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.pdp.concepts.PdpGroups; import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.provider.PolicyModelsProviderFactory; import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; /** * Test the dummy models provider implementation. @@ -53,10 +52,10 @@ public class DummyPolicyModelsProviderTest { dummyProvider.init(); - JpaToscaServiceTemplate serviceTemplate = dummyProvider.getPolicies(new PfConceptKey()); + ToscaServiceTemplate serviceTemplate = dummyProvider.getPolicies("onap.vcpe.tca", "1.0.0"); assertNotNull(serviceTemplate); - assertEquals("onap.vcpe.tca:1.0.0", - serviceTemplate.getTopologyTemplate().getPolicies().get("onap.vcpe.tca").getId()); + assertEquals("onap.policies.monitoring.cdap.tca.hi.lo.app", + serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get("onap.vcpe.tca").getType()); dummyProvider.close(); } @@ -71,15 +70,15 @@ public class DummyPolicyModelsProviderTest { PolicyModelsProvider dummyProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters); dummyProvider.init(); - assertNotNull(dummyProvider.getPolicyTypes(new PfConceptKey())); - assertNotNull(dummyProvider.createPolicyTypes(new JpaToscaServiceTemplate())); - assertNotNull(dummyProvider.updatePolicyTypes(new JpaToscaServiceTemplate())); - assertNotNull(dummyProvider.deletePolicyTypes(new PfConceptKey())); + assertNotNull(dummyProvider.getPolicyTypes("name", "version")); + assertNotNull(dummyProvider.createPolicyTypes(new ToscaServiceTemplate())); + assertNotNull(dummyProvider.updatePolicyTypes(new ToscaServiceTemplate())); + assertNotNull(dummyProvider.deletePolicyTypes("name", "version")); - assertNotNull(dummyProvider.getPolicies(new PfConceptKey())); - assertNotNull(dummyProvider.createPolicies(new JpaToscaServiceTemplate())); - assertNotNull(dummyProvider.updatePolicies(new JpaToscaServiceTemplate())); - assertNotNull(dummyProvider.deletePolicies(new PfConceptKey())); + assertNotNull(dummyProvider.getPolicies("name", "version")); + assertNotNull(dummyProvider.createPolicies(new ToscaServiceTemplate())); + assertNotNull(dummyProvider.updatePolicies(new ToscaServiceTemplate())); + assertNotNull(dummyProvider.deletePolicies("name", "version")); assertNotNull(dummyProvider.getOperationalPolicy("policy_id")); assertNotNull(dummyProvider.createOperationalPolicy(new LegacyOperationalPolicy())); @@ -97,8 +96,8 @@ public class DummyPolicyModelsProviderTest { assertNotNull(dummyProvider.deletePdpGroups("filter")); assertThatThrownBy(() -> { - dummyProvider.getPolicyTypes(null); - }).hasMessage("policyTypeKey is marked @NonNull but is null"); + dummyProvider.getPolicyTypes(null, null); + }).hasMessage("name is marked @NonNull but is null"); assertThatThrownBy(() -> { dummyProvider.createPolicyTypes(null); }).hasMessage("serviceTemplate is marked @NonNull but is null"); @@ -106,12 +105,12 @@ public class DummyPolicyModelsProviderTest { dummyProvider.updatePolicyTypes(null); }).hasMessage("serviceTemplate is marked @NonNull but is null"); assertThatThrownBy(() -> { - dummyProvider.deletePolicyTypes(null); - }).hasMessage("policyTypeKey is marked @NonNull but is null"); + dummyProvider.deletePolicyTypes(null, null); + }).hasMessage("name is marked @NonNull but is null"); assertThatThrownBy(() -> { - dummyProvider.getPolicies(null); - }).hasMessage("policyKey is marked @NonNull but is null"); + dummyProvider.getPolicies(null, null); + }).hasMessage("name is marked @NonNull but is null"); assertThatThrownBy(() -> { dummyProvider.createPolicies(null); }).hasMessage("serviceTemplate is marked @NonNull but is null"); @@ -119,8 +118,8 @@ public class DummyPolicyModelsProviderTest { dummyProvider.updatePolicies(null); }).hasMessage("serviceTemplate is marked @NonNull but is null"); assertThatThrownBy(() -> { - dummyProvider.deletePolicies(null); - }).hasMessage("policyKey is marked @NonNull but is null"); + dummyProvider.deletePolicies(null, null); + }).hasMessage("name is marked @NonNull but is null"); assertThatThrownBy(() -> { dummyProvider.getOperationalPolicy(null); diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java index e0aba8a9e..b29e1d642 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java @@ -22,29 +22,26 @@ package org.onap.policy.models.provider.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.Base64; +import java.util.Map; import lombok.NonNull; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.provider.PolicyModelsProviderFactory; import org.onap.policy.models.provider.PolicyModelsProviderParameters; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; @@ -58,7 +55,7 @@ public class PolicyPersistenceTest { // Logger for this class private static final Logger LOGGER = LoggerFactory.getLogger(PolicyPersistenceTest.class); - private Gson gson; + private StandardCoder standardCoder; private PolicyModelsProvider databaseProvider; @@ -101,7 +98,7 @@ public class PolicyPersistenceTest { */ @Before public void setupGson() { - gson = new ToscaServiceTemplateMessageBodyHandler().getGson(); + standardCoder = new StandardCoder(); } @After @@ -141,19 +138,20 @@ public class PolicyPersistenceTest { * @throws Exception any exception thrown */ public void testJsonStringPolicyPersistence(@NonNull final String policyString) throws Exception { - JpaToscaServiceTemplate serviceTemplate = gson.fromJson(policyString, JpaToscaServiceTemplate.class); + ToscaServiceTemplate serviceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class); assertNotNull(serviceTemplate); - LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); - assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); databaseProvider.createPolicies(serviceTemplate); - for (PfConceptKey policyKey : serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().keySet()) { - JpaToscaPolicy incomingPolicy = serviceTemplate.getTopologyTemplate().getPolicies().get(policyKey); - JpaToscaPolicy databasePolicy = - databaseProvider.getPolicies(policyKey).getTopologyTemplate().getPolicies().get(policyKey); - assertEquals(incomingPolicy, databasePolicy); + for (Map policyMap : serviceTemplate.getToscaTopologyTemplate().getPolicies()) { + for (ToscaPolicy policy : policyMap.values()) { + ToscaServiceTemplate goToscaServiceTemplate = + databaseProvider.getPolicies(policy.getName(), policy.getVersion()); + + assertEquals(goToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0) + .get(policy.getName()).getType(), policy.getType()); + } } } } diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java index bd85358b3..f2b867604 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java @@ -22,10 +22,8 @@ package org.onap.policy.models.provider.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.Base64; @@ -35,16 +33,14 @@ import lombok.NonNull; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.provider.PolicyModelsProviderFactory; import org.onap.policy.models.provider.PolicyModelsProviderParameters; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; @@ -58,7 +54,7 @@ public class PolicyToscaPersistenceTest { // Logger for this class private static final Logger LOGGER = LoggerFactory.getLogger(PolicyToscaPersistenceTest.class); - private Gson gson; + private StandardCoder standardCoder; private PolicyModelsProvider databaseProvider; @@ -97,11 +93,11 @@ public class PolicyToscaPersistenceTest { } /** - * Set up GSON. + * Set up the standard coder. */ @Before - public void setupGson() { - gson = new ToscaServiceTemplateMessageBodyHandler().getGson(); + public void setupStandardCoder() { + standardCoder = new StandardCoder(); } @After @@ -141,19 +137,18 @@ public class PolicyToscaPersistenceTest { * @throws Exception any exception thrown */ public void testJsonStringPolicyPersistence(@NonNull final String policyString) throws Exception { - JpaToscaServiceTemplate serviceTemplate = gson.fromJson(policyString, JpaToscaServiceTemplate.class); + ToscaServiceTemplate serviceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class); assertNotNull(serviceTemplate); - LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); - assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); databaseProvider.createPolicies(serviceTemplate); - for (PfConceptKey policyKey : serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().keySet()) { - JpaToscaPolicy incomingPolicy = serviceTemplate.getTopologyTemplate().getPolicies().get(policyKey); - JpaToscaPolicy databasePolicy = - databaseProvider.getPolicies(policyKey).getTopologyTemplate().getPolicies().get(policyKey); - assertEquals(incomingPolicy, databasePolicy); + for (String policyKey : serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).keySet()) { + ToscaPolicy incomingPolicy = serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey); + ToscaPolicy databasePolicy = + databaseProvider.getPolicies(incomingPolicy.getName(), incomingPolicy.getVersion()) + .getToscaTopologyTemplate().getPolicies().get(0).get(policyKey); + assertEquals(incomingPolicy.getType(), databasePolicy.getType()); } } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java index 13b4adf23..4623b20e8 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConstraint.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -38,4 +39,17 @@ public class ToscaConstraint { private List validValues; private String equal; + + @SerializedName("greater_than") + private String greaterThan; + + @SerializedName("greater_or_equal") + private String greaterOrEqual; + + @SerializedName("less_than") + private String lessThan; + + @SerializedName("less_or_equal") + private String lessOrEqual; + } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaDataType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaDataType.java index 9aae32040..b07163b6e 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaDataType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaDataType.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -22,9 +23,11 @@ package org.onap.policy.models.tosca.authorative.concepts; -import com.google.gson.annotations.SerializedName; +import java.util.List; import java.util.Map; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; /** * Class to represent TOSCA data type matching input/output from/to client. @@ -32,16 +35,10 @@ import lombok.Data; * @author Chenfei Gao (cgao@research.att.com) */ @Data -public class ToscaDataType { - - @SerializedName("derived_from") - private String derivedFrom; - - private String version; - - private Map metadata; - - private String description; +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +public class ToscaDataType extends ToscaEntity { + private List constraints; private Map properties; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntity.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntity.java new file mode 100644 index 000000000..87d0d9a75 --- /dev/null +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntity.java @@ -0,0 +1,74 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Model + * ================================================================================ + * 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.tosca.authorative.concepts; + +import com.google.gson.annotations.SerializedName; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; + +import org.onap.policy.models.base.PfNameVersion; + +/** + * Class to represent TOSCA data type matching input/output from/to client. + * + * @author Chenfei Gao (cgao@research.att.com) + */ +@Data +@NoArgsConstructor +public class ToscaEntity implements PfNameVersion { + private String name; + + private String version; + + @SerializedName("derived_from") + private String derivedFrom; + + private Map metadata; + + private String description; + + /** + * Copy COnstructor. + * + * @param copyObject object to copy from + */ + public ToscaEntity(@NonNull ToscaEntity copyObject) { + this.name = copyObject.name; + this.version = copyObject.version; + this.derivedFrom = copyObject.derivedFrom; + + if (copyObject.metadata != null) { + metadata = new LinkedHashMap<>(); + for (final Entry metadataEntry : copyObject.metadata.entrySet()) { + metadata.put(metadataEntry.getKey(), metadataEntry.getValue()); + } + } + } + +} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntrySchema.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntrySchema.java index a3526f757..352dfa7fa 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntrySchema.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntrySchema.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -32,9 +33,12 @@ import lombok.Data; */ @Data public class ToscaEntrySchema { + private String name; private String type; + private String typeVersion; + private String description; private List constraints; 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 e8616061d..9bd84e8eb 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 @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -24,9 +25,13 @@ package org.onap.policy.models.tosca.authorative.concepts; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Map.Entry; + import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.NonNull; +import lombok.ToString; /** * Class to represent TOSCA policy matching input/output from/to client. @@ -34,16 +39,13 @@ import lombok.NonNull; * @author Chenfei Gao (cgao@research.att.com) */ @Data +@EqualsAndHashCode(callSuper = true) @NoArgsConstructor -public class ToscaPolicy { - +@ToString +public class ToscaPolicy extends ToscaEntity { private String type; - private String version; - - private String description; - - private Map metadata; + private String typeVersion; private Map properties; @@ -53,10 +55,16 @@ public class ToscaPolicy { * @param copyObject the obejct to copy from. */ public ToscaPolicy(@NonNull ToscaPolicy copyObject) { + super(copyObject); + this.type = copyObject.type; - this.version = copyObject.version; - this.description = copyObject.description; - this.metadata = (metadata != null ? new LinkedHashMap<>(copyObject.metadata) : null); - this.properties = (properties != null ? new LinkedHashMap<>(copyObject.properties) : null); + this.typeVersion = copyObject.typeVersion; + + if (copyObject.properties != null) { + properties = new LinkedHashMap<>(); + for (final Entry propertyEntry : copyObject.properties.entrySet()) { + properties.put(propertyEntry.getKey(), propertyEntry.getValue()); + } + } } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyType.java index c46402ba1..d64a5facd 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyType.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -22,9 +23,10 @@ package org.onap.policy.models.tosca.authorative.concepts; -import com.google.gson.annotations.SerializedName; import java.util.Map; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; /** * Class to represent TOSCA policy type matching input/output from/to client. @@ -32,16 +34,8 @@ import lombok.Data; * @author Chenfei Gao (cgao@research.att.com) */ @Data -public class ToscaPolicyType { - - @SerializedName("derived_from") - private String derivedFrom; - - private String version; - - private Map metadata; - - private String description; - +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +public class ToscaPolicyType extends ToscaEntity { private Map properties; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaProperty.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaProperty.java index 9eda83b90..84f798bc9 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaProperty.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaProperty.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -33,18 +34,27 @@ import lombok.Data; */ @Data public class ToscaProperty { + public enum Status { + SUPPORTED, UNSUPPORTED, EXPERIMENTAL, DEPRECATED + } + + private String name; private String type; - private String description; + private String typeVersion; - private boolean required = false; + private String description; @SerializedName("default") private String defaultValue; - @SerializedName("entry_schema") - private ToscaEntrySchema entrySchema; + private boolean required = false; + + private Status status; private List constraints; + + @SerializedName("entry_schema") + private ToscaEntrySchema entrySchema; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaServiceTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaServiceTemplate.java index 3d1b96313..a9a1783d7 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaServiceTemplate.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaServiceTemplate.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -26,6 +27,7 @@ import com.google.gson.annotations.SerializedName; import java.util.List; import java.util.Map; import lombok.Data; +import lombok.EqualsAndHashCode; /** * Class to represent TOSCA service template matching input/output from/to client. @@ -33,7 +35,8 @@ import lombok.Data; * @author Chenfei Gao (cgao@research.att.com) */ @Data -public class ToscaServiceTemplate { +@EqualsAndHashCode(callSuper = true) +public class ToscaServiceTemplate extends ToscaEntity { @SerializedName("tosca_definitions_version") private String toscaDefinitionsVersion; diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapper.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapper.java deleted file mode 100644 index cef83486d..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapper.java +++ /dev/null @@ -1,56 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP Policy Model - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.authorative.mapping; - -import com.google.gson.Gson; -import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.mapping.JpaToscaServiceTemplateMapper; -import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; - -/** - * This class maps a TOSCA service template from client input form to internal representation and vice verse. - * - * @author Chenfei Gao (cgao@research.att.com) - */ -public class PlainToscaServiceTemplateMapper - implements JpaToscaServiceTemplateMapper { - - private Gson defaultGson = new Gson(); - private Gson customGson = new ToscaServiceTemplateMessageBodyHandler().getGson(); - - @Override - public JpaToscaServiceTemplate toToscaServiceTemplate(ToscaServiceTemplate otherPolicy) { - - String serializedServiceTemplate = defaultGson.toJson(otherPolicy); - return customGson.fromJson(serializedServiceTemplate, JpaToscaServiceTemplate.class); - - } - - @Override - public ToscaServiceTemplate fromToscaServiceTemplate(JpaToscaServiceTemplate serviceTemplate) { - - String serializedServiceTemplate = customGson.toJson(serviceTemplate); - return defaultGson.fromJson(serializedServiceTemplate, ToscaServiceTemplate.class); - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java new file mode 100644 index 000000000..0201bbea2 --- /dev/null +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java @@ -0,0 +1,157 @@ +/*- + * ============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.tosca.authorative.provider; + +import lombok.NonNull; + +import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.base.PfModelException; +import org.onap.policy.models.dao.PfDao; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; +import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; +import org.onap.policy.models.tosca.simple.provider.SimpleToscaProvider; + +/** + * This class provides the provision of information on TOSCA concepts in the database to callers. + * + * @author Liam Fallon (liam.fallon@est.tech) + */ +public class AuthorativeToscaProvider { + /** + * Get policy types. + * + * @param dao the DAO to use to access the database + * @param name the name of the policy type to get. + * @param version the version of the policy type to get. + * @return the policy types found + * @throws PfModelException on errors getting policy types + */ + public ToscaServiceTemplate getPolicyTypes(@NonNull final PfDao dao, @NonNull final String name, + @NonNull final String version) throws PfModelException { + + return new SimpleToscaProvider().getPolicyTypes(dao, new PfConceptKey(name, version)).toAuthorative(); + } + + /** + * Create policy types. + * + * @param dao the DAO to use to access the database + * @param serviceTemplate the service template containing the definition of the policy types to be created + * @return the TOSCA service template containing the created policy types + * @throws PfModelException on errors creating policy types + */ + public ToscaServiceTemplate createPolicyTypes(@NonNull final PfDao dao, + @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { + + return new SimpleToscaProvider().createPolicyTypes(dao, new JpaToscaServiceTemplate(serviceTemplate)) + .toAuthorative(); + } + + /** + * Update policy types. + * + * @param dao the DAO to use to access the database + * @param serviceTemplate the service template containing the definition of the policy types to be modified + * @return the TOSCA service template containing the modified policy types + * @throws PfModelException on errors updating policy types + */ + public ToscaServiceTemplate updatePolicyTypes(@NonNull final PfDao dao, + @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { + + return new SimpleToscaProvider().updatePolicyTypes(dao, new JpaToscaServiceTemplate(serviceTemplate)) + .toAuthorative(); + } + + /** + * Delete policy types. + * + * @param dao the DAO to use to access the database + * @param name the name of the policy type to delete. + * @param version the version of the policy type to delete. + * @return the TOSCA service template containing the policy types that were deleted + * @throws PfModelException on errors deleting policy types + */ + public ToscaServiceTemplate deletePolicyTypes(@NonNull final PfDao dao, @NonNull final String name, + @NonNull final String version) throws PfModelException { + + return new SimpleToscaProvider().deletePolicyTypes(dao, new PfConceptKey(name, version)).toAuthorative(); + } + + /** + * Get policies. + * + * @param dao the DAO to use to access the database + * @param name the name of the policy to get. + * @param version the version of the policy to get. + * @return the policies found + * @throws PfModelException on errors getting policies + */ + public ToscaServiceTemplate getPolicies(@NonNull final PfDao dao, @NonNull final String name, + @NonNull final String version) throws PfModelException { + + return new SimpleToscaProvider().getPolicies(dao, new PfConceptKey(name, version)).toAuthorative(); + } + + /** + * Create policies. + * + * @param dao the DAO to use to access the database + * @param serviceTemplate the service template containing the definitions of the new policies to be created. + * @return the TOSCA service template containing the policy types that were created + * @throws PfModelException on errors creating policies + */ + public ToscaServiceTemplate createPolicies(@NonNull final PfDao dao, + @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { + + return new SimpleToscaProvider().createPolicies(dao, new JpaToscaServiceTemplate(serviceTemplate)) + .toAuthorative(); + } + + /** + * Update policies. + * + * @param dao the DAO to use to access the database + * @param serviceTemplate the service template containing the definitions of the policies to be updated. + * @return the TOSCA service template containing the policies that were updated + * @throws PfModelException on errors updating policies + */ + public ToscaServiceTemplate updatePolicies(@NonNull final PfDao dao, + @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { + + return new SimpleToscaProvider().updatePolicies(dao, new JpaToscaServiceTemplate(serviceTemplate)) + .toAuthorative(); + } + + /** + * Delete policies. + * + * @param dao the DAO to use to access the database + * @param name the name of the policy to delete. + * @param version the version of the policy to delete. + * @return the TOSCA service template containing the policies that were deleted + * @throws PfModelException on errors deleting policies + */ + public ToscaServiceTemplate deletePolicies(@NonNull final PfDao dao, @NonNull final String name, + @NonNull final String version) throws PfModelException { + + return new SimpleToscaProvider().deletePolicies(dao, new PfConceptKey(name, version)).toAuthorative(); + } +} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java index bde53c351..fad227c34 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraint.java @@ -23,22 +23,13 @@ package org.onap.policy.models.tosca.simple.concepts; -import java.util.List; +import java.io.Serializable; -import javax.persistence.EmbeddedId; -import javax.ws.rs.core.Response; - -import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NonNull; +import lombok.NoArgsConstructor; -import org.onap.policy.models.base.PfConcept; -import org.onap.policy.models.base.PfKey; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.PfAuthorative; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; /** * Immutable class to represent the Constraint of property in TOSCA definition. @@ -46,80 +37,37 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; * @author Chenfei Gao (cgao@research.att.com) * @author Liam Fallon (liam.fallon@est.tech) */ -@Data -@EqualsAndHashCode(callSuper = false) -public abstract class JpaToscaConstraint extends PfConcept { - private static final long serialVersionUID = 6426438089914347734L; - - @EmbeddedId - private final PfReferenceKey key; +@NoArgsConstructor +@EqualsAndHashCode +public abstract class JpaToscaConstraint + implements PfAuthorative, Serializable, Comparable { + private static final long serialVersionUID = -2689472945262507455L; /** - * The Default Constructor creates a {@link JpaToscaConstraint} object with a null key. + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from */ - public JpaToscaConstraint() { - this(new PfReferenceKey()); + public JpaToscaConstraint(final ToscaConstraint authorativeConcept) { + this.fromAuthorative(authorativeConcept); } - /** - * The Key Constructor creates a {@link JpaToscaConstraint} object with the given concept key. - * - * @param key the key - */ - public JpaToscaConstraint(@NonNull final PfReferenceKey key) { - this.key = key; + @Override + public int compareTo(JpaToscaConstraint otherConstraint) { + return 0; } /** - * Copy constructor. + * Create instances of constraints of various types. * - * @param copyConcept the concept to copy from + * @param toscaConstraint the incoming constraint + * @return the constraint */ - public JpaToscaConstraint(@NonNull final JpaToscaConstraint copyConcept) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); - } - - @Override - public List getKeys() { - return getKey().getKeys(); - } - - @Override - public void clean() { - key.clean(); - } - - @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - return key.validate(result); - } - - @Override - public int compareTo(final PfConcept otherConcept) { - if (otherConcept == null) { - return -1; - } - if (this == otherConcept) { - return 0; + public static JpaToscaConstraint newInstance(final ToscaConstraint toscaConstraint) { + if (toscaConstraint.getValidValues() != null) { + return new JpaToscaConstraintValidValues(toscaConstraint); } - if (getClass() != otherConcept.getClass()) { - return this.hashCode() - otherConcept.hashCode(); - } - - final JpaToscaConstraint other = (JpaToscaConstraint) otherConcept; - return key.compareTo(other.key); - } - - @Override - public PfConcept copyTo(@NonNull final PfConcept target) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); + return (new JpaToscaConstraintLogical(toscaConstraint)); } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogical.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogical.java index 231e26188..9841cbe82 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogical.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogical.java @@ -21,16 +21,14 @@ package org.onap.policy.models.tosca.simple.concepts; import javax.persistence.Column; -import javax.ws.rs.core.Response; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NonNull; import lombok.ToString; -import org.onap.policy.models.base.PfConcept; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.base.PfReferenceKey; +import org.apache.commons.lang3.ObjectUtils; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; /** * This class represents a logical TOSCA constraint: =,>,>=,<,<=. @@ -38,82 +36,117 @@ import org.onap.policy.models.base.PfReferenceKey; @EqualsAndHashCode(callSuper = false) @ToString public class JpaToscaConstraintLogical extends JpaToscaConstraint { - private static final long serialVersionUID = 2562306457768745444L; - - public enum Operation { - EQ, - GT, - GE, - LT, - LE - } + private static final long serialVersionUID = -2730203215911880756L; @Column @NonNull @Getter - private final Operation operation; + private JpaToscaConstraintOperation operation; - /** - * The Default Constructor creates a {@link JpaToscaConstraintLogical} object with a null key. - */ - public JpaToscaConstraintLogical() { - this(new PfReferenceKey()); - } + @Column + @NonNull + @Getter + private String compareTo; /** - * The Key Constructor creates a {@link JpaToscaConstraintLogical} object with the given concept key. + * Constructor to set operation. * - * @param key the key of the constraint + * @param operation the operation to set + * @param compareTo the string to compare to */ - public JpaToscaConstraintLogical(final PfReferenceKey key) { - this(key, Operation.EQ); + public JpaToscaConstraintLogical(@NonNull final JpaToscaConstraintOperation operation, + @NonNull final String compareTo) { + this.operation = operation; + this.compareTo = compareTo; } /** - * The Key Constructor creates a {@link JpaToscaConstraintLogical} object with the given concept key and operation. - * - * @param key the key of the constraint - * @param operation the logical operation of the constraint + * Authorative constructor. * + * @param authorativeConcept the authorative concept to copy from */ - public JpaToscaConstraintLogical(final PfReferenceKey key, @NonNull final Operation operation) { - super(key); - this.operation = operation; + public JpaToscaConstraintLogical(final ToscaConstraint authorativeConcept) { + super(authorativeConcept); } - /** - * Copy constructor. - * - * @param copyConcept the concept to copy from - */ - public JpaToscaConstraintLogical(@NonNull final JpaToscaConstraintLogical copyConcept) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); + @Override + public ToscaConstraint toAuthorative() { + ToscaConstraint toscaConstraint = new ToscaConstraint(); + + switch (operation) { + case EQ: { + toscaConstraint.setEqual(compareTo); + break; + } + case GT: { + toscaConstraint.setGreaterThan(compareTo); + break; + } + case GE: { + toscaConstraint.setGreaterOrEqual(compareTo); + break; + } + case LT: { + toscaConstraint.setLessThan(compareTo); + break; + } + case LE: { + toscaConstraint.setLessOrEqual(compareTo); + break; + } + default: { + // Can't happen + } + } + + return toscaConstraint; } @Override - public int compareTo(final PfConcept otherConcept) { - if (otherConcept == null) { + public void fromAuthorative(final ToscaConstraint toscaConstraint) { + // @formatter:off + if (toscaConstraint.getEqual() != null) { + operation = JpaToscaConstraintOperation.EQ; + compareTo = toscaConstraint.getEqual(); + } + else if (toscaConstraint.getGreaterThan() != null) { + operation = JpaToscaConstraintOperation.GT; + compareTo = toscaConstraint.getGreaterThan(); + } + else if (toscaConstraint.getGreaterOrEqual() != null) { + operation = JpaToscaConstraintOperation.GE; + compareTo = toscaConstraint.getGreaterOrEqual(); + } + else if (toscaConstraint.getLessThan() != null) { + operation = JpaToscaConstraintOperation.LT; + compareTo = toscaConstraint.getLessThan(); + } + else if (toscaConstraint.getLessOrEqual() != null) { + operation = JpaToscaConstraintOperation.LE; + compareTo = toscaConstraint.getLessOrEqual(); + } + // @formatter:on + } + + @Override + public int compareTo(JpaToscaConstraint otherConstraint) { + if (otherConstraint == null) { return -1; } - if (this == otherConcept) { + if (this == otherConstraint) { return 0; } - if (getClass() != otherConcept.getClass()) { - return this.hashCode() - otherConcept.hashCode(); + if (getClass() != otherConstraint.getClass()) { + return this.hashCode() - otherConstraint.hashCode(); } - final JpaToscaConstraintLogical other = (JpaToscaConstraintLogical) otherConcept; + final JpaToscaConstraintLogical other = (JpaToscaConstraintLogical) otherConstraint; - int result = super.compareTo(other); + int result = ObjectUtils.compare(operation, other.operation); if (result != 0) { return result; } - return operation.compareTo(other.operation); - } - - @Override - public PfConcept copyTo(@NonNull final PfConcept target) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); + return ObjectUtils.compare(compareTo, other.compareTo); } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalKey.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalKey.java deleted file mode 100644 index 13902db19..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalKey.java +++ /dev/null @@ -1,155 +0,0 @@ -/*- - * ============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.tosca.simple.concepts; - -import java.util.List; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.Table; -import javax.ws.rs.core.Response; - -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NonNull; -import lombok.ToString; - -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.PfReferenceKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; - -/** - * This immutable class represents a logical TOSCA constraint: =,>,>=,<,<= that compares the owner - * of an instance of the class to the referenced key. - */ -@Entity -@Table(name = "ToscaConstraintLogicalKey") -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@EqualsAndHashCode(callSuper = false) -@ToString -public final class JpaToscaConstraintLogicalKey extends JpaToscaConstraintLogical { - private static final long serialVersionUID = -2420828090326264341L; - - @Column - @NonNull - @Getter - private final PfKey compareToKey; - - /** - * The Default Constructor creates a {@link JpaToscaConstraintLogicalKey} object with a null key. - */ - public JpaToscaConstraintLogicalKey() { - this(new PfReferenceKey()); - } - - /** - * The Key Constructor creates a {@link JpaToscaConstraintLogicalKey} object with the given concept - * key. - * - * @param key the key of the constraint - */ - public JpaToscaConstraintLogicalKey(final PfReferenceKey key) { - this(key, Operation.EQ, PfConceptKey.getNullKey()); - } - - /** - * The Key Constructor creates a {@link JpaToscaConstraintLogicalKey} object with the given concept - * key, operation, and compare key. - * - * @param key the key of the constraint - * @param operation the logical operation of the constraint - * @param compareToKey the key of the object to which the object that owns this constraint will - * be compared - */ - public JpaToscaConstraintLogicalKey(final PfReferenceKey key, @NonNull final Operation operation, - @NonNull final PfKey compareToKey) { - super(key, operation); - this.compareToKey = compareToKey; - } - - /** - * Copy constructor. - * - * @param copyConcept the concept to copy from - */ - public JpaToscaConstraintLogicalKey(@NonNull final JpaToscaConstraintLogical copyConcept) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); - } - - @Override - public List getKeys() { - final List keyList = super.getKeys(); - keyList.addAll(compareToKey.getKeys()); - return keyList; - } - - @Override - public void clean() { - super.clean(); - compareToKey.clean(); - } - - @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); - - if (compareToKey.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "comparison key is a null key")); - } - - return result; - } - - @Override - public int compareTo(final PfConcept otherConcept) { - if (otherConcept == null) { - return -1; - } - if (this == otherConcept) { - return 0; - } - if (getClass() != otherConcept.getClass()) { - return this.hashCode() - otherConcept.hashCode(); - } - - final JpaToscaConstraintLogicalKey other = (JpaToscaConstraintLogicalKey) otherConcept; - - int result = super.compareTo(other); - if (result != 0) { - return result; - } - - return compareToKey.compareTo(other.compareToKey); - } - - @Override - public PfConcept copyTo(@NonNull final PfConcept target) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalString.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalString.java deleted file mode 100644 index 512127343..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalString.java +++ /dev/null @@ -1,137 +0,0 @@ -/*- - * ============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.tosca.simple.concepts; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.Table; -import javax.ws.rs.core.Response; - -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NonNull; - -import org.onap.policy.common.utils.validation.ParameterValidationUtils; -import org.onap.policy.models.base.PfConcept; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; - -/** - * This class represents a logical TOSCA constraint: =,>,>=,<,<= that compares the owner of an - * instance of the class to the given string. - */ -@Entity -@Table(name = "ToscaConstraintLogicalString") -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@EqualsAndHashCode(callSuper = false) -public class JpaToscaConstraintLogicalString extends JpaToscaConstraintLogical { - private static final long serialVersionUID = 8167550632122339195L; - - @Column - @NonNull - @Getter - private final String compareToString; - - /** - * The Default Constructor creates a {@link JpaToscaConstraintLogicalString} object with a null key. - */ - public JpaToscaConstraintLogicalString() { - this(new PfReferenceKey()); - } - - /** - * The Key Constructor creates a {@link JpaToscaConstraintLogicalString} object with the given concept - * key. - * - * @param key the key of the constraint - */ - public JpaToscaConstraintLogicalString(final PfReferenceKey key) { - this(key, Operation.EQ, ""); - } - - /** - * The Key Constructor creates a {@link JpaToscaConstraintLogicalString} object with the given concept - * key, operation, and compare string. - * - * @param key the key of the constraint - * @param operation the logical operation of the constraint - * @param compareToString the key of the object to which the object that owns this constraint will - * be compared - */ - public JpaToscaConstraintLogicalString(final PfReferenceKey key, @NonNull final Operation operation, - @NonNull final String compareToString) { - super(key, operation); - this.compareToString = compareToString.trim(); - } - - /** - * Copy constructor. - * - * @param copyConcept the concept to copy from - */ - public JpaToscaConstraintLogicalString(@NonNull final JpaToscaConstraintLogical copyConcept) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); - } - - @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); - - if (!ParameterValidationUtils.validateStringParameter(compareToString)) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "comparison string is null or blank")); - } - - return result; - } - - @Override - public int compareTo(final PfConcept otherConcept) { - if (otherConcept == null) { - return -1; - } - if (this == otherConcept) { - return 0; - } - if (getClass() != otherConcept.getClass()) { - return this.hashCode() - otherConcept.hashCode(); - } - - final JpaToscaConstraintLogicalString other = (JpaToscaConstraintLogicalString) otherConcept; - - int result = super.compareTo(other); - if (result != 0) { - return result; - } - - return compareToString.compareTo(other.compareToString); - } - - @Override - public PfConcept copyTo(@NonNull final PfConcept target) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintOperation.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintOperation.java new file mode 100644 index 000000000..0422ae273 --- /dev/null +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintOperation.java @@ -0,0 +1,46 @@ +/*- + * ============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.tosca.simple.concepts; + +/** + * ENUM for TOSCA constraint operations. + * + * @author Liam Fallon (liam.fallon@est.tech) + */ +public enum JpaToscaConstraintOperation { + // @formatter:off + EQ("equal_to"), + GT("greater_than"), + GE("greater_or_equal"), + LT("less_than"), + LE("less_or_equal"); + // @formatter:on + + private final String toscaToken; + + private JpaToscaConstraintOperation(final String toscaToken) { + this.toscaToken = toscaToken; + } + + public String getToscaToken() { + return toscaToken; + } +} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintValidValues.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintValidValues.java index 608605f4e..248ca496c 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintValidValues.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintValidValues.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -20,20 +21,17 @@ package org.onap.policy.models.tosca.simple.concepts; -import com.google.gson.annotations.SerializedName; - -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import javax.persistence.ElementCollection; -import javax.ws.rs.core.Response; -import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.NonNull; +import lombok.ToString; -import org.onap.policy.models.base.PfConcept; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.base.PfReferenceKey; +import org.onap.policy.models.base.PfUtils; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; /** * This class represents valid_values TOSCA constraint. @@ -41,81 +39,64 @@ import org.onap.policy.models.base.PfReferenceKey; * @author Chenfei Gao (cgao@research.att.com) */ @EqualsAndHashCode(callSuper = false) -@Data +@ToString public class JpaToscaConstraintValidValues extends JpaToscaConstraint { - private static final long serialVersionUID = 3152323457560746844L; + private static final long serialVersionUID = -5060193250508635456L; - @SerializedName("valid_values") - @NonNull @ElementCollection - private final List validValues; + @NonNull + @Getter + private List validValues; /** - * The Default Constructor creates a {@link JpaToscaConstraintValidValues} object with a null key. + * Constructor to set the valid values. + * + * @param validValues the valid values that are allowed */ - public JpaToscaConstraintValidValues() { - this(new PfReferenceKey()); + public JpaToscaConstraintValidValues(@NonNull final List validValues) { + this.validValues = validValues; } /** - * The Key Constructor creates a {@link JpaToscaConstraintValidValues} object with the given concept key. + * Authorative constructor. * - * @param key the key of the constraint + * @param authorativeConcept the authorative concept to copy from */ - public JpaToscaConstraintValidValues(final PfReferenceKey key) { - super(key); - validValues = new LinkedList<>(); + public JpaToscaConstraintValidValues(final ToscaConstraint authorativeConcept) { + super(authorativeConcept); } - /** - * The Key Constructor creates a {@link JpaToscaConstraintLogical} object with the given concept key - * and valid values list. - * - * @param key the key of the constraint - * @param validValues the valid values list of the constraint - * - */ - public JpaToscaConstraintValidValues(final PfReferenceKey key, @NonNull final List validValues) { - super(key); - this.validValues = validValues; + @Override + public ToscaConstraint toAuthorative() { + ToscaConstraint toscaConstraint = new ToscaConstraint(); + + toscaConstraint.setValidValues(validValues); + + return toscaConstraint; } - /** - * Copy constructor. - * - * @param copyConcept the concept to copy from - */ - public JpaToscaConstraintValidValues(@NonNull final JpaToscaConstraintValidValues copyConcept) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); + @Override + public void fromAuthorative(final ToscaConstraint toscaConstraint) { + if (toscaConstraint.getValidValues() != null) { + validValues = new ArrayList<>(); + validValues.addAll(toscaConstraint.getValidValues()); + } } @Override - public int compareTo(final PfConcept otherConcept) { - if (otherConcept == null) { + public int compareTo(JpaToscaConstraint otherConstraint) { + if (otherConstraint == null) { return -1; } - if (this == otherConcept) { + if (this == otherConstraint) { return 0; } - if (getClass() != otherConcept.getClass()) { - return this.hashCode() - otherConcept.hashCode(); - } - - final JpaToscaConstraintValidValues other = (JpaToscaConstraintValidValues) otherConcept; - - int result = super.compareTo(other); - if (result != 0) { - return result; + if (getClass() != otherConstraint.getClass()) { + return this.hashCode() - otherConstraint.hashCode(); } - if (validValues.equals(other.validValues)) { - return 0; - } - return -1; - } + final JpaToscaConstraintValidValues other = (JpaToscaConstraintValidValues) otherConstraint; - @Override - public PfConcept copyTo(@NonNull final PfConcept target) { - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); + return PfUtils.compareObjects(validValues, other.validValues); } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataType.java index 0035eb015..cf1150af8 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataType.java @@ -24,7 +24,10 @@ package org.onap.policy.models.tosca.simple.concepts; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import javax.persistence.ElementCollection; import javax.persistence.Entity; @@ -37,13 +40,18 @@ import lombok.EqualsAndHashCode; import lombok.NonNull; 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; +import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; import org.onap.policy.models.base.PfValidationMessage; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; +import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType; +import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; /** * Class to represent custom data type in TOSCA definition. @@ -56,14 +64,14 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = true) -public class JpaToscaDataType extends JpaToscaEntityType { +public class JpaToscaDataType extends JpaToscaEntityType implements PfAuthorative { private static final long serialVersionUID = -3922690413436539164L; @ElementCollection private List constraints; @ElementCollection - private List properties; + private Map properties; /** * The Default Constructor creates a {@link JpaToscaDataType} object with a null key. @@ -90,18 +98,72 @@ public class JpaToscaDataType extends JpaToscaEntityType { super(copyConcept); } + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaToscaDataType(final ToscaDataType authorativeConcept) { + this.fromAuthorative(authorativeConcept); + } + @Override - public List getKeys() { - final List keyList = super.getKeys(); + public ToscaDataType toAuthorative() { + ToscaDataType toscaDataType = new ToscaDataType(); + super.setToscaEntity(toscaDataType); + super.toAuthorative(); if (constraints != null) { + List toscaConstraints = new ArrayList<>(); + for (JpaToscaConstraint constraint : constraints) { - keyList.addAll(constraint.getKeys()); + toscaConstraints.add(constraint.toAuthorative()); } + + toscaDataType.setConstraints(toscaConstraints); } if (properties != null) { - for (JpaToscaProperty property : properties) { + Map propertyMap = new LinkedHashMap<>(); + + for (Entry entry : properties.entrySet()) { + propertyMap.put(entry.getKey(), entry.getValue().toAuthorative()); + } + + toscaDataType.setProperties(propertyMap); + } + + return toscaDataType; + } + + @Override + public void fromAuthorative(final ToscaDataType toscaDataType) { + super.fromAuthorative(toscaDataType); + + if (toscaDataType.getConstraints() != null) { + constraints = new ArrayList<>(); + + for (ToscaConstraint toscaConstraint: toscaDataType.getConstraints()) { + constraints.add(JpaToscaConstraint.newInstance(toscaConstraint)); + } + } + + if (toscaDataType.getProperties() != null) { + properties = new LinkedHashMap<>(); + for (Entry toscaPropertyEntry : toscaDataType.getProperties().entrySet()) { + JpaToscaProperty jpaProperty = new JpaToscaProperty(toscaPropertyEntry.getValue()); + jpaProperty.setKey(new PfReferenceKey(getKey(), toscaPropertyEntry.getKey())); + properties.put(toscaPropertyEntry.getKey(), jpaProperty); + } + } + } + + @Override + public List getKeys() { + final List keyList = super.getKeys(); + + if (properties != null) { + for (JpaToscaProperty property : properties.values()) { keyList.addAll(property.getKeys()); } } @@ -113,14 +175,8 @@ public class JpaToscaDataType extends JpaToscaEntityType { public void clean() { super.clean(); - if (constraints != null) { - for (JpaToscaConstraint constraint : constraints) { - constraint.clean(); - } - } - if (properties != null) { - for (JpaToscaProperty property : properties) { + for (JpaToscaProperty property : properties.values()) { property.clean(); } } @@ -154,8 +210,6 @@ public class JpaToscaDataType extends JpaToscaEntityType { if (constraint == null) { result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, "data type constraint may not be null ")); - } else { - result = constraint.validate(result); } } return result; @@ -170,7 +224,7 @@ public class JpaToscaDataType extends JpaToscaEntityType { private PfValidationResult validateProperties(final PfValidationResult resultIn) { PfValidationResult result = resultIn; - for (JpaToscaProperty property : properties) { + for (JpaToscaProperty property : properties.values()) { if (property == null) { result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, "data type property may not be null ")); @@ -221,8 +275,7 @@ public class JpaToscaDataType extends JpaToscaEntityType { if (constraints == null) { copy.setConstraints(null); - } - else { + } else { final List newConstraints = new ArrayList<>(); for (final JpaToscaConstraint constraint : constraints) { newConstraints.add(constraint); // Constraints are immutable @@ -232,15 +285,14 @@ public class JpaToscaDataType extends JpaToscaEntityType { if (properties == null) { copy.setProperties(null); - } - else { - final List newProperties = new ArrayList<>(); - for (final JpaToscaProperty property : properties) { - newProperties.add(new JpaToscaProperty(property)); + } else { + final Map newProperties = new LinkedHashMap<>(); + for (final Entry propertyEntry : properties.entrySet()) { + newProperties.put(propertyEntry.getKey(), new JpaToscaProperty(propertyEntry.getValue())); } copy.setProperties(newProperties); } return copy; } -} \ No newline at end of file +} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypes.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypes.java index 7fedd063c..67d4ecf4f 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypes.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypes.java @@ -20,6 +20,7 @@ package org.onap.policy.models.tosca.simple.concepts; +import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -33,6 +34,7 @@ import lombok.EqualsAndHashCode; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType; /** * This class is a container for TOSCA data types. @@ -44,23 +46,23 @@ import org.onap.policy.models.base.PfConceptKey; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = true) -public class JpaToscaDataTypes extends PfConceptContainer { +public class JpaToscaDataTypes extends PfConceptContainer { private static final long serialVersionUID = 2941102271022190348L; public static final String DEFAULT_NAME = "ToscaDataTypesSimple"; public static final String DEFAULT_VERSION = "1.0.0"; /** - * The Default Constructor creates a {@link JpaToscaDataTypes} object with a null artifact key - * and creates an empty concept map. + * The Default Constructor creates a {@link JpaToscaDataTypes} object with a null artifact key and creates an empty + * concept map. */ public JpaToscaDataTypes() { super(new PfConceptKey(DEFAULT_NAME, DEFAULT_VERSION)); } /** - * The Key Constructor creates a {@link JpaToscaDataTypes} object with the given artifact key - * and creates an empty concept map. + * The Key Constructor creates a {@link JpaToscaDataTypes} object with the given artifact key and creates an empty + * concept map. * * @param key the concept key */ @@ -86,4 +88,13 @@ public class JpaToscaDataTypes extends PfConceptContainer { public JpaToscaDataTypes(final JpaToscaDataTypes copyConcept) { super(copyConcept); } + + /** + * Authorative constructor. + * + * @param authorativeConceptMapList the authorative concept to copy from + */ + public JpaToscaDataTypes(final List> authorativeConceptMapList) { + this.fromAuthorative(authorativeConceptMapList); + } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java index e7d51a500..f2ab2460f 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java @@ -20,6 +20,7 @@ package org.onap.policy.models.tosca.simple.concepts; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -39,6 +40,7 @@ import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; import org.onap.policy.common.utils.validation.Assertions; import org.onap.policy.common.utils.validation.ParameterValidationUtils; +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; @@ -46,6 +48,7 @@ import org.onap.policy.models.base.PfUtils; import org.onap.policy.models.base.PfValidationMessage; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; /** * Class to represent the EntrySchema of list/map property in TOSCA definition. @@ -53,7 +56,7 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @MappedSuperclass @Data @EqualsAndHashCode(callSuper = false) -public class JpaToscaEntityType extends PfConcept { +public class JpaToscaEntityType extends PfConcept implements PfAuthorative { private static final long serialVersionUID = -1330661834220739393L; @EmbeddedId @@ -74,6 +77,8 @@ public class JpaToscaEntityType extends PfConcept { @Column private String description; + + private transient T toscaEntity; // @formatter:on /** @@ -97,10 +102,81 @@ public class JpaToscaEntityType extends PfConcept { * * @param copyConcept the concept to copy from */ - public JpaToscaEntityType(final JpaToscaEntityType copyConcept) { + public JpaToscaEntityType(final JpaToscaEntityType copyConcept) { super(copyConcept); } + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaToscaEntityType(final T authorativeConcept) { + this.fromAuthorative(authorativeConcept); + } + + @Override + public T toAuthorative() { + toscaEntity.setName(getKey().getName()); + toscaEntity.setVersion(getKey().getVersion()); + + if (derivedFrom != null) { + toscaEntity.setDerivedFrom(derivedFrom.getId()); + } + + if (description != null) { + toscaEntity.setDescription(description); + } + + if (metadata != null) { + Map metadataMap = new LinkedHashMap<>(); + + for (Entry entry : metadata.entrySet()) { + metadataMap.put(entry.getKey(), entry.getValue()); + } + + toscaEntity.setMetadata(metadataMap); + } + + return toscaEntity; + } + + @Override + public void fromAuthorative(T toscaEntity) { + key = new PfConceptKey(); + + if (toscaEntity.getName() != null) { + key.setName(toscaEntity.getName()); + } + + if (toscaEntity.getVersion() != null) { + key.setVersion(toscaEntity.getVersion()); + } + + + if (toscaEntity.getDerivedFrom() != null) { + // CHeck if the derived from field contains a name-version ID + if (toscaEntity.getDerivedFrom().contains(":")) { + derivedFrom = new PfConceptKey(toscaEntity.getDerivedFrom()); + } + else { + derivedFrom = new PfConceptKey(toscaEntity.getDerivedFrom(), PfKey.NULL_KEY_VERSION); + } + } + + if (toscaEntity.getDescription() != null) { + description = toscaEntity.getDescription(); + } + + if (toscaEntity.getMetadata() != null) { + metadata = new LinkedHashMap<>(); + + for (Entry metadataEntry : toscaEntity.getMetadata().entrySet()) { + metadata.put(metadataEntry.getKey(), metadataEntry.getValue()); + } + } + } + @Override public List getKeys() { final List keyList = getKey().getKeys(); @@ -176,7 +252,8 @@ public class JpaToscaEntityType extends PfConcept { return this.hashCode() - otherConcept.hashCode(); } - final JpaToscaEntityType other = (JpaToscaEntityType) otherConcept; + @SuppressWarnings("unchecked") + final JpaToscaEntityType other = (JpaToscaEntityType) otherConcept; if (!key.equals(other.key)) { return key.compareTo(other.key); } @@ -199,7 +276,8 @@ public class JpaToscaEntityType extends PfConcept { final Object copyObject = target; Assertions.instanceOf(copyObject, PfConcept.class); - final JpaToscaEntityType copy = ((JpaToscaEntityType) copyObject); + @SuppressWarnings("unchecked") + final JpaToscaEntityType copy = ((JpaToscaEntityType) copyObject); copy.setKey(new PfConceptKey(key)); copy.setDerivedFrom(derivedFrom != null ? new PfConceptKey(derivedFrom) : null); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntrySchema.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntrySchema.java index e5ae20e84..1177368b2 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntrySchema.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntrySchema.java @@ -23,31 +23,29 @@ package org.onap.policy.models.tosca.simple.concepts; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.Column; import javax.persistence.ElementCollection; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; import org.onap.policy.common.utils.validation.Assertions; -import org.onap.policy.models.base.PfConcept; +import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; -import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; import org.onap.policy.models.base.PfValidationMessage; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; +import org.onap.policy.models.tosca.authorative.concepts.ToscaEntrySchema; /** @@ -56,17 +54,13 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; * @author Chenfei Gao (cgao@research.att.com) * @author Liam Fallon (liam.fallon@est.tech) */ -@Entity -@Table(name = "ToscaEntrySchema") -@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = false) -public class JpaToscaEntrySchema extends PfConcept { +@NoArgsConstructor +public class JpaToscaEntrySchema + implements PfAuthorative, Serializable, Comparable { private static final long serialVersionUID = 3645882081163287058L; - @EmbeddedId - private PfReferenceKey key; - @Column private PfConceptKey type; @@ -76,30 +70,12 @@ public class JpaToscaEntrySchema extends PfConcept { @ElementCollection private List constraints; - /** - * The Default Constructor creates a {@link JpaToscaEntrySchema} object with a null key. - */ - public JpaToscaEntrySchema() { - this(new PfReferenceKey()); - } - - /** - * The Key Constructor creates a {@link JpaToscaEntrySchema} object with the given concept key. - * - * @param key the key - */ - public JpaToscaEntrySchema(@NonNull final PfReferenceKey key) { - this(key, new PfConceptKey()); - } - /** * The full constructor creates a {@link JpaToscaEntrySchema} object with mandatory fields. * - * @param key the key * @param type the type of the entry schema */ - public JpaToscaEntrySchema(@NonNull final PfReferenceKey key, @NonNull final PfConceptKey type) { - this.key = key; + public JpaToscaEntrySchema(@NonNull final PfConceptKey type) { this.type = type; } @@ -108,68 +84,95 @@ public class JpaToscaEntrySchema extends PfConcept { * * @param copyConcept the concept to copy from */ - public JpaToscaEntrySchema(final JpaToscaEntrySchema copyConcept) { - super(copyConcept); + public JpaToscaEntrySchema(@NonNull final JpaToscaEntrySchema copyConcept) { + copyConcept.copyTo(this); + } + + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaToscaEntrySchema(final ToscaEntrySchema authorativeConcept) { + this.fromAuthorative(authorativeConcept); } @Override - public List getKeys() { - final List keyList = getKey().getKeys(); + public ToscaEntrySchema toAuthorative() { + ToscaEntrySchema toscaEntrySchema = new ToscaEntrySchema(); - keyList.addAll(type.getKeys()); + toscaEntrySchema.setType(type.getName()); + toscaEntrySchema.setTypeVersion(type.getVersion()); + + toscaEntrySchema.setDescription(description); if (constraints != null) { + List toscaConstraints = new ArrayList<>(); + for (JpaToscaConstraint constraint : constraints) { - keyList.addAll(constraint.getKeys()); + toscaConstraints.add(constraint.toAuthorative()); } + + toscaEntrySchema.setConstraints(toscaConstraints); } - return keyList; + return toscaEntrySchema; } @Override - public void clean() { - key.clean(); + public void fromAuthorative(final ToscaEntrySchema toscaEntrySchema) { + if (toscaEntrySchema.getTypeVersion() != null) { + type = new PfConceptKey(toscaEntrySchema.getType(), toscaEntrySchema.getTypeVersion()); + } else { + type = new PfConceptKey(toscaEntrySchema.getType(), PfKey.NULL_KEY_VERSION); + } - type.clean(); - description = (description != null ? description.trim() : null); + description = toscaEntrySchema.getDescription(); - if (constraints != null) { - for (JpaToscaConstraint constraint : constraints) { - constraint.clean(); + if (toscaEntrySchema.getConstraints() != null) { + constraints = new ArrayList<>(); + + for (ToscaConstraint toscaConstraint : toscaEntrySchema.getConstraints()) { + constraints.add(JpaToscaConstraint.newInstance(toscaConstraint)); } } } - @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public List getKeys() { + return type.getKeys(); + } - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } + public void clean() { + type.clean(); + description = (description != null ? description.trim() : null); + } - result = key.validate(result); + /** + * Validate the entry schema. + * + * @param resultIn the incoming result + * @return the ooutput result witht he result of this validation + */ + public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { + PfValidationResult result = resultIn; if (type == null || type.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "entry schema type may not be null")); + result.addValidationMessage(new PfValidationMessage(new PfConceptKey("EntrySchema", PfKey.NULL_KEY_VERSION), + this.getClass(), ValidationResult.INVALID, "entry schema type may not be null")); } if (description != null && description.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "entry schema description may not be blank")); + result.addValidationMessage(new PfValidationMessage(new PfConceptKey("EntrySchema", PfKey.NULL_KEY_VERSION), + this.getClass(), ValidationResult.INVALID, "entry schema description may not be blank")); } if (constraints != null) { for (JpaToscaConstraint constraint : constraints) { if (constraint == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property constraint may not be null ")); - } else { - result = constraint.validate(result); + result.addValidationMessage( + new PfValidationMessage(new PfConceptKey("EntrySchema", PfKey.NULL_KEY_VERSION), + this.getClass(), ValidationResult.INVALID, "property constraint may not be null ")); } } } @@ -178,25 +181,13 @@ public class JpaToscaEntrySchema extends PfConcept { } @Override - public int compareTo(final PfConcept otherConcept) { - if (otherConcept == null) { + public int compareTo(final JpaToscaEntrySchema other) { + if (other == null) { return -1; } - if (this == otherConcept) { + if (this == other) { return 0; } - if (getClass() != otherConcept.getClass()) { - return this.hashCode() - otherConcept.hashCode(); - } - - final JpaToscaEntrySchema other = (JpaToscaEntrySchema) otherConcept; - if (!key.equals(other.key)) { - return key.compareTo(other.key); - } - - if (!type.equals(other.type)) { - return type.compareTo(other.type); - } int result = ObjectUtils.compare(description, other.description); if (result != 0) { @@ -206,12 +197,16 @@ public class JpaToscaEntrySchema extends PfConcept { return PfUtils.compareObjects(constraints, other.constraints); } - @Override - public PfConcept copyTo(@NonNull final PfConcept target) { + /** + * Copy this entry schema to another. + * + * @param target the other schemaa + * @return the copied concept + */ + public JpaToscaEntrySchema copyTo(@NonNull final JpaToscaEntrySchema target) { Assertions.instanceOf(target, JpaToscaEntrySchema.class); - final JpaToscaEntrySchema copy = ((JpaToscaEntrySchema) target); - copy.setKey(new PfReferenceKey(key)); + final JpaToscaEntrySchema copy = (target); copy.setType(new PfConceptKey(type)); copy.setDescription(description); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicies.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicies.java index d59f470dd..012d8a26f 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicies.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicies.java @@ -20,6 +20,7 @@ package org.onap.policy.models.tosca.simple.concepts; +import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -31,8 +32,10 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; +import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; /** * This class is a container for TOSCA data types. @@ -44,23 +47,24 @@ import org.onap.policy.models.base.PfConceptKey; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = true) -public class JpaToscaPolicies extends PfConceptContainer { +public class JpaToscaPolicies extends PfConceptContainer + implements PfAuthorative>> { private static final long serialVersionUID = -7526648702327776101L; public static final String DEFAULT_NAME = "ToscaPoliciesSimple"; public static final String DEFAULT_VERSION = "1.0.0"; /** - * The Default Constructor creates a {@link JpaToscaPolicies} object with a null artifact key and - * creates an empty concept map. + * The Default Constructor creates a {@link JpaToscaPolicies} object with a null artifact key and creates an empty + * concept map. */ public JpaToscaPolicies() { super(new PfConceptKey(DEFAULT_NAME, DEFAULT_VERSION)); } /** - * The Key Constructor creates a {@link JpaToscaPolicies} object with the given artifact key and - * creates an empty concept map. + * The Key Constructor creates a {@link JpaToscaPolicies} object with the given artifact key and creates an empty + * concept map. * * @param key the concept key */ @@ -86,4 +90,13 @@ public class JpaToscaPolicies extends PfConceptContainer { public JpaToscaPolicies(final JpaToscaPolicies copyConcept) { super(copyConcept); } + + /** + * Authorative constructor. + * + * @param authorativeConceptMapList the authorative concept to copy from + */ + public JpaToscaPolicies(final List> authorativeConceptMapList) { + this.fromAuthorative(authorativeConceptMapList); + } } 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 e889192d8..67a833c94 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 @@ -24,6 +24,7 @@ package org.onap.policy.models.tosca.simple.concepts; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -43,6 +44,7 @@ import lombok.NonNull; import org.onap.policy.common.utils.validation.Assertions; import org.onap.policy.common.utils.validation.ParameterValidationUtils; +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; @@ -50,6 +52,7 @@ import org.onap.policy.models.base.PfUtils; import org.onap.policy.models.base.PfValidationMessage; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; /** * Class to represent the policy in TOSCA definition. @@ -62,7 +65,7 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = true) -public class JpaToscaPolicy extends JpaToscaEntityType { +public class JpaToscaPolicy extends JpaToscaEntityType implements PfAuthorative { private static final long serialVersionUID = 3265174757061982805L; // @formatter:off @@ -119,6 +122,66 @@ public class JpaToscaPolicy extends JpaToscaEntityType { super(copyConcept); } + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaToscaPolicy(final ToscaPolicy authorativeConcept) { + this.fromAuthorative(authorativeConcept); + } + + @Override + public ToscaPolicy toAuthorative() { + ToscaPolicy toscaPolicy = new 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); + } + + if (properties != null) { + Map propertyMap = new LinkedHashMap<>(); + + for (Entry entry : properties.entrySet()) { + propertyMap.put(entry.getKey(), entry.getValue()); + } + + toscaPolicy.setProperties(propertyMap); + } + + return toscaPolicy; + } + + @Override + public void fromAuthorative(@NonNull final ToscaPolicy toscaPolicy) { + super.fromAuthorative(toscaPolicy); + + type.setName(toscaPolicy.getType()); + type.setVersion(toscaPolicy.getTypeVersion()); + if (type.getVersion() == null) { + type.setVersion(PfKey.NULL_KEY_VERSION); + } + + if (toscaPolicy.getProperties() != null) { + properties = new LinkedHashMap<>(); + + for (Entry propertyEntry : toscaPolicy.getProperties().entrySet()) { + // TODO: This is a HACK, we need to validate the properties against their + // TODO: their data type in their policy type definition in TOSCA, which means reading + // TODO: the policy type from the database and parsing the property value object correctly + // TODO: Here we are simply serializing the property value into a string and storing it + // TODO: unvalidated into the database + properties.put(propertyEntry.getKey(), propertyEntry.getValue().toString()); + } + } + } @Override public List getKeys() { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyType.java index 610987ccb..fc982965c 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyType.java @@ -24,7 +24,10 @@ package org.onap.policy.models.tosca.simple.concepts; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import javax.persistence.ElementCollection; import javax.persistence.Entity; @@ -37,13 +40,17 @@ import lombok.EqualsAndHashCode; import lombok.NonNull; 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; +import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; import org.onap.policy.models.base.PfValidationMessage; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; +import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; /** * Class to represent the policy type in TOSCA definition. @@ -57,11 +64,11 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = true) -public class JpaToscaPolicyType extends JpaToscaEntityType { +public class JpaToscaPolicyType extends JpaToscaEntityType implements PfAuthorative { private static final long serialVersionUID = -563659852901842616L; @ElementCollection - private List properties; + private Map properties; @ElementCollection private List targets; @@ -94,13 +101,55 @@ public class JpaToscaPolicyType extends JpaToscaEntityType { super(copyConcept); } + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaToscaPolicyType(final ToscaPolicyType authorativeConcept) { + this.fromAuthorative(authorativeConcept); + } + + @Override + public ToscaPolicyType toAuthorative() { + ToscaPolicyType toscaPolicyType = new ToscaPolicyType(); + super.setToscaEntity(toscaPolicyType); + super.toAuthorative(); + + if (properties != null) { + Map propertyMap = new LinkedHashMap<>(); + + for (Entry entry : properties.entrySet()) { + propertyMap.put(entry.getKey(), entry.getValue().toAuthorative()); + } + + toscaPolicyType.setProperties(propertyMap); + } + + return toscaPolicyType; + } + + @Override + public void fromAuthorative(final ToscaPolicyType toscaPolicyType) { + super.fromAuthorative(toscaPolicyType); + + // Set properties + if (toscaPolicyType.getProperties() != null) { + properties = new LinkedHashMap<>(); + for (Entry toscaPropertyEntry : toscaPolicyType.getProperties().entrySet()) { + JpaToscaProperty jpaProperty = new JpaToscaProperty(toscaPropertyEntry.getValue()); + jpaProperty.setKey(new PfReferenceKey(getKey(), toscaPropertyEntry.getKey())); + properties.put(toscaPropertyEntry.getKey(), jpaProperty); + } + } + } @Override public List getKeys() { final List keyList = super.getKeys(); if (properties != null) { - for (JpaToscaProperty property : properties) { + for (JpaToscaProperty property : properties.values()) { keyList.addAll(property.getKeys()); } } @@ -123,7 +172,7 @@ public class JpaToscaPolicyType extends JpaToscaEntityType { super.clean(); if (properties != null) { - for (JpaToscaProperty property : properties) { + for (JpaToscaProperty property : properties.values()) { property.clean(); } } @@ -169,7 +218,7 @@ public class JpaToscaPolicyType extends JpaToscaEntityType { private PfValidationResult validateProperties(final PfValidationResult resultIn) { PfValidationResult result = resultIn; - for (JpaToscaProperty property : properties) { + for (JpaToscaProperty property : properties.values()) { if (property == null) { result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, "policy property may not be null ")); @@ -258,13 +307,12 @@ public class JpaToscaPolicyType extends JpaToscaEntityType { final JpaToscaPolicyType copy = ((JpaToscaPolicyType) copyObject); super.copyTo(target); - final List newProperties = new ArrayList<>(); - if (properties == null) { copy.setProperties(null); } else { - for (final JpaToscaProperty property : properties) { - newProperties.add(new JpaToscaProperty(property)); + final Map newProperties = new LinkedHashMap<>(); + for (final Entry propertyEntry : properties.entrySet()) { + newProperties.put(propertyEntry.getKey(), new JpaToscaProperty(propertyEntry.getValue())); } copy.setProperties(newProperties); } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypes.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypes.java index ce3a8130d..af8a21a60 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypes.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypes.java @@ -20,6 +20,7 @@ package org.onap.policy.models.tosca.simple.concepts; +import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -33,6 +34,7 @@ import lombok.EqualsAndHashCode; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; /** * This class is a container for TOSCA policy types. @@ -44,23 +46,23 @@ import org.onap.policy.models.base.PfConceptKey; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = true) -public class JpaToscaPolicyTypes extends PfConceptContainer { +public class JpaToscaPolicyTypes extends PfConceptContainer { private static final long serialVersionUID = -4157979965271220098L; public static final String DEFAULT_NAME = "ToscaPolicyTypesSimple"; public static final String DEFAULT_VERSION = "1.0.0"; /** - * The Default Constructor creates a {@link JpaToscaPolicyTypes} object with a null artifact key - * and creates an empty concept map. + * The Default Constructor creates a {@link JpaToscaPolicyTypes} object with a null artifact key and creates an + * empty concept map. */ public JpaToscaPolicyTypes() { super(new PfConceptKey(DEFAULT_NAME, DEFAULT_VERSION)); } /** - * The Key Constructor creates a {@link JpaToscaPolicyTypes} object with the given artifact key and - * creates an empty concept map. + * The Key Constructor creates a {@link JpaToscaPolicyTypes} object with the given artifact key and creates an empty + * concept map. * * @param key the concept key */ @@ -86,4 +88,13 @@ public class JpaToscaPolicyTypes extends PfConceptContainer public JpaToscaPolicyTypes(final JpaToscaPolicyTypes copyConcept) { super(copyConcept); } + + /** + * Authorative constructor. + * + * @param authorativeConceptMapList the authorative concept to copy from + */ + public JpaToscaPolicyTypes(final List> authorativeConceptMapList) { + this.fromAuthorative(authorativeConceptMapList); + } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaProperty.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaProperty.java index 376c2b3b2..38d5c0938 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaProperty.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaProperty.java @@ -23,8 +23,7 @@ package org.onap.policy.models.tosca.simple.concepts; -import com.google.gson.annotations.SerializedName; - +import java.util.ArrayList; import java.util.List; import javax.persistence.Column; @@ -41,6 +40,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; @@ -49,6 +49,9 @@ import org.onap.policy.models.base.PfUtils; import org.onap.policy.models.base.PfValidationMessage; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; +import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; +import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty.Status; /** * Class to represent the property in TOSCA definition. @@ -61,13 +64,9 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = false) -public class JpaToscaProperty extends PfConcept { +public class JpaToscaProperty extends PfConcept implements PfAuthorative { private static final long serialVersionUID = 1675770231921107988L; - public enum Status { - SUPPORTED, UNSUPPORTED, EXPERIMENTAL, DEPRECATED - } - @EmbeddedId private PfReferenceKey key; @@ -81,7 +80,6 @@ public class JpaToscaProperty extends PfConcept { private boolean required = false; @Column(name = "default") - @SerializedName("default") private String defaultValue; @Column @@ -92,7 +90,6 @@ public class JpaToscaProperty extends PfConcept { private List constraints; @Column - @SerializedName("entry_schema") private JpaToscaEntrySchema entrySchema; /** @@ -131,18 +128,81 @@ public class JpaToscaProperty extends PfConcept { super(copyConcept); } + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaToscaProperty(final ToscaProperty authorativeConcept) { + this.fromAuthorative(authorativeConcept); + } + @Override - public List getKeys() { - final List keyList = getKey().getKeys(); + public ToscaProperty toAuthorative() { + ToscaProperty toscaProperty = new ToscaProperty(); - keyList.addAll(type.getKeys()); + toscaProperty.setName(key.getLocalName()); + + toscaProperty.setType(type.getName()); + toscaProperty.setTypeVersion(type.getVersion()); + + toscaProperty.setDescription(description); + toscaProperty.setRequired(required); + toscaProperty.setDefaultValue(defaultValue); + toscaProperty.setStatus(status); if (constraints != null) { + List toscaConstraints = new ArrayList<>(); + for (JpaToscaConstraint constraint : constraints) { - keyList.addAll(constraint.getKeys()); + toscaConstraints.add(constraint.toAuthorative()); + } + + toscaProperty.setConstraints(toscaConstraints); + } + + if (entrySchema != null) { + toscaProperty.setEntrySchema(entrySchema.toAuthorative()); + } + + return toscaProperty; + } + + @Override + public void fromAuthorative(ToscaProperty toscaProperty) { + this.setKey(new PfReferenceKey()); + getKey().setLocalName(toscaProperty.getName()); + + if (toscaProperty.getTypeVersion() != null) { + type = new PfConceptKey(toscaProperty.getType(), toscaProperty.getTypeVersion()); + } else { + type = new PfConceptKey(toscaProperty.getType(), PfKey.NULL_KEY_VERSION); + } + + description = toscaProperty.getDescription(); + required = toscaProperty.isRequired(); + defaultValue = toscaProperty.getDefaultValue(); + status = toscaProperty.getStatus(); + + if (toscaProperty.getConstraints() != null) { + constraints = new ArrayList<>(); + + for (ToscaConstraint toscaConstraint : toscaProperty.getConstraints()) { + constraints.add(JpaToscaConstraint.newInstance(toscaConstraint)); } } + if (toscaProperty.getEntrySchema() != null) { + entrySchema = new JpaToscaEntrySchema(toscaProperty.getEntrySchema()); + } + } + + @Override + public List getKeys() { + final List keyList = getKey().getKeys(); + + keyList.addAll(type.getKeys()); + if (entrySchema != null) { keyList.addAll(entrySchema.getKeys()); } @@ -164,12 +224,6 @@ public class JpaToscaProperty extends PfConcept { defaultValue = defaultValue.trim(); } - if (constraints != null) { - for (JpaToscaConstraint constraint : constraints) { - constraint.clean(); - } - } - if (entrySchema != null) { entrySchema.clean(); } @@ -218,8 +272,6 @@ public class JpaToscaProperty extends PfConcept { if (constraint == null) { result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "property constraint may not be null ")); - } else { - result = constraint.validate(result); } } } @@ -247,8 +299,7 @@ public class JpaToscaProperty extends PfConcept { } /** - * Compare the fields of this ToscaProperty object with the fields of the other ToscaProperty - * object. + * Compare the fields of this ToscaProperty object with the fields of the other ToscaProperty object. * * @param other the other ToscaProperty object */ @@ -296,7 +347,17 @@ public class JpaToscaProperty extends PfConcept { copy.setRequired(required); copy.setDefaultValue(defaultValue); copy.setStatus(status); - copy.constraints = constraints; // Constraints are immutable + + if (constraints == null) { + copy.setConstraints(null); + } else { + final List newConstraints = new ArrayList<>(); + for (final JpaToscaConstraint constraint : constraints) { + newConstraints.add(constraint); // Constraints are immutable + } + copy.setConstraints(newConstraints); + } + copy.setEntrySchema(entrySchema != null ? new JpaToscaEntrySchema(entrySchema) : null); return copy; diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java index fa2d2aac7..fda0c8014 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java @@ -39,16 +39,18 @@ import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; import org.onap.policy.common.utils.validation.Assertions; import org.onap.policy.common.utils.validation.ParameterValidationUtils; +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.PfValidationMessage; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** - * This class holds a full TOSCA service template. Note: Only the policy specific parts of the TOSCA - * service template are implemented. + * This class holds a full TOSCA service template. Note: Only the policy specific parts of the TOSCA service template + * are implemented. * * @author Liam Fallon (liam.fallon@est.tech) */ @@ -57,7 +59,8 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = true) -public class JpaToscaServiceTemplate extends JpaToscaEntityType { +public class JpaToscaServiceTemplate extends JpaToscaEntityType + implements PfAuthorative { private static final long serialVersionUID = 8084846046148349401L; public static final String DEFAULT_NAME = "ToscaServiceTemplateSimple"; @@ -96,8 +99,7 @@ public class JpaToscaServiceTemplate extends JpaToscaEntityType { } /** - * The full constructor creates a {@link JpaToscaServiceTemplate} object with all mandatory - * parameters. + * The full constructor creates a {@link JpaToscaServiceTemplate} object with all mandatory parameters. * * @param key the key * @param toscaDefinitionsVersion the TOSCA version string @@ -116,6 +118,70 @@ public class JpaToscaServiceTemplate extends JpaToscaEntityType { super(copyConcept); } + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaToscaServiceTemplate(final ToscaServiceTemplate authorativeConcept) { + this.fromAuthorative(authorativeConcept); + } + + @Override + public ToscaServiceTemplate toAuthorative() { + final ToscaServiceTemplate toscaServiceTemplate = new ToscaServiceTemplate(); + + super.setToscaEntity(toscaServiceTemplate); + super.toAuthorative(); + + toscaServiceTemplate.setToscaDefinitionsVersion(toscaDefinitionsVersion); + + if (dataTypes != null) { + toscaServiceTemplate.setDataTypes(dataTypes.toAuthorative()); + } + + if (policyTypes != null) { + toscaServiceTemplate.setPolicyTypes(policyTypes.toAuthorative()); + } + + if (topologyTemplate != null) { + toscaServiceTemplate.setToscaTopologyTemplate(topologyTemplate.toAuthorative()); + } + + return toscaServiceTemplate; + } + + @Override + public void fromAuthorative(ToscaServiceTemplate toscaServiceTemplate) { + super.fromAuthorative(toscaServiceTemplate); + + if (getKey().getName() == PfKey.NULL_KEY_NAME) { + getKey().setName(DEFAULT_NAME); + } + + if (getKey().getVersion() == PfKey.NULL_KEY_VERSION) { + getKey().setVersion(DEFAULT_VERSION); + } + + toscaDefinitionsVersion = toscaServiceTemplate.getToscaDefinitionsVersion(); + + if (toscaServiceTemplate.getDataTypes() != null) { + dataTypes = new JpaToscaDataTypes(); + dataTypes.fromAuthorative(toscaServiceTemplate.getDataTypes()); + } + + if (toscaServiceTemplate.getPolicyTypes() != null) { + policyTypes = new JpaToscaPolicyTypes(); + policyTypes.fromAuthorative(toscaServiceTemplate.getPolicyTypes()); + } + + + if (toscaServiceTemplate.getToscaTopologyTemplate() != null) { + topologyTemplate = new JpaToscaTopologyTemplate(); + topologyTemplate.fromAuthorative(toscaServiceTemplate.getToscaTopologyTemplate()); + } + } + @Override public List getKeys() { final List keyList = super.getKeys(); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplates.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplates.java index 39e553144..08624f653 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplates.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplates.java @@ -20,6 +20,7 @@ package org.onap.policy.models.tosca.simple.concepts; +import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -33,6 +34,7 @@ import lombok.EqualsAndHashCode; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** * This class is a container for TOSCA service templates. @@ -44,7 +46,7 @@ import org.onap.policy.models.base.PfConceptKey; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = true) -public class JpaToscaServiceTemplates extends PfConceptContainer { +public class JpaToscaServiceTemplates extends PfConceptContainer { private static final long serialVersionUID = -3053257884307604114L; /** @@ -84,4 +86,13 @@ public class JpaToscaServiceTemplates extends PfConceptContainer> authorativeConceptMapList) { + this.fromAuthorative(authorativeConceptMapList); + } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java index 095435a7f..3476258cf 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java @@ -37,12 +37,14 @@ 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.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfValidationMessage; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate; /** * This class holds a TOSCA topology template. Note: Only the policy specific parts of the TOSCA topology template are @@ -55,7 +57,7 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Data @EqualsAndHashCode(callSuper = false) -public class JpaToscaTopologyTemplate extends PfConcept { +public class JpaToscaTopologyTemplate extends PfConcept implements PfAuthorative { private static final long serialVersionUID = 8969698734673232603L; public static final String DEFAULT_LOCAL_NAME = "ToscaTopologyTemplateSimple"; @@ -96,6 +98,38 @@ public class JpaToscaTopologyTemplate extends PfConcept { super(copyConcept); } + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaToscaTopologyTemplate(final ToscaTopologyTemplate authorativeConcept) { + this.fromAuthorative(authorativeConcept); + } + + @Override + public ToscaTopologyTemplate toAuthorative() { + final ToscaTopologyTemplate toscaTopologyTemplate = new ToscaTopologyTemplate(); + + toscaTopologyTemplate.setDescription(description); + + if (policies != null) { + toscaTopologyTemplate.setPolicies(policies.toAuthorative()); + } + + return toscaTopologyTemplate; + } + + @Override + public void fromAuthorative(ToscaTopologyTemplate toscaTopologyTemplate) { + description = toscaTopologyTemplate.getDescription(); + + if (toscaTopologyTemplate.getPolicies() != null) { + policies = new JpaToscaPolicies(); + policies.fromAuthorative(toscaTopologyTemplate.getPolicies()); + } + } + @Override public List getKeys() { final List keyList = getKey().getKeys(); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTrigger.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTrigger.java index 0a32701c9..551dbe5bf 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTrigger.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTrigger.java @@ -148,12 +148,6 @@ public class JpaToscaTrigger extends PfConcept { if (targetFilter != null) { keyList.addAll(targetFilter.getKeys()); } - if (condition != null) { - keyList.addAll(condition.getKeys()); - } - if (constraint != null) { - keyList.addAll(constraint.getKeys()); - } return keyList; } @@ -170,12 +164,6 @@ public class JpaToscaTrigger extends PfConcept { if (targetFilter != null) { targetFilter.clean(); } - if (condition != null) { - condition.clean(); - } - if (constraint != null) { - constraint.clean(); - } method = (method != null ? method.trim() : method); action = action.trim(); @@ -233,8 +221,6 @@ public class JpaToscaTrigger extends PfConcept { result = (schedule != null ? schedule.validate(result) : result); result = (targetFilter != null ? targetFilter.validate(result) : result); - result = (condition != null ? condition.validate(result) : result); - result = (constraint != null ? constraint.validate(result) : result); return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypeJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypeJsonAdapter.java deleted file mode 100644 index 6b00b20b6..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypeJsonAdapter.java +++ /dev/null @@ -1,139 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; -import javax.ws.rs.core.Response; - -import lombok.NonNull; - -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * GSON type adapter for TOSCA data types. - * - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaDataTypeJsonAdapter implements JsonSerializer, JsonDeserializer { - - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaDataTypeJsonAdapter.class); - - private static final String DERIVED_FROM = "derived_from"; - private static final String DESCRIPTION = "description"; - private static final String VERSION = "version"; - private static final String PROPERTIES = "properties"; - private static final String DEFAULT_VERSION = "1.0.0"; - - @Override - public JpaToscaDataType deserialize(@NonNull final JsonElement dataTypeElement, @NonNull final Type type, - @NonNull final JsonDeserializationContext context) { - - // The incoming JSON - final JsonObject dataTypeJsonMapObject = dataTypeElement.getAsJsonObject(); - - // We should only have a single entry for the policy type - if (dataTypeJsonMapObject.entrySet().size() != 1) { - String errorMessage = "a policy type list entry may only contain one and only one policy type"; - LOGGER.debug(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); - } - - final String dataTypeName = dataTypeJsonMapObject.entrySet().iterator().next().getKey(); - final JsonObject dataTypeJsonObject = dataTypeJsonMapObject.entrySet().iterator().next() - .getValue().getAsJsonObject(); - - // Set keys - PfConceptKey dataTypeKey; - if (dataTypeJsonObject.get(VERSION) == null) { - dataTypeKey = new PfConceptKey(dataTypeName, DEFAULT_VERSION); - } else { - dataTypeKey = new PfConceptKey(dataTypeName, dataTypeJsonObject.get(VERSION).getAsString()); - } - JpaToscaDataType dataType = new JpaToscaDataType(dataTypeKey); - - // Set derived_from - dataType.setDerivedFrom(new PfConceptKey(dataTypeJsonObject.get(DERIVED_FROM).getAsString(), - DEFAULT_VERSION)); - - // Set description - if (dataTypeJsonObject.has(DESCRIPTION)) { - final String dataTypeDescription = dataTypeJsonObject.get(DESCRIPTION).getAsString(); - dataType.setDescription(dataTypeDescription); - } - - // Set properties - if (dataTypeJsonObject.has(PROPERTIES)) { - dataType.setProperties( - new ToscaPropertiesJsonAdapter().deserializeProperties(dataTypeJsonObject.get(PROPERTIES))); - for (JpaToscaProperty property : dataType.getProperties()) { - property.getKey().setParentConceptKey(dataTypeKey); - property.getType().setVersion(dataType.getKey().getVersion()); - } - } - - return dataType; - } - - @Override - public JsonElement serialize(@NonNull final JpaToscaDataType dataType, @NonNull final Type type, - @NonNull final JsonSerializationContext context) { - - JsonObject dataTypeValJsonObject = new JsonObject(); - - // Add derived_from - if (dataType.getDerivedFrom() != null) { - dataTypeValJsonObject.addProperty(DERIVED_FROM, dataType.getDerivedFrom().getName()); - } - - // Add description - if (dataType.getDescription() != null) { - dataTypeValJsonObject.addProperty(DESCRIPTION, dataType.getDescription()); - } - - // Add version - if (dataType.getKey().getVersion() != null) { - dataTypeValJsonObject.addProperty(VERSION, dataType.getKey().getVersion()); - } - - // Add properties - if (dataType.getProperties() != null) { - JsonElement propertiesJsonElement = new ToscaPropertiesJsonAdapter() - .serializeProperties(dataType.getProperties()); - dataTypeValJsonObject.add(PROPERTIES, propertiesJsonElement); - } - - JsonObject dataTypeJsonObject = new JsonObject(); - dataTypeJsonObject.add(dataType.getKey().getName(), dataTypeValJsonObject); - return dataTypeJsonObject; - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypesJsonAdapter.java deleted file mode 100644 index 6131581ad..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaDataTypesJsonAdapter.java +++ /dev/null @@ -1,94 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.JsonArray; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; -import java.util.Iterator; -import javax.ws.rs.core.Response; -import lombok.NonNull; - -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * GSON type adapter for TOSCA data types. - * - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaDataTypesJsonAdapter - implements JsonSerializer, JsonDeserializer { - - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaDataTypesJsonAdapter.class); - - @Override - public JpaToscaDataTypes deserialize(@NonNull final JsonElement dataTypesElement, @NonNull final Type type, - @NonNull final JsonDeserializationContext context) { - - // The incoming JSON - final JsonArray dataTypesJsonArray = dataTypesElement.getAsJsonArray(); - - // The outgoing object - final PfConceptKey dataTypesKey = new PfConceptKey("IncomingDataTypes", "0.0.1"); - final JpaToscaDataTypes dataTypes = new JpaToscaDataTypes(dataTypesKey); - - // Get the dataTypes - Iterator dataTypesIterator = dataTypesJsonArray.iterator(); - while (dataTypesIterator.hasNext()) { - JpaToscaDataType dataType = new ToscaDataTypeJsonAdapter().deserialize(dataTypesIterator.next(), - JpaToscaDataType.class, context); - - dataTypes.getConceptMap().put(dataType.getKey(), dataType); - } - - return dataTypes; - } - - @Override - public JsonElement serialize(@NonNull final JpaToscaDataTypes dataTypes, @NonNull final Type type, - @NonNull final JsonSerializationContext context) { - - JsonArray dataTypesJsonArray = new JsonArray(); - - if (dataTypes.getConceptMap().isEmpty()) { - String errorMessage = "data type list is empty"; - LOGGER.debug(errorMessage); - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage); - } - - for (JpaToscaDataType dataType : dataTypes.getConceptMap().values()) { - JsonElement dataTypeEntry = new ToscaDataTypeJsonAdapter().serialize(dataType, type, context); - dataTypesJsonArray.add(dataTypeEntry); - } - - return dataTypesJsonArray; - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java deleted file mode 100644 index ca0e3d937..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPoliciesJsonAdapter.java +++ /dev/null @@ -1,79 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.JsonArray; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; -import java.util.Iterator; -import lombok.NonNull; - -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy; - -/** - * GSON type adapter for TOSCA policies. - * - * @author Liam Fallon (liam.fallon@est.tech) - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaPoliciesJsonAdapter implements JsonSerializer, JsonDeserializer { - - @Override - public JpaToscaPolicies deserialize(@NonNull final JsonElement policiesElement, @NonNull final Type type, - @NonNull final JsonDeserializationContext context) { - // The incoming JSON - final JsonArray policiesJsonArray = policiesElement.getAsJsonArray(); - - // The outgoing object - final PfConceptKey policiesKey = new PfConceptKey("IncomingPolicies", "0.0.1"); - final JpaToscaPolicies policies = new JpaToscaPolicies(policiesKey); - - // Get the policies - for (Iterator policiesIterator = policiesJsonArray.iterator(); policiesIterator.hasNext(); ) { - JpaToscaPolicy policy = new ToscaPolicyJsonAdapter() - .deserialize(policiesIterator.next(), JpaToscaPolicy.class, context); - - policies.getConceptMap().put(policy.getKey(), policy); - } - - return policies; - } - - @Override - public JsonElement serialize(@NonNull final JpaToscaPolicies policies, @NonNull final Type type, - @NonNull final JsonSerializationContext context) { - - JsonArray policiesJsonArray = new JsonArray(); - - for (JpaToscaPolicy policy: policies.getConceptMap().values()) { - policiesJsonArray.add(new ToscaPolicyJsonAdapter().serialize(policy, type, context)); - } - return policiesJsonArray; - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java deleted file mode 100644 index 6b666e214..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyJsonAdapter.java +++ /dev/null @@ -1,164 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import javax.ws.rs.core.Response; - -import lombok.NonNull; - -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * GSON type adapter for TOSCA policies. - * - * @author Liam Fallon (liam.fallon@est.tech) - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaPolicyJsonAdapter implements JsonSerializer, JsonDeserializer { - // Logger for this class - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyJsonAdapter.class); - - private static final String TYPE = "type"; - private static final String DESCRIPTION = "description"; - private static final String VERSION = "version"; - private static final String METADATA = "metadata"; - private static final String PROPERTIES = "properties"; - - private final Gson gson = new GsonBuilder().setPrettyPrinting().create(); - - @Override - public JpaToscaPolicy deserialize(@NonNull final JsonElement policyElement, @NonNull final Type type, - @NonNull final JsonDeserializationContext context) { - - // The incoming JSON - final JsonObject policyJsonMapObject = policyElement.getAsJsonObject(); - - // We should only have a single entry for the policy - if (policyJsonMapObject.entrySet().size() != 1) { - String errorMessage = "a policy list entry may only contain one and only one policy"; - LOGGER.debug(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); - } - - final String policyName = policyJsonMapObject.entrySet().iterator().next().getKey(); - final JsonObject policyJsonObject = policyJsonMapObject.entrySet().iterator().next() - .getValue().getAsJsonObject(); - - // Set keys - PfConceptKey policyKey = new PfConceptKey(policyName, policyJsonObject.get(VERSION).getAsString()); - PfConceptKey policyTypeKey = new PfConceptKey( - policyJsonObject.get(TYPE).getAsString(), - policyJsonObject.get(VERSION).getAsString()); - JpaToscaPolicy policy = new JpaToscaPolicy(policyKey, policyTypeKey); - - // Set description - if (policyJsonObject.has(DESCRIPTION)) { - final String policyDescription = policyJsonObject.get(DESCRIPTION).getAsString(); - policy.setDescription(policyDescription); - } - - // Set metadata - if (policyJsonObject.has(METADATA)) { - final JsonObject policyMetadataMapObject = policyJsonObject.get(METADATA).getAsJsonObject(); - Map policyMetadataMap = new HashMap<>(); - for (Entry entry : policyMetadataMapObject.entrySet()) { - policyMetadataMap.put(entry.getKey(), entry.getValue().getAsString()); - } - policy.setMetadata(policyMetadataMap); - } - - // Set properties - if (policyJsonObject.has(PROPERTIES)) { - final JsonObject policyPropertiesMapObject = policyJsonObject.get(PROPERTIES).getAsJsonObject(); - Map propertiesMap = new HashMap<>(); - for (Entry entry : policyPropertiesMapObject.entrySet()) { - // TODO: This is a HACK, we need to validate the properties against their - // TODO: their data type in their policy type definition in TOSCA, which means reading - // TODO: the policy type from the database and parsing the property value object correctly - // TODO: Here we are simply serializing the property value into a string and storing it - // TODO: unvalidated into the database - propertiesMap.put(entry.getKey(), gson.toJson(entry.getValue())); - } - policy.setProperties(propertiesMap); - } - return policy; - } - - @Override - public JsonElement serialize(@NonNull final JpaToscaPolicy policy, @NonNull final Type type, - @NonNull final JsonSerializationContext context) { - - JsonObject policyValJsonObject = new JsonObject(); - - // Add type - policyValJsonObject.addProperty(TYPE, policy.getType().getName()); - - // Add version - policyValJsonObject.addProperty(VERSION, policy.getType().getVersion()); - - // Add description - if (policy.getDescription() != null) { - policyValJsonObject.addProperty(DESCRIPTION, policy.getDescription()); - } - - // Add metadata - if (policy.getMetadata() != null) { - JsonObject metadataMapObject = new JsonObject(); - for (Entry entry : policy.getMetadata().entrySet()) { - metadataMapObject.addProperty(entry.getKey(), entry.getValue()); - } - policyValJsonObject.add(METADATA, metadataMapObject); - } - - // Add properties - if (policy.getProperties() != null) { - JsonObject propertiesMapObject = new JsonObject(); - for (Entry entry : policy.getProperties().entrySet()) { - // TODO: This is the other direction of the HACK - JsonElement valueObject = gson.fromJson(entry.getValue(), JsonElement.class); - propertiesMapObject.add(entry.getKey(), valueObject); - } - policyValJsonObject.add(PROPERTIES, propertiesMapObject); - } - - JsonObject policyJsonObject = new JsonObject(); - policyJsonObject.add(policy.getKey().getName(), policyValJsonObject); - return policyJsonObject; - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypeJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypeJsonAdapter.java deleted file mode 100644 index a96642261..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypeJsonAdapter.java +++ /dev/null @@ -1,139 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import java.lang.reflect.Type; -import javax.ws.rs.core.Response; - -import lombok.NonNull; - -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * GSON type adapter for TOSCA policy types. - * - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaPolicyTypeJsonAdapter - implements JsonSerializer, JsonDeserializer { - - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyTypeJsonAdapter.class); - - private static final String DERIVED_FROM = "derived_from"; - private static final String DESCRIPTION = "description"; - private static final String VERSION = "version"; - private static final String PROPERTIES = "properties"; - private static final String DEFAULT_VERSION = "1.0.0"; - - @Override - public JpaToscaPolicyType deserialize(@NonNull final JsonElement policyTypeElement, @NonNull final Type type, - @NonNull final JsonDeserializationContext context) { - - // The incoming JSON - final JsonObject policyTypeJsonMapObject = policyTypeElement.getAsJsonObject(); - - // We should only have a single entry for the policy type - if (policyTypeJsonMapObject.entrySet().size() != 1) { - String errorMessage = "a policy type list entry may only contain one and only one policy type"; - LOGGER.debug(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); - } - - final String policyTypeName = policyTypeJsonMapObject.entrySet().iterator().next().getKey(); - final JsonObject policyTypeJsonObject = - policyTypeJsonMapObject.entrySet().iterator().next().getValue().getAsJsonObject(); - - // Set keys - PfConceptKey policyTypeKey; - if (policyTypeJsonObject.get(VERSION) == null) { - policyTypeKey = new PfConceptKey(policyTypeName, DEFAULT_VERSION); - } else { - policyTypeKey = new PfConceptKey(policyTypeName, policyTypeJsonObject.get(VERSION).getAsString()); - } - JpaToscaPolicyType policyType = new JpaToscaPolicyType(policyTypeKey); - - // Set derived_from - policyType.setDerivedFrom( - new PfConceptKey(policyTypeJsonObject.get(DERIVED_FROM).getAsString(), DEFAULT_VERSION)); - - // Set description - if (policyTypeJsonObject.has(DESCRIPTION)) { - final String policyTypeDescription = policyTypeJsonObject.get(DESCRIPTION).getAsString(); - policyType.setDescription(policyTypeDescription); - } - - // Set properties - if (policyTypeJsonObject.has(PROPERTIES)) { - policyType.setProperties( - new ToscaPropertiesJsonAdapter().deserializeProperties(policyTypeJsonObject.get(PROPERTIES))); - for (JpaToscaProperty property : policyType.getProperties()) { - property.getKey().setParentConceptKey(policyTypeKey); - property.getType().setVersion(policyType.getKey().getVersion()); - } - } - - return policyType; - } - - @Override - public JsonElement serialize(@NonNull final JpaToscaPolicyType policyType, @NonNull final Type type, - @NonNull final JsonSerializationContext context) { - - JsonObject policyTypeValJsonObject = new JsonObject(); - - // Add derived_from - if (policyType.getDerivedFrom() != null) { - policyTypeValJsonObject.addProperty(DERIVED_FROM, policyType.getDerivedFrom().getName()); - } - - // Add description - if (policyType.getDescription() != null) { - policyTypeValJsonObject.addProperty(DESCRIPTION, policyType.getDescription()); - } - - // Add version - if (policyType.getKey().getVersion() != null) { - policyTypeValJsonObject.addProperty(VERSION, policyType.getKey().getVersion()); - } - - // Add properties - if (policyType.getProperties() != null) { - JsonElement propertiesJsonElement = - new ToscaPropertiesJsonAdapter().serializeProperties(policyType.getProperties()); - policyTypeValJsonObject.add(PROPERTIES, propertiesJsonElement); - } - - JsonObject policyTypeJsonObject = new JsonObject(); - policyTypeJsonObject.add(policyType.getKey().getName(), policyTypeValJsonObject); - return policyTypeJsonObject; - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypesJsonAdapter.java deleted file mode 100644 index ac6d8e558..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPolicyTypesJsonAdapter.java +++ /dev/null @@ -1,94 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.JsonArray; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; -import java.util.Iterator; -import javax.ws.rs.core.Response; -import lombok.NonNull; - -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * GSON type adapter for TOSCA policy types. - * - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaPolicyTypesJsonAdapter implements JsonSerializer, - JsonDeserializer { - - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyTypesJsonAdapter.class); - - @Override - public JpaToscaPolicyTypes deserialize(@NonNull final JsonElement policyTypesElement, @NonNull final Type type, - @NonNull final JsonDeserializationContext context) { - - // The incoming JSON - final JsonArray policyTypesJsonArray = policyTypesElement.getAsJsonArray(); - - // The outgoing object - final PfConceptKey policyTypesKey = new PfConceptKey("IncomingPolicyTypes", "0.0.1"); - final JpaToscaPolicyTypes policyTypes = new JpaToscaPolicyTypes(policyTypesKey); - - // Get the policyTypes - Iterator policyTypesIterator = policyTypesJsonArray.iterator(); - while (policyTypesIterator.hasNext()) { - JpaToscaPolicyType policyType = new ToscaPolicyTypeJsonAdapter() - .deserialize(policyTypesIterator.next(), JpaToscaPolicyType.class, context); - - policyTypes.getConceptMap().put(policyType.getKey(), policyType); - } - - return policyTypes; - } - - @Override - public JsonElement serialize(@NonNull final JpaToscaPolicyTypes policyTypes, @NonNull final Type type, - @NonNull final JsonSerializationContext context) { - - JsonArray policyTypesJsonArray = new JsonArray(); - - if (policyTypes.getConceptMap().isEmpty()) { - String errorMessage = "policy type list is empty"; - LOGGER.debug(errorMessage); - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage); - } - - for (JpaToscaPolicyType policyType: policyTypes.getConceptMap().values()) { - JsonElement policyTypeEntry = new ToscaPolicyTypeJsonAdapter().serialize(policyType, type, context); - policyTypesJsonArray.add(policyTypeEntry); - } - - return policyTypesJsonArray; - } -} \ No newline at end of file diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPropertiesJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPropertiesJsonAdapter.java deleted file mode 100644 index b5c87557a..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaPropertiesJsonAdapter.java +++ /dev/null @@ -1,284 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map.Entry; -import javax.ws.rs.core.Response; - -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraint; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogical.Operation; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogicalString; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintValidValues; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntrySchema; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -/** - * GSON type adapter for TOSCA properties. - * - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaPropertiesJsonAdapter { - - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPropertiesJsonAdapter.class); - - private static final String DESCRIPTION = "description"; - private static final String REQUIRED = "required"; - private static final String DEFAULT = "default"; - private static final String TYPE = "type"; - private static final String ENTRY_SCHEMA = "entry_schema"; - private static final String CONSTRAINTS = "constraints"; - private static final String EQUAL = "equal"; - private static final String VALID_VALUES = "valid_values"; - private static final String DEFAULT_VERSION = "1.0.0"; - - /** - * Deserializes the properties. - * - * @param propertiesElement the properties in JsonElement - * - * @return deserialized ToscaProperty list - */ - public List deserializeProperties(JsonElement propertiesElement) { - - final JsonObject propertiesMapObject = propertiesElement.getAsJsonObject(); - List properties = new LinkedList<>(); - - for (Entry entry : propertiesMapObject.entrySet()) { - final String propertyEntryKey = entry.getKey(); - final JsonElement propertyEntryVal = entry.getValue(); - - // Set property: key and type - JpaToscaProperty property = new JpaToscaProperty( - new PfReferenceKey(new PfConceptKey(), propertyEntryKey), - new PfConceptKey(propertyEntryVal.getAsJsonObject().get(TYPE).getAsString(), DEFAULT_VERSION)); - - // Set property: description - JsonObject propertyJsonObject = propertyEntryVal.getAsJsonObject(); - if (propertyJsonObject.has(DESCRIPTION)) { - property.setDescription(propertyJsonObject.get(DESCRIPTION).getAsString()); - } - - // Set property: required - if (propertyJsonObject.has(REQUIRED)) { - property.setRequired(propertyJsonObject.get(REQUIRED).getAsBoolean()); - } - - // Set property: default - if (propertyJsonObject.has(DEFAULT)) { - property.setDefaultValue(propertyJsonObject.get(DEFAULT).getAsString()); - } - - // Set property: entry_schema - if (propertyJsonObject.has(ENTRY_SCHEMA)) { - checkEntrySchemaCompatibility(property.getType().getName()); - property.setEntrySchema(deserializeEntrySchema(propertyJsonObject.get(ENTRY_SCHEMA))); - property.getEntrySchema().getKey().setParentConceptKey(property.getType()); - property.getEntrySchema().getType().setVersion(property.getType().getVersion()); - } - - // Set property: constraints - if (propertyJsonObject.has(CONSTRAINTS)) { - property.setConstraints(deserializeConstraints(propertyJsonObject.get(CONSTRAINTS))); - for (JpaToscaConstraint c : property.getConstraints()) { - c.getKey().setParentConceptKey(property.getType()); - } - } - - // Add property to properties list - properties.add(property); - } - - return properties; - } - - /** - * Serializes the properties. - * - * @param properties the list of ToscaProperty - * - * @return serialized JsonElement - */ - public JsonElement serializeProperties(List properties) { - - JsonObject propertiesJsonObject = new JsonObject(); - - for (JpaToscaProperty property : properties) { - JsonObject propertyValJsonObject = new JsonObject(); - - // Add type - propertyValJsonObject.addProperty(TYPE, property.getType().getName()); - - // Add description - if (property.getDescription() != null) { - propertyValJsonObject.addProperty(DESCRIPTION, property.getDescription()); - } - - // Add required - propertyValJsonObject.addProperty(REQUIRED, property.isRequired()); - - // Add defaultValue - if (property.getDefaultValue() != null) { - propertyValJsonObject.addProperty(DEFAULT, property.getDefaultValue()); - } - - // Add constraints - if (property.getConstraints() != null) { - propertyValJsonObject.add(CONSTRAINTS, serializeConstraints(property.getConstraints())); - } - - // Add entry_schema - if (property.getEntrySchema() != null) { - propertyValJsonObject.add(ENTRY_SCHEMA, serializeEntrySchema(property.getEntrySchema())); - } - - propertiesJsonObject.add(property.getKey().getLocalName(), propertyValJsonObject); - } - - return propertiesJsonObject; - } - - private JsonElement serializeConstraints(List constraints) { - - JsonArray constraintsValJsonArray = new JsonArray(); - - for (JpaToscaConstraint c : constraints) { - JsonObject constraintJsonObject = new JsonObject(); - - // Check which type of constraint it is - // TODO: here we only support valid_values and equal - if (c instanceof JpaToscaConstraintValidValues) { - JsonArray validValuesJsonArray = new JsonArray(); - for (String validValue : ((JpaToscaConstraintValidValues)c).getValidValues()) { - validValuesJsonArray.add(validValue); - } - constraintJsonObject.add(VALID_VALUES, validValuesJsonArray); - } else if (c instanceof JpaToscaConstraintLogicalString) { - constraintJsonObject.addProperty(EQUAL, ((JpaToscaConstraintLogicalString)c).getCompareToString()); - } else { - String errorMessage = "constraint is neither valid_values nor equal"; - LOGGER.debug(errorMessage); - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage); - } - - constraintsValJsonArray.add(constraintJsonObject); - } - - return constraintsValJsonArray; - } - - private JsonElement serializeEntrySchema(JpaToscaEntrySchema entrySchema) { - - JsonObject entrySchemaValJsonObject = new JsonObject(); - - // Add type - entrySchemaValJsonObject.addProperty(TYPE, entrySchema.getType().getName()); - - // Add description - if (entrySchema.getDescription() != null) { - entrySchemaValJsonObject.addProperty(DESCRIPTION, entrySchema.getDescription()); - } - - // Add constraints - if (entrySchema.getConstraints() != null) { - entrySchemaValJsonObject.add(CONSTRAINTS, serializeConstraints(entrySchema.getConstraints())); - } - - return entrySchemaValJsonObject; - } - - private JpaToscaEntrySchema deserializeEntrySchema(JsonElement entrySchemaElement) { - - JsonObject entrySchemaJsonObject = entrySchemaElement.getAsJsonObject(); - - // Set entry_schema: key and type - JpaToscaEntrySchema entrySchema = new JpaToscaEntrySchema( - new PfReferenceKey(new PfConceptKey(), ENTRY_SCHEMA), - new PfConceptKey(entrySchemaJsonObject.get(TYPE).getAsString(), DEFAULT_VERSION)); - - // Set entry_schema: description - if (entrySchemaJsonObject.has(DESCRIPTION)) { - entrySchema.setDescription(entrySchemaJsonObject.get(DESCRIPTION).getAsString()); - } - - // Set entry_schema: constraints - if (entrySchemaJsonObject.has(CONSTRAINTS)) { - entrySchema.setConstraints(deserializeConstraints(entrySchemaJsonObject.get(CONSTRAINTS))); - for (JpaToscaConstraint c : entrySchema.getConstraints()) { - c.getKey().setParentConceptKey(entrySchema.getType()); - } - } - - return entrySchema; - } - - private List deserializeConstraints(JsonElement constraintsElement) { - - JsonArray constraintsJsonArray = constraintsElement.getAsJsonArray(); - List constraints = new LinkedList<>(); - - for (Iterator constraintsIter = constraintsJsonArray.iterator(); constraintsIter.hasNext(); ) { - JsonObject constraintJsonObject = constraintsIter.next().getAsJsonObject(); - // Check which type of constraint it is - // TODO: here we only check 'valid_values' and 'equal' - if (constraintJsonObject.get(VALID_VALUES) != null) { - List validValues = new LinkedList<>(); - for (Iterator validValuesIter = constraintJsonObject.get(VALID_VALUES).getAsJsonArray() - .iterator(); validValuesIter.hasNext(); ) { - validValues.add(validValuesIter.next().getAsString()); - } - JpaToscaConstraint constraint = new JpaToscaConstraintValidValues( - new PfReferenceKey(new PfConceptKey(), VALID_VALUES), validValues); - constraints.add(constraint); - } else if (constraintJsonObject.get(EQUAL) != null) { - JpaToscaConstraint constraint = new JpaToscaConstraintLogicalString(new PfReferenceKey( - new PfConceptKey(), EQUAL), Operation.EQ, constraintJsonObject.get(EQUAL).getAsString()); - constraints.add(constraint); - } else { - String errorMessage = "specified constraint is neither valid_values nor equal"; - LOGGER.debug(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); - } - } - - return constraints; - } - - private void checkEntrySchemaCompatibility(String type) { - if (!("list".equalsIgnoreCase(type)) && !("map".equalsIgnoreCase(type))) { - String errorMessage = "entry schema can only be specified for list or map property"; - LOGGER.debug(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); - } - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java deleted file mode 100644 index bb2ace87e..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateJsonAdapter.java +++ /dev/null @@ -1,122 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; - -import lombok.NonNull; - -import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate; - -/** - * GSON type adapter for TOSCA policies. - * - * @author Liam Fallon (liam.fallon@est.tech) - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaServiceTemplateJsonAdapter - implements JsonSerializer, JsonDeserializer { - - private static final String TOPOLOGY_TEMPLATE = "topology_template"; - private static final String TOSCA_DEFINITIONS_VERSION = "tosca_definitions_version"; - private static final String POLICY_TYPES = "policy_types"; - private static final String DATA_TYPES = "data_types"; - - @Override - public JpaToscaServiceTemplate deserialize(@NonNull final JsonElement serviceTemplateElement, - @NonNull final Type type, @NonNull final JsonDeserializationContext context) { - - // The incoming JSON - final JsonObject serviceTemplateJsonObject = serviceTemplateElement.getAsJsonObject(); - - // The outgoing object - final JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate(); - serviceTemplate - .setToscaDefinitionsVersion(serviceTemplateJsonObject.get(TOSCA_DEFINITIONS_VERSION).getAsString()); - - // Set topology_template - if (serviceTemplateJsonObject.has(TOPOLOGY_TEMPLATE)) { - serviceTemplate.setTopologyTemplate(new ToscaTopologyTemplateJsonAdapter().deserialize( - serviceTemplateJsonObject.get(TOPOLOGY_TEMPLATE), JpaToscaTopologyTemplate.class, context)); - } - - // Set policy_types - if (serviceTemplateJsonObject.has(POLICY_TYPES)) { - serviceTemplate.setPolicyTypes(new ToscaPolicyTypesJsonAdapter() - .deserialize(serviceTemplateJsonObject.get(POLICY_TYPES), JpaToscaPolicyTypes.class, context)); - } - - // Set data_types - if (serviceTemplateJsonObject.has(DATA_TYPES)) { - serviceTemplate.setDataTypes(new ToscaDataTypesJsonAdapter() - .deserialize(serviceTemplateJsonObject.get(DATA_TYPES), JpaToscaDataTypes.class, context)); - } - - return serviceTemplate; - } - - @Override - public JsonElement serialize(@NonNull final JpaToscaServiceTemplate serviceTemplate, @NonNull final Type type, - @NonNull final JsonSerializationContext context) { - - JsonObject serviceTemplateJsonObject = new JsonObject(); - - // Serialize tosca_definitions_version - if (serviceTemplate.getToscaDefinitionsVersion() != null) { - serviceTemplateJsonObject.addProperty(TOSCA_DEFINITIONS_VERSION, - serviceTemplate.getToscaDefinitionsVersion()); - } - - // Serialize topoligy_template - if (serviceTemplate.getTopologyTemplate() != null) { - JsonElement topologyTemplateJsonElement = new ToscaTopologyTemplateJsonAdapter() - .serialize(serviceTemplate.getTopologyTemplate(), type, context); - serviceTemplateJsonObject.add(TOPOLOGY_TEMPLATE, topologyTemplateJsonElement); - } - - // Serialize policy_types - if (serviceTemplate.getPolicyTypes() != null) { - JsonElement policyTypesJsonElement = - new ToscaPolicyTypesJsonAdapter().serialize(serviceTemplate.getPolicyTypes(), type, context); - serviceTemplateJsonObject.add(POLICY_TYPES, policyTypesJsonElement); - } - - // Serialize data_types - if (serviceTemplate.getDataTypes() != null) { - JsonElement dataTypesJsonElement = - new ToscaDataTypesJsonAdapter().serialize(serviceTemplate.getDataTypes(), type, context); - serviceTemplateJsonObject.add(DATA_TYPES, dataTypesJsonElement); - } - - return serviceTemplateJsonObject; - } -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java deleted file mode 100644 index b15a83016..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaServiceTemplateMessageBodyHandler.java +++ /dev/null @@ -1,73 +0,0 @@ -/*- - * ============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. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.tosca.simple.serialization; - -import com.google.gson.GsonBuilder; - -import org.onap.policy.common.gson.GsonMessageBodyHandler; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Provider used to serialize and deserialize TOSCA objects using GSON. - */ -public class ToscaServiceTemplateMessageBodyHandler extends GsonMessageBodyHandler { - - public static final Logger logger = LoggerFactory.getLogger(ToscaServiceTemplateMessageBodyHandler.class); - - /** - * Constructs the object. - */ - public ToscaServiceTemplateMessageBodyHandler() { - this(new GsonBuilder()); - - logger.info("Using GSON with TOSCA for REST calls"); - } - - /** - * Constructs the object. - * - * @param builder builder to use to create the gson object - */ - public ToscaServiceTemplateMessageBodyHandler(final GsonBuilder builder) { - // @formatter:off - super(builder - .registerTypeAdapter(JpaToscaServiceTemplate.class, new ToscaServiceTemplateJsonAdapter()) - .registerTypeAdapter(JpaToscaTopologyTemplate.class, new ToscaTopologyTemplateJsonAdapter()) - .registerTypeAdapter(JpaToscaPolicies.class, new ToscaPoliciesJsonAdapter()) - .registerTypeAdapter(JpaToscaPolicy.class, new ToscaPolicyJsonAdapter()) - .registerTypeAdapter(JpaToscaPolicyTypes.class, new ToscaPolicyTypesJsonAdapter()) - .registerTypeAdapter(JpaToscaPolicyType.class, new ToscaPolicyTypeJsonAdapter()) - .registerTypeAdapter(JpaToscaDataTypes.class, new ToscaDataTypesJsonAdapter()) - .registerTypeAdapter(JpaToscaDataType.class, new ToscaDataTypeJsonAdapter()) - .setPrettyPrinting() - .create() - ); - // @formatter:on - } - -} diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java deleted file mode 100644 index df8ebb556..000000000 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/serialization/ToscaTopologyTemplateJsonAdapter.java +++ /dev/null @@ -1,91 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.tosca.simple.serialization; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import java.lang.reflect.Type; - -import lombok.NonNull; - -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate; - -/** - * GSON type adapter for TOSCA policies. - * - * @author Liam Fallon (liam.fallon@est.tech) - * @author Chenfei Gao (cgao@research.att.com) - */ -public class ToscaTopologyTemplateJsonAdapter - implements JsonSerializer, JsonDeserializer { - - private static final String POLICIES = "policies"; - private static final String DESCRIPTION = "description"; - - @Override - public JpaToscaTopologyTemplate deserialize(@NonNull final JsonElement toplogyTemplateElement, - @NonNull final Type type, @NonNull final JsonDeserializationContext context) { - - // The incoming JSON - final JsonObject topologyTemplateJsonObject = toplogyTemplateElement.getAsJsonObject(); - - // The outgoing object - final PfReferenceKey topologyTemplateKey = new PfReferenceKey(new PfConceptKey(), "IncomingTopologyTemplate"); - final JpaToscaTopologyTemplate topologyTemplate = new JpaToscaTopologyTemplate(topologyTemplateKey); - - if (topologyTemplateJsonObject.has(DESCRIPTION)) { - topologyTemplate.setDescription(topologyTemplateJsonObject.get(DESCRIPTION).getAsString()); - } - - if (topologyTemplateJsonObject.has(POLICIES)) { - topologyTemplate.setPolicies(new ToscaPoliciesJsonAdapter() - .deserialize(topologyTemplateJsonObject.get(POLICIES), JpaToscaPolicies.class, context)); - } - - return topologyTemplate; - } - - @Override - public JsonElement serialize(@NonNull final JpaToscaTopologyTemplate topologyTemplate, @NonNull final Type type, - @NonNull final JsonSerializationContext context) { - - JsonObject topologyTemplateJsonObject = new JsonObject(); - JsonElement policiesJsonElement = new ToscaPoliciesJsonAdapter() - .serialize(topologyTemplate.getPolicies(), type, context); - - topologyTemplateJsonObject.add(POLICIES, policiesJsonElement); - - if (topologyTemplate.getDescription() != null) { - topologyTemplateJsonObject.addProperty(DESCRIPTION, topologyTemplate.getDescription()); - } - - return topologyTemplateJsonObject; - } -} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/ToscaServiceTemplateMappingTest.java similarity index 68% rename from models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java rename to models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/ToscaServiceTemplateMappingTest.java index 6ec91238f..1bac0b973 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/ToscaServiceTemplateMappingTest.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -22,6 +23,7 @@ package org.onap.policy.models.tosca.authorative.mapping; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -30,8 +32,11 @@ import org.junit.Test; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; /** @@ -39,15 +44,14 @@ import org.yaml.snakeyaml.Yaml; * * @author Chenfei Gao (cgao@research.att.com) */ -public class PlainToscaServiceTemplateMapperTest { +public class ToscaServiceTemplateMappingTest { + private static final Logger LOGGER = LoggerFactory.getLogger(ToscaServiceTemplateMappingTest.class); private StandardCoder standardCoder; - private PlainToscaServiceTemplateMapper mapper; @Before public void setUp() { standardCoder = new StandardCoder(); - mapper = new PlainToscaServiceTemplateMapper(); } @Test @@ -56,12 +60,19 @@ public class PlainToscaServiceTemplateMapperTest { String inputJson = ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"); ToscaServiceTemplate plainPolicies = standardCoder.decode(inputJson, ToscaServiceTemplate.class); - JpaToscaServiceTemplate internalPolicies = mapper.toToscaServiceTemplate(plainPolicies); + JpaToscaServiceTemplate internalPolicies = new JpaToscaServiceTemplate(); + internalPolicies.fromAuthorative(plainPolicies); + assertTrue(internalPolicies.validate(new PfValidationResult()).isValid()); - ToscaServiceTemplate plainPolicies2 = mapper.fromToscaServiceTemplate(internalPolicies); - assertTrue(plainPolicies.equals(plainPolicies2)); + ToscaServiceTemplate plainPolicies2 = internalPolicies.toAuthorative(); + + ToscaPolicy pp1 = plainPolicies.getToscaTopologyTemplate().getPolicies().get(0).values().iterator().next(); + ToscaPolicy pp2 = plainPolicies2.getToscaTopologyTemplate().getPolicies().get(0).values().iterator().next(); + + assertEquals(pp1.getProperties().keySet(), pp2.getProperties().keySet()); } catch (Exception e) { + LOGGER.warn("no exception should be thrown", e); fail("no exception should be thrown"); } } @@ -77,14 +88,17 @@ public class PlainToscaServiceTemplateMapperTest { ToscaServiceTemplate plainPolicyTypes = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class); - JpaToscaServiceTemplate internalPolicyTypes = mapper.toToscaServiceTemplate(plainPolicyTypes); + JpaToscaServiceTemplate internalPolicyTypes = new JpaToscaServiceTemplate(); + internalPolicyTypes.fromAuthorative(plainPolicyTypes); assertTrue(internalPolicyTypes.validate(new PfValidationResult()).isValid()); - ToscaServiceTemplate plainPolicyTypes2 = mapper.fromToscaServiceTemplate(internalPolicyTypes); - JpaToscaServiceTemplate internalPolicyTypes2 = mapper.toToscaServiceTemplate(plainPolicyTypes2); + ToscaServiceTemplate plainPolicyTypes2 = internalPolicyTypes.toAuthorative(); + JpaToscaServiceTemplate internalPolicyTypes2 = new JpaToscaServiceTemplate(); + internalPolicyTypes2.fromAuthorative(plainPolicyTypes2); assertTrue(internalPolicyTypes2.validate(new PfValidationResult()).isValid()); assertTrue(internalPolicyTypes.compareTo(internalPolicyTypes2) == 0); } catch (Exception e) { + LOGGER.warn("no exception should be thrown", e); fail("no exception should be thrown"); } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalKeyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalKeyTest.java deleted file mode 100644 index 98d7dcfea..000000000 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalKeyTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/*- - * ============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.tosca.simple.concepts; - -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 org.junit.Test; -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogicalKey; - -/** - * DAO test for ToscaConstraintLogicalKey. - * - * @author Liam Fallon (liam.fallon@est.tech) - */ -public class JpaToscaConstraintLogicalKeyTest { - - @Test - public void testConstraintLogicalKeyPojo() { - assertNotNull(new JpaToscaConstraintLogicalKey()); - assertNotNull(new JpaToscaConstraintLogicalKey(new PfReferenceKey())); - assertNotNull(new JpaToscaConstraintLogicalKey(new PfReferenceKey(), JpaToscaConstraintLogicalKey.Operation.EQ, - new PfConceptKey())); - - try { - new JpaToscaConstraintLogicalKey((PfReferenceKey) null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("key is marked @NonNull but is null", exc.getMessage()); - } - - try { - new JpaToscaConstraintLogicalKey((JpaToscaConstraintLogicalKey) null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("copyConcept is marked @NonNull but is null", exc.getMessage()); - } - - PfConceptKey tclParentKey = new PfConceptKey("tParentKey", "0.0.1"); - PfReferenceKey tclKey = new PfReferenceKey(tclParentKey, "trigger0"); - PfConceptKey constraintKey = new PfConceptKey("tParentKey", "0.0.1"); - JpaToscaConstraintLogicalKey tcl = - new JpaToscaConstraintLogicalKey(tclKey, JpaToscaConstraintLogicalKey.Operation.EQ, constraintKey); - - try { - new JpaToscaConstraintLogicalKey(tcl); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("cannot copy an immutable constraint", exc.getMessage()); - } - - JpaToscaConstraintLogicalKey tclClone1 = new JpaToscaConstraintLogicalKey(); - try { - tcl.copyTo(tclClone1); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("cannot copy an immutable constraint", exc.getMessage()); - } - tclClone1 = new JpaToscaConstraintLogicalKey(tclKey, JpaToscaConstraintLogicalKey.Operation.EQ, constraintKey); - - assertEquals(tcl, tclClone1); - assertEquals(0, tcl.compareTo(tclClone1)); - - assertEquals(-1, tcl.compareTo(null)); - assertEquals(0, tcl.compareTo(tcl)); - assertFalse(tcl.compareTo(tcl.getKey()) == 0); - - JpaToscaConstraintLogicalKey differentTcl = new JpaToscaConstraintLogicalKey(new PfReferenceKey(), - JpaToscaConstraintLogicalKey.Operation.EQ, constraintKey); - assertFalse(tcl.compareTo(differentTcl) == 0); - - JpaToscaConstraintLogicalKey otherTc = - new JpaToscaConstraintLogicalKey(tclKey, JpaToscaConstraintLogicalKey.Operation.EQ, constraintKey); - assertEquals(0, tcl.compareTo(otherTc)); - - try { - tcl.copyTo(null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("target is marked @NonNull but is null", exc.getMessage()); - } - - assertEquals(2, tcl.getKeys().size()); - assertEquals(2, new JpaToscaConstraintLogicalKey().getKeys().size()); - - new JpaToscaConstraintLogicalKey().clean(); - tcl.clean(); - assertEquals(tclClone1, tcl); - - assertFalse(new JpaToscaConstraintLogicalKey().validate(new PfValidationResult()).isValid()); - assertTrue(tcl.validate(new PfValidationResult()).isValid()); - - try { - tcl.validate(null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("resultIn is marked @NonNull but is null", exc.getMessage()); - } - - try { - new JpaToscaConstraintLogicalKey(tclKey, JpaToscaConstraintLogicalKey.Operation.EQ, null) - .validate(new PfValidationResult()); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("compareToKey is marked @NonNull but is null", exc.getMessage()); - } - - assertFalse( - new JpaToscaConstraintLogicalKey(tclKey, JpaToscaConstraintLogicalKey.Operation.EQ, new PfConceptKey()) - .validate(new PfValidationResult()).isValid()); - } -} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalStringTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalStringTest.java deleted file mode 100644 index c27ec2660..000000000 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalStringTest.java +++ /dev/null @@ -1,135 +0,0 @@ -/*- - * ============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.tosca.simple.concepts; - -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 org.junit.Test; -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogicalString; - -/** - * DAO test for ToscaConstraintLogicalString. - * - * @author Liam Fallon (liam.fallon@est.tech) - */ -public class JpaToscaConstraintLogicalStringTest { - - @Test - public void testConstraintLogicalStringPojo() { - assertNotNull(new JpaToscaConstraintLogicalString()); - assertNotNull(new JpaToscaConstraintLogicalString(new PfReferenceKey())); - assertNotNull(new JpaToscaConstraintLogicalString(new PfReferenceKey(), - JpaToscaConstraintLogicalString.Operation.EQ, "Constraint")); - - try { - new JpaToscaConstraintLogicalString((PfReferenceKey) null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("key is marked @NonNull but is null", exc.getMessage()); - } - - try { - new JpaToscaConstraintLogicalString((JpaToscaConstraintLogicalString) null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("copyConcept is marked @NonNull but is null", exc.getMessage()); - } - - PfConceptKey tclParentKey = new PfConceptKey("tParentKey", "0.0.1"); - PfReferenceKey tclKey = new PfReferenceKey(tclParentKey, "trigger0"); - JpaToscaConstraintLogicalString tcl = - new JpaToscaConstraintLogicalString(tclKey, JpaToscaConstraintLogicalString.Operation.EQ, "Constraint"); - - try { - new JpaToscaConstraintLogicalString(tcl); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("cannot copy an immutable constraint", exc.getMessage()); - } - - JpaToscaConstraintLogicalString tclClone1 = new JpaToscaConstraintLogicalString(); - try { - tcl.copyTo(tclClone1); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("cannot copy an immutable constraint", exc.getMessage()); - } - tclClone1 = - new JpaToscaConstraintLogicalString(tclKey, JpaToscaConstraintLogicalString.Operation.EQ, "Constraint"); - - assertEquals(tcl, tclClone1); - assertEquals(0, tcl.compareTo(tclClone1)); - - assertEquals(-1, tcl.compareTo(null)); - assertEquals(0, tcl.compareTo(tcl)); - assertFalse(tcl.compareTo(tcl.getKey()) == 0); - - JpaToscaConstraintLogicalString differentTcl = new JpaToscaConstraintLogicalString(new PfReferenceKey(), - JpaToscaConstraintLogicalString.Operation.EQ, "Constraint"); - assertFalse(tcl.compareTo(differentTcl) == 0); - - JpaToscaConstraintLogicalString otherTc = - new JpaToscaConstraintLogicalString(tclKey, JpaToscaConstraintLogicalString.Operation.EQ, "Constraint"); - assertEquals(0, tcl.compareTo(otherTc)); - - try { - tcl.copyTo(null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("target is marked @NonNull but is null", exc.getMessage()); - } - - assertEquals(1, tcl.getKeys().size()); - assertEquals(1, new JpaToscaConstraintLogicalString().getKeys().size()); - - new JpaToscaConstraintLogicalString().clean(); - tcl.clean(); - assertEquals(tclClone1, tcl); - - assertFalse(new JpaToscaConstraintLogicalString().validate(new PfValidationResult()).isValid()); - assertTrue(tcl.validate(new PfValidationResult()).isValid()); - - try { - tcl.validate(null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("resultIn is marked @NonNull but is null", exc.getMessage()); - } - - try { - new JpaToscaConstraintLogicalString(tclKey, JpaToscaConstraintLogicalString.Operation.EQ, null) - .validate(new PfValidationResult()); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("compareToString is marked @NonNull but is null", exc.getMessage()); - } - - assertFalse(new JpaToscaConstraintLogicalString(tclKey, JpaToscaConstraintLogicalString.Operation.EQ, "") - .validate(new PfValidationResult()).isValid()); - } -} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalTest.java index 2da46a71e..de0c813e2 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaConstraintLogicalTest.java @@ -21,148 +21,44 @@ package org.onap.policy.models.tosca.simple.concepts; 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 org.junit.Test; -import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogical; -import org.onap.policy.models.tosca.simple.concepts.testconcepts.DummyToscaConstraint; /** - * DAO test for ToscaConstraintLogical. + * DAO test for ToscaConstraintLogicalString. * * @author Liam Fallon (liam.fallon@est.tech) */ public class JpaToscaConstraintLogicalTest { @Test - public void testConstraintLogicalPojo() { - assertNotNull(new JpaToscaConstraintLogical()); - assertNotNull(new JpaToscaConstraintLogical(new PfReferenceKey())); + public void testConstraintLogicalStringPojo() { + assertNotNull(new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, "Constraint")); try { - new JpaToscaConstraintLogical((PfReferenceKey) null); + new JpaToscaConstraintLogical((JpaToscaConstraintOperation) null, null); fail("test should throw an exception"); } catch (Exception exc) { - assertEquals("key is marked @NonNull but is null", exc.getMessage()); + assertEquals("operation is marked @NonNull but is null", exc.getMessage()); } try { - new JpaToscaConstraintLogical((JpaToscaConstraintLogical) null); + new JpaToscaConstraintLogical((JpaToscaConstraintOperation) null, "Hello"); fail("test should throw an exception"); } catch (Exception exc) { - assertEquals("copyConcept is marked @NonNull but is null", exc.getMessage()); + assertEquals("operation is marked @NonNull but is null", exc.getMessage()); } - PfConceptKey tclParentKey = new PfConceptKey("tParentKey", "0.0.1"); - PfReferenceKey tclKey = new PfReferenceKey(tclParentKey, "trigger0"); - JpaToscaConstraintLogical tcl = new JpaToscaConstraintLogical(tclKey, JpaToscaConstraintLogical.Operation.EQ); - - try { - new JpaToscaConstraintLogical(tcl); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("cannot copy an immutable constraint", exc.getMessage()); - } - - JpaToscaConstraintLogical tclClone1 = new JpaToscaConstraintLogical(); - try { - tcl.copyTo(tclClone1); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("cannot copy an immutable constraint", exc.getMessage()); - } - tclClone1 = new JpaToscaConstraintLogical(tclKey, JpaToscaConstraintLogical.Operation.EQ); - - assertEquals(tcl, tclClone1); - assertEquals(0, tcl.compareTo(tclClone1)); - - assertEquals(-1, tcl.compareTo(null)); - assertEquals(0, tcl.compareTo(tcl)); - assertFalse(tcl.compareTo(tcl.getKey()) == 0); - - JpaToscaConstraintLogical differentTcl = - new JpaToscaConstraintLogical(new PfReferenceKey(), JpaToscaConstraintLogical.Operation.EQ); - assertFalse(tcl.compareTo(differentTcl) == 0); - - JpaToscaConstraintLogical otherTc = - new JpaToscaConstraintLogical(tclKey, JpaToscaConstraintLogical.Operation.EQ); - assertEquals(0, tcl.compareTo(otherTc)); - - try { - tcl.copyTo(null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("target is marked @NonNull but is null", exc.getMessage()); - } - - assertEquals(1, tcl.getKeys().size()); - assertEquals(1, new JpaToscaConstraintLogical().getKeys().size()); - - JpaToscaConstraintLogical tclClone0 = new JpaToscaConstraintLogical(); - new JpaToscaConstraintLogical().clean(); - tcl.clean(); - assertEquals(tclClone0, tcl); - - assertFalse(new JpaToscaConstraintLogical().validate(new PfValidationResult()).isValid()); - assertTrue(tcl.validate(new PfValidationResult()).isValid()); - - try { - tcl.validate(null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("resultIn is marked @NonNull but is null", exc.getMessage()); - } - - DummyToscaConstraint dtc = new DummyToscaConstraint(); - try { - new DummyToscaConstraint(dtc); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("cannot copy an immutable constraint", exc.getMessage()); - } - - try { - new DummyToscaConstraint((PfReferenceKey) null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("key is marked @NonNull but is null", exc.getMessage()); - } - - try { - new DummyToscaConstraint((DummyToscaConstraint) null); - fail("test should throw an exception"); - } catch (Exception exc) { - assertEquals("copyConcept is marked @NonNull but is null", exc.getMessage()); - } - - DummyToscaConstraint dtcClone = new DummyToscaConstraint(); - - assertEquals(dtc, dtcClone); - assertEquals(dtc, dtc); - assertEquals(0, dtc.compareTo(dtcClone)); - assertEquals(0, dtc.compareTo(dtc)); - assertEquals(-1, dtc.compareTo(null)); - assertEquals(0, dtc.compareTo(dtcClone)); - assertFalse(dtc.compareTo(dtcClone.getKey()) == 0); - try { - dtc.copyTo(null); + new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, null); fail("test should throw an exception"); } catch (Exception exc) { - assertEquals("target is marked @NonNull but is null", exc.getMessage()); + assertEquals("compareTo is marked @NonNull but is null", exc.getMessage()); } - try { - dtc.copyTo(dtcClone); - fail("target should throw an exception"); - } catch (Exception exc) { - assertEquals("cannot copy an immutable constraint", exc.getMessage()); - } + assertNotNull(new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, "Constraint")); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypeTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypeTest.java index bf710e881..efdddccb0 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypeTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypeTest.java @@ -27,15 +27,15 @@ 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 org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraint; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogical.Operation; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogicalString; import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty; @@ -70,15 +70,14 @@ public class JpaToscaDataTypeTest { JpaToscaDataType tdt = new JpaToscaDataType(dtKey); List constraints = new ArrayList<>(); - JpaToscaConstraintLogicalString lsc = - new JpaToscaConstraintLogicalString(new PfReferenceKey(dtKey, "sc"), Operation.EQ, "hello"); + JpaToscaConstraintLogical lsc = new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, "hello"); constraints.add(lsc); tdt.setConstraints(constraints); assertEquals(constraints, tdt.getConstraints()); - List properties = new ArrayList<>(); + Map properties = new LinkedHashMap<>(); JpaToscaProperty tp = new JpaToscaProperty(new PfReferenceKey(dtKey, "pr"), new PfConceptKey("type", "0.0.1")); - properties.add(tp); + properties.put(tp.getKey().getLocalName(), tp); tdt.setProperties(properties); assertEquals(properties, tdt.getProperties()); @@ -113,7 +112,7 @@ public class JpaToscaDataTypeTest { assertEquals("target is marked @NonNull but is null", exc.getMessage()); } - assertEquals(4, tdt.getKeys().size()); + assertEquals(3, tdt.getKeys().size()); assertEquals(1, new JpaToscaDataType().getKeys().size()); new JpaToscaDataType().clean(); @@ -128,7 +127,7 @@ public class JpaToscaDataTypeTest { tdt.getConstraints().remove(null); assertTrue(tdt.validate(new PfValidationResult()).isValid()); - tdt.getProperties().add(null); + tdt.getProperties().put(null, null); assertFalse(tdt.validate(new PfValidationResult()).isValid()); tdt.getProperties().remove(null); assertTrue(tdt.validate(new PfValidationResult()).isValid()); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntrySchemaTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntrySchemaTest.java index a69b9a777..4a9bdbe2e 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntrySchemaTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntrySchemaTest.java @@ -31,11 +31,8 @@ import java.util.List; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraint; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogical.Operation; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogicalString; import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntrySchema; /** @@ -47,16 +44,14 @@ public class JpaToscaEntrySchemaTest { @Test public void testEntrySchemaPojo() { - assertNotNull(new JpaToscaEntrySchema()); - assertNotNull(new JpaToscaEntrySchema(new PfReferenceKey())); - assertNotNull(new JpaToscaEntrySchema(new PfReferenceKey(), new PfConceptKey())); - assertNotNull(new JpaToscaEntrySchema(new JpaToscaEntrySchema())); + assertNotNull(new JpaToscaEntrySchema(new PfConceptKey())); + assertNotNull(new JpaToscaEntrySchema(new JpaToscaEntrySchema(new PfConceptKey()))); try { - new JpaToscaEntrySchema((PfReferenceKey) null); + new JpaToscaEntrySchema((PfConceptKey) null); fail("test should throw an exception"); } catch (Exception exc) { - assertEquals("key is marked @NonNull but is null", exc.getMessage()); + assertEquals("type is marked @NonNull but is null", exc.getMessage()); } try { @@ -66,16 +61,14 @@ public class JpaToscaEntrySchemaTest { assertEquals("copyConcept is marked @NonNull but is null", exc.getMessage()); } - PfReferenceKey esKey = new PfReferenceKey("entrySchemaParent", "0.0.1", "entrySchema"); PfConceptKey typeKey = new PfConceptKey("type", "0.0.1"); - JpaToscaEntrySchema tes = new JpaToscaEntrySchema(esKey, typeKey); + JpaToscaEntrySchema tes = new JpaToscaEntrySchema(typeKey); tes.setDescription("A Description"); assertEquals("A Description", tes.getDescription()); List constraints = new ArrayList<>(); - JpaToscaConstraintLogicalString lsc = - new JpaToscaConstraintLogicalString(new PfReferenceKey(esKey, "sc"), Operation.EQ, "hello"); + JpaToscaConstraintLogical lsc = new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, "hello"); constraints.add(lsc); tes.setConstraints(constraints); assertEquals(constraints, tes.getConstraints()); @@ -84,20 +77,15 @@ public class JpaToscaEntrySchemaTest { assertEquals(tes, tdtClone0); assertEquals(0, tes.compareTo(tdtClone0)); - JpaToscaEntrySchema tdtClone1 = new JpaToscaEntrySchema(); - tes.copyTo(tdtClone1); + JpaToscaEntrySchema tdtClone1 = new JpaToscaEntrySchema(tes); assertEquals(tes, tdtClone1); assertEquals(0, tes.compareTo(tdtClone1)); assertEquals(-1, tes.compareTo(null)); assertEquals(0, tes.compareTo(tes)); - assertFalse(tes.compareTo(tes.getKey()) == 0); - PfReferenceKey otherEsKey = new PfReferenceKey("entrySchemaParent", "0.0.1", "otherEntrySchema"); - JpaToscaEntrySchema otherEs = new JpaToscaEntrySchema(otherEsKey); + JpaToscaEntrySchema otherEs = new JpaToscaEntrySchema(typeKey); - assertFalse(tes.compareTo(otherEs) == 0); - otherEs.setKey(esKey); assertFalse(tes.compareTo(otherEs) == 0); otherEs.setType(typeKey); assertFalse(tes.compareTo(otherEs) == 0); @@ -113,14 +101,14 @@ public class JpaToscaEntrySchemaTest { assertEquals("target is marked @NonNull but is null", exc.getMessage()); } - assertEquals(3, tes.getKeys().size()); - assertEquals(2, new JpaToscaEntrySchema().getKeys().size()); + assertEquals(1, tes.getKeys().size()); + assertEquals(1, new JpaToscaEntrySchema(typeKey).getKeys().size()); - new JpaToscaEntrySchema().clean(); + new JpaToscaEntrySchema(typeKey).clean(); tes.clean(); assertEquals(tdtClone0, tes); - assertFalse(new JpaToscaEntrySchema().validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaEntrySchema(typeKey).validate(new PfValidationResult()).isValid()); assertTrue(tes.validate(new PfValidationResult()).isValid()); tes.setType(PfConceptKey.getNullKey()); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypeTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypeTest.java index 7dac2684f..870640e75 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypeTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypeTest.java @@ -28,6 +28,7 @@ import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -35,6 +36,7 @@ import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntityType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty; @@ -46,7 +48,6 @@ import org.onap.policy.models.tosca.simple.concepts.JpaToscaTrigger; * @author Liam Fallon (liam.fallon@est.tech) */ public class JpaToscaPolicyTypeTest { - @Test public void testPolicyTypePojo() { assertNotNull(new JpaToscaPolicyType()); @@ -81,9 +82,9 @@ public class JpaToscaPolicyTypeTest { tpt.setDescription("A Description"); PfConceptKey propTypeKey = new PfConceptKey("propType", "0.0.1"); - List properties = new ArrayList<>(); + Map properties = new LinkedHashMap<>(); JpaToscaProperty tp = new JpaToscaProperty(new PfReferenceKey(ptKey, "aProp"), propTypeKey); - properties.add(tp); + properties.put(tp.getKey().getLocalName(), tp); tpt.setProperties(properties); assertEquals(properties, tpt.getProperties()); @@ -148,7 +149,7 @@ public class JpaToscaPolicyTypeTest { assertFalse(new JpaToscaPolicyType().validate(new PfValidationResult()).isValid()); assertTrue(tpt.validate(new PfValidationResult()).isValid()); - tpt.getProperties().add(null); + tpt.getProperties().put(null, null); assertFalse(tpt.validate(new PfValidationResult()).isValid()); tpt.getProperties().remove(null); assertTrue(tpt.validate(new PfValidationResult()).isValid()); @@ -191,20 +192,20 @@ public class JpaToscaPolicyTypeTest { } try { - new JpaToscaEntityType((PfConceptKey) null); + new JpaToscaEntityType((PfConceptKey) null); fail("test should throw an exception"); } catch (Exception exc) { assertEquals("key is marked @NonNull but is null", exc.getMessage()); } try { - new JpaToscaEntityType((JpaToscaEntityType) null); + new JpaToscaEntityType((JpaToscaEntityType) null); fail("test should throw an exception"); } catch (Exception exc) { assertEquals("copyConcept is marked @NonNull but is null", exc.getMessage()); } - JpaToscaEntityType tet = new JpaToscaEntityType(tpt.getKey()); + JpaToscaEntityType tet = new JpaToscaEntityType(tpt.getKey()); assertEquals(-1, tet.compareTo(null)); assertEquals(0, tet.compareTo(tet)); assertFalse(tet.compareTo(tet.getKey()) == 0); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPropertyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPropertyTest.java index 8d46c9533..83100cc3c 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPropertyTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPropertyTest.java @@ -33,11 +33,8 @@ import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraint; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogical.Operation; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogicalString; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntrySchema; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty; /** * DAO test for ToscaProperty. @@ -101,18 +98,16 @@ public class JpaToscaPropertyTest { tp.setDefaultValue("defaultKey"); - tp.setStatus(JpaToscaProperty.Status.SUPPORTED); + tp.setStatus(ToscaProperty.Status.SUPPORTED); List constraints = new ArrayList<>(); - JpaToscaConstraintLogicalString lsc = - new JpaToscaConstraintLogicalString(new PfReferenceKey(pkey, "sc"), Operation.EQ, "hello"); + JpaToscaConstraintLogical lsc = new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, "hello"); constraints.add(lsc); tp.setConstraints(constraints); assertEquals(constraints, tp.getConstraints()); - PfReferenceKey esKey = new PfReferenceKey(pkey, "entrySchema"); PfConceptKey typeKey = new PfConceptKey("type", "0.0.1"); - JpaToscaEntrySchema tes = new JpaToscaEntrySchema(esKey, typeKey); + JpaToscaEntrySchema tes = new JpaToscaEntrySchema(typeKey); tp.setEntrySchema(tes); JpaToscaProperty tdtClone0 = new JpaToscaProperty(tp); @@ -142,7 +137,7 @@ public class JpaToscaPropertyTest { assertFalse(tp.compareTo(otherDt) == 0); otherDt.setDefaultValue("defaultKey"); assertFalse(tp.compareTo(otherDt) == 0); - otherDt.setStatus(JpaToscaProperty.Status.SUPPORTED); + otherDt.setStatus(ToscaProperty.Status.SUPPORTED); assertFalse(tp.compareTo(otherDt) == 0); assertFalse(tp.compareTo(otherDt) == 0); otherDt.setConstraints(constraints); @@ -155,9 +150,9 @@ public class JpaToscaPropertyTest { otherDt.setRequired(false); assertEquals(0, tp.compareTo(otherDt)); - otherDt.setStatus(JpaToscaProperty.Status.UNSUPPORTED); + otherDt.setStatus(ToscaProperty.Status.UNSUPPORTED); assertFalse(tp.compareTo(otherDt) == 0); - otherDt.setStatus(JpaToscaProperty.Status.SUPPORTED); + otherDt.setStatus(ToscaProperty.Status.SUPPORTED); assertEquals(0, tp.compareTo(otherDt)); try { @@ -167,7 +162,7 @@ public class JpaToscaPropertyTest { assertEquals("target is marked @NonNull but is null", exc.getMessage()); } - assertEquals(5, tp.getKeys().size()); + assertEquals(3, tp.getKeys().size()); assertEquals(2, new JpaToscaProperty().getKeys().size()); new JpaToscaProperty().clean(); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTriggerTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTriggerTest.java index 661882a3f..0f69cb3c9 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTriggerTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTriggerTest.java @@ -33,8 +33,6 @@ import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogical.Operation; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogicalString; import org.onap.policy.models.tosca.simple.concepts.JpaToscaEventFilter; import org.onap.policy.models.tosca.simple.concepts.JpaToscaTimeInterval; import org.onap.policy.models.tosca.simple.concepts.JpaToscaTrigger; @@ -128,8 +126,7 @@ public class JpaToscaTriggerTest { new JpaToscaEventFilter(new PfReferenceKey(tkey, "filter"), new PfConceptKey("NodeName", "0.0.1")); tdt.setTargetFilter(targetFilter); - JpaToscaConstraintLogicalString lsc = - new JpaToscaConstraintLogicalString(new PfReferenceKey(tkey, "sc"), Operation.EQ, "hello"); + JpaToscaConstraintLogical lsc = new JpaToscaConstraintLogical(JpaToscaConstraintOperation.EQ, "hello"); tdt.setCondition(lsc); assertEquals(lsc, tdt.getCondition()); tdt.setConstraint(lsc); @@ -194,7 +191,7 @@ public class JpaToscaTriggerTest { assertEquals("target is marked @NonNull but is null", exc.getMessage()); } - assertEquals(6, tdt.getKeys().size()); + assertEquals(4, tdt.getKeys().size()); assertEquals(1, new JpaToscaTrigger().getKeys().size()); new JpaToscaTrigger().clean(); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/TestPojos.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/TestPojos.java index b3bdedf1c..e5be49860 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/TestPojos.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/TestPojos.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications 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. @@ -26,7 +27,6 @@ import com.openpojo.reflection.filters.FilterPackageInfo; import com.openpojo.validation.Validator; import com.openpojo.validation.ValidatorBuilder; import com.openpojo.validation.rule.impl.GetterMustExistRule; -import com.openpojo.validation.rule.impl.SetterMustExistRule; import com.openpojo.validation.test.impl.GetterTester; import com.openpojo.validation.test.impl.SetterTester; @@ -45,9 +45,16 @@ public class TestPojos { @Test public void testPojos() { - final Validator validator = ValidatorBuilder.create().with(new ToStringTester()) - .with(new SetterMustExistRule()).with(new GetterMustExistRule()).with(new SetterTester()) - .with(new GetterTester()).build(); + // @formatter:off + final Validator validator = ValidatorBuilder + .create() + .with(new ToStringTester()) + .with(new GetterMustExistRule()) + .with(new SetterTester()) + .with(new GetterTester()) + .build(); + // @formatter:on + validator.validate(POJO_PACKAGE, new FilterPackageInfo()); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/testconcepts/DummyToscaConstraint.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/testconcepts/DummyToscaConstraint.java index a743e2834..b13cb4b0b 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/testconcepts/DummyToscaConstraint.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/testconcepts/DummyToscaConstraint.java @@ -20,10 +20,7 @@ package org.onap.policy.models.tosca.simple.concepts.testconcepts; -import javax.ws.rs.core.Response; - -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.base.PfReferenceKey; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraint; /** @@ -38,25 +35,14 @@ public class DummyToscaConstraint extends JpaToscaConstraint { * The Default Constructor creates a {@link DummyToscaConstraint} object with a null key. */ public DummyToscaConstraint() { - super(new PfReferenceKey()); } - /** - * The Key Constructor creates a {@link DummyToscaConstraint} object with the given concept key. - * - * @param key the key of the constraint - */ - public DummyToscaConstraint(final PfReferenceKey key) { - super(key); + @Override + public ToscaConstraint toAuthorative() { + return null; } - /** - * Copy constructor. - * - * @param copyConcept the concept to copy from - */ - public DummyToscaConstraint(final DummyToscaConstraint copyConcept) { - super(copyConcept); - throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, "cannot copy an immutable constraint"); + @Override + public void fromAuthorative(ToscaConstraint authorativeConcept) { } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java index 029c7a7e1..ebbebce1c 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java @@ -24,14 +24,13 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; -import com.google.gson.Gson; - import java.sql.Connection; import java.sql.DriverManager; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; @@ -39,10 +38,10 @@ import org.onap.policy.models.dao.DaoParameters; import org.onap.policy.models.dao.PfDao; import org.onap.policy.models.dao.PfDaoFactory; import org.onap.policy.models.dao.impl.DefaultPfDao; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate; -import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; /** * Test the {@link SimpleToscaProvider} class. @@ -52,7 +51,7 @@ import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMes public class SimpleToscaProviderTest { private Connection connection; private PfDao pfDao; - private Gson gson; + private StandardCoder standardCoder; /** @@ -82,7 +81,7 @@ public class SimpleToscaProviderTest { */ @Before public void setupGson() { - gson = new ToscaServiceTemplateMessageBodyHandler().getGson(); + standardCoder = new StandardCoder(); } @After @@ -92,7 +91,7 @@ public class SimpleToscaProviderTest { } @Test - public void testPoliciesGet() throws PfModelException { + public void testPoliciesGet() throws Exception { try { new SimpleToscaProvider().getPolicies(null, null); fail("test should throw an exception here"); @@ -114,9 +113,12 @@ public class SimpleToscaProviderTest { assertEquals("policyKey is marked @NonNull but is null", exc.getMessage()); } - JpaToscaServiceTemplate originalServiceTemplate = - gson.fromJson(ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"), - JpaToscaServiceTemplate.class); + ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode( + ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"), + ToscaServiceTemplate.class); + + JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate(); + originalServiceTemplate.fromAuthorative(toscaServiceTemplate); assertNotNull(originalServiceTemplate); JpaToscaServiceTemplate createdServiceTemplate = @@ -135,7 +137,7 @@ public class SimpleToscaProviderTest { } @Test - public void testPolicyCreate() throws PfModelException { + public void testPolicyCreate() throws Exception { try { new SimpleToscaProvider().createPolicies(null, null); fail("test should throw an exception here"); @@ -157,9 +159,12 @@ public class SimpleToscaProviderTest { assertEquals("serviceTemplate is marked @NonNull but is null", exc.getMessage()); } - JpaToscaServiceTemplate originalServiceTemplate = - gson.fromJson(ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"), - JpaToscaServiceTemplate.class); + ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode( + ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"), + ToscaServiceTemplate.class); + + JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate(); + originalServiceTemplate.fromAuthorative(toscaServiceTemplate); assertNotNull(originalServiceTemplate); JpaToscaServiceTemplate createdServiceTemplate = @@ -169,7 +174,7 @@ public class SimpleToscaProviderTest { } @Test - public void testPolicyUpdate() throws PfModelException { + public void testPolicyUpdate() throws Exception { try { new SimpleToscaProvider().updatePolicies(null, null); fail("test should throw an exception here"); @@ -191,9 +196,12 @@ public class SimpleToscaProviderTest { assertEquals("serviceTemplate is marked @NonNull but is null", exc.getMessage()); } - JpaToscaServiceTemplate originalServiceTemplate = - gson.fromJson(ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"), - JpaToscaServiceTemplate.class); + ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode( + ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"), + ToscaServiceTemplate.class); + + JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate(); + originalServiceTemplate.fromAuthorative(toscaServiceTemplate); assertNotNull(originalServiceTemplate); JpaToscaServiceTemplate updatedServiceTemplate = @@ -203,7 +211,7 @@ public class SimpleToscaProviderTest { } @Test - public void testPoliciesDelete() throws PfModelException { + public void testPoliciesDelete() throws Exception { try { new SimpleToscaProvider().deletePolicies(null, null); fail("test should throw an exception here"); @@ -225,9 +233,12 @@ public class SimpleToscaProviderTest { assertEquals("policyKey is marked @NonNull but is null", exc.getMessage()); } - JpaToscaServiceTemplate originalServiceTemplate = - gson.fromJson(ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"), - JpaToscaServiceTemplate.class); + ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode( + ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"), + ToscaServiceTemplate.class); + + JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate(); + originalServiceTemplate.fromAuthorative(toscaServiceTemplate); assertNotNull(originalServiceTemplate); JpaToscaServiceTemplate createdServiceTemplate = diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java index 1f17a43bf..5f0cbb355 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java @@ -26,23 +26,21 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.google.gson.JsonSyntaxException; -import java.io.IOException; import java.util.Map; import org.junit.Before; import org.junit.Test; +import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; @@ -64,11 +62,11 @@ public class MonitoringPolicySerializationTest { private static final String VFW_MON_INPUT_JSON = "policies/vFirewall.policy.monitoring.input.tosca.json"; private static final String VFW_MON_INPUT_YAML = "policies/vFirewall.policy.monitoring.input.tosca.yaml"; - private Gson gson; + private StandardCoder standardCoder; @Before public void setUp() { - gson = new ToscaServiceTemplateMessageBodyHandler().getGson(); + standardCoder = new StandardCoder(); } @Test @@ -93,6 +91,7 @@ public class MonitoringPolicySerializationTest { assertTrue(serviceTemplateFromJson.compareTo(serviceTemplateFromYaml) == 0); } catch (Exception e) { + LOGGER.warn("No exception should be thrown", e); fail("No exception should be thrown"); } } @@ -122,11 +121,13 @@ public class MonitoringPolicySerializationTest { } private JpaToscaServiceTemplate deserializeMonitoringInputJson(String resourcePath) - throws JsonSyntaxException, IOException { + throws Exception { String policyJson = ResourceUtils.getResourceAsString(resourcePath); - JpaToscaServiceTemplate serviceTemplate = gson.fromJson(policyJson, JpaToscaServiceTemplate.class); - return serviceTemplate; + ToscaServiceTemplate serviceTemplate = standardCoder.decode(policyJson, ToscaServiceTemplate.class); + JpaToscaServiceTemplate jpaToscaServiceTemplate = new JpaToscaServiceTemplate(); + jpaToscaServiceTemplate.fromAuthorative(serviceTemplate); + return jpaToscaServiceTemplate; } private JpaToscaServiceTemplate deserializeMonitoringInputYaml(String resourcePath) @@ -136,12 +137,15 @@ public class MonitoringPolicySerializationTest { String policyYaml = ResourceUtils.getResourceAsString(resourcePath); Object yamlObject = yaml.load(policyYaml); String yamlAsJsonString = new StandardCoder().encode(yamlObject); - JpaToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, JpaToscaServiceTemplate.class); - return serviceTemplate; + ToscaServiceTemplate serviceTemplate = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class); + + JpaToscaServiceTemplate jpaToscaServiceTemplate = new JpaToscaServiceTemplate(); + jpaToscaServiceTemplate.fromAuthorative(serviceTemplate); + return jpaToscaServiceTemplate; } - private String serializeMonitoringServiceTemplate(JpaToscaServiceTemplate serviceTemplate) { - return gson.toJson(serviceTemplate); + private String serializeMonitoringServiceTemplate(JpaToscaServiceTemplate serviceTemplate) throws CoderException { + return standardCoder.encode(serviceTemplate.toAuthorative()); } private void verifyVcpeMonitoringInputDeserialization(JpaToscaServiceTemplate serviceTemplate) { diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java index b494199e8..569e1ad41 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java @@ -26,26 +26,24 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.gson.Gson; -import com.google.gson.JsonSyntaxException; - -import java.io.IOException; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.junit.Before; import org.junit.Test; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogicalString; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; +import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogical; import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintValidValues; import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntrySchema; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; @@ -63,11 +61,11 @@ public class MonitoringPolicyTypeSerializationTest { private static final String MONITORING_COLLECTORS_YAML = "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml"; - private Gson gson; + private StandardCoder coder; @Before public void setUp() { - gson = new ToscaServiceTemplateMessageBodyHandler().getGson(); + coder = new StandardCoder(); } @Test @@ -82,6 +80,7 @@ public class MonitoringPolicyTypeSerializationTest { verifyCollectorInputDeserialization(serviceTemplateFromYaml); } catch (Exception e) { + LOGGER.warn("No exception should be thrown", e); fail("No exception should be thrown"); } } @@ -90,34 +89,47 @@ public class MonitoringPolicyTypeSerializationTest { public void testSerialization() { try { // TCA - JpaToscaServiceTemplate serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_TCA_YAML); - String serializedServiceTemplate1 = serializeMonitoringServiceTemplate(serviceTemplateFromYaml); - JpaToscaServiceTemplate serviceTemplateFromJson = gson.fromJson(serializedServiceTemplate1, - JpaToscaServiceTemplate.class); - String serializedServiceTemplate2 = serializeMonitoringServiceTemplate(serviceTemplateFromJson); - assertEquals(serializedServiceTemplate1, serializedServiceTemplate2); + JpaToscaServiceTemplate tcaServiceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_TCA_YAML); + String serializedServiceTemplateTca = serializeMonitoringServiceTemplate(tcaServiceTemplateFromYaml); + + ToscaServiceTemplate toscaServiceTemplateFromJsonTca = + coder.decode(serializedServiceTemplateTca, ToscaServiceTemplate.class); + + JpaToscaServiceTemplate serviceTemplateFromJsonTca = new JpaToscaServiceTemplate(); + serviceTemplateFromJsonTca.fromAuthorative(toscaServiceTemplateFromJsonTca); + String serializedServiceTemplateTcaOut = serializeMonitoringServiceTemplate(serviceTemplateFromJsonTca); + assertEquals(serializedServiceTemplateTca, serializedServiceTemplateTcaOut); // Collector - serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_COLLECTORS_YAML); - serializedServiceTemplate1 = serializeMonitoringServiceTemplate(serviceTemplateFromYaml); - serviceTemplateFromJson = gson.fromJson(serializedServiceTemplate1, JpaToscaServiceTemplate.class); - serializedServiceTemplate2 = serializeMonitoringServiceTemplate(serviceTemplateFromJson); - assertEquals(serializedServiceTemplate1, serializedServiceTemplate2); + JpaToscaServiceTemplate collectorServiceTemplateFromYaml = + deserializeMonitoringInputYaml(MONITORING_COLLECTORS_YAML); + String serializedServiceTemplateCollector = + serializeMonitoringServiceTemplate(collectorServiceTemplateFromYaml); + ToscaServiceTemplate toscaServiceTemplateFromJsonCollector = + coder.decode(serializedServiceTemplateCollector, ToscaServiceTemplate.class); + JpaToscaServiceTemplate serviceTemplateFromJsonCollector = new JpaToscaServiceTemplate(); + serviceTemplateFromJsonCollector.fromAuthorative(toscaServiceTemplateFromJsonCollector); + String serializedServiceTemplateCollectorsOut = + serializeMonitoringServiceTemplate(serviceTemplateFromJsonCollector); + assertEquals(serializedServiceTemplateCollector, serializedServiceTemplateCollectorsOut); } catch (Exception e) { + LOGGER.warn("No exception should be thrown", e); fail("No exception should be thrown"); } } - private JpaToscaServiceTemplate deserializeMonitoringInputYaml(String resourcePath) - throws JsonSyntaxException, IOException { + private JpaToscaServiceTemplate deserializeMonitoringInputYaml(String resourcePath) throws Exception { Yaml yaml = new Yaml(); String policyTypeYaml = ResourceUtils.getResourceAsString(resourcePath); Object yamlObject = yaml.load(policyTypeYaml); - String yamlAsJsonString = new Gson().toJson(yamlObject); - JpaToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, JpaToscaServiceTemplate.class); - return serviceTemplate; + String yamlAsJsonString = coder.encode(yamlObject); + ToscaServiceTemplate serviceTemplate = coder.decode(yamlAsJsonString, ToscaServiceTemplate.class); + + JpaToscaServiceTemplate jpaToscaServiceTemplate = new JpaToscaServiceTemplate(); + jpaToscaServiceTemplate.fromAuthorative(serviceTemplate); + return jpaToscaServiceTemplate; } private void verifyTcaInputDeserialization(JpaToscaServiceTemplate serviceTemplate) { @@ -137,7 +149,7 @@ public class MonitoringPolicyTypeSerializationTest { Entry firstPolicyType = policyTypesIter.next(); assertEquals("onap.policies.Monitoring", firstPolicyType.getKey().getName()); - assertEquals("1.0.0", firstPolicyType.getKey().getVersion()); + assertEquals("0.0.0", firstPolicyType.getKey().getVersion()); assertEquals("tosca.policies.Root", firstPolicyType.getValue().getDerivedFrom().getName()); assertEquals("a base policy type for all policies that governs monitoring provisioning", firstPolicyType.getValue().getDescription()); @@ -148,7 +160,7 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("onap.policies.Monitoring", secondPolicyType.getValue().getDerivedFrom().getName()); assertTrue(secondPolicyType.getValue().getProperties().size() == 1); - JpaToscaProperty property = secondPolicyType.getValue().getProperties().iterator().next(); + JpaToscaProperty property = secondPolicyType.getValue().getProperties().values().iterator().next(); assertEquals("onap.policy.monitoring.cdap.tca.hi.lo.app", property.getKey().getParentKeyName()); assertEquals("1.0.0", property.getKey().getParentKeyVersion()); assertEquals("tca_policy", property.getKey().getLocalName()); @@ -156,9 +168,6 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("TCA Policy JSON", property.getDescription()); JpaToscaEntrySchema entrySchema = property.getEntrySchema(); - assertEquals("map", entrySchema.getKey().getParentKeyName()); - assertEquals("1.0.0", entrySchema.getKey().getParentKeyVersion()); - assertEquals("entry_schema", entrySchema.getKey().getLocalName()); assertEquals("onap.datatypes.monitoring.tca_policy", entrySchema.getType().getName()); // Check data_types @@ -170,81 +179,74 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataType.getKey().getName()); JpaToscaDataType firstDataTypeVal = firstDataType.getValue(); assertEquals("tosca.datatypes.Root", firstDataTypeVal.getDerivedFrom().getName()); - assertEquals("1.0.0", firstDataTypeVal.getDerivedFrom().getVersion()); + assertEquals("0.0.0", firstDataTypeVal.getDerivedFrom().getVersion()); assertTrue(firstDataTypeVal.getProperties().size() == 6); - Iterator firstDataTypePropertiesIter = firstDataTypeVal.getProperties().iterator(); + Iterator firstDataTypePropertiesIter = firstDataTypeVal.getProperties().values().iterator(); JpaToscaProperty firstDataTypeFirstProperty = firstDataTypePropertiesIter.next(); - assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFirstProperty.getKey() - .getParentKeyName()); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", + firstDataTypeFirstProperty.getKey().getParentKeyName()); assertEquals("controlLoopSchemaType", firstDataTypeFirstProperty.getKey().getLocalName()); assertEquals("string", firstDataTypeFirstProperty.getType().getName()); assertTrue(firstDataTypeFirstProperty.isRequired()); assertEquals("Specifies Control Loop Schema Type for the event Name e.g. VNF, VM", firstDataTypeFirstProperty.getDescription()); assertTrue(firstDataTypeFirstProperty.getConstraints().size() == 1); - assertEquals("valid_values", firstDataTypeFirstProperty.getConstraints().iterator().next().getKey() - .getLocalName()); - assertEquals("string", firstDataTypeFirstProperty.getConstraints().iterator().next().getKey() - .getParentKeyName()); - assertTrue(firstDataTypeFirstProperty.getConstraints().iterator().next() - instanceof JpaToscaConstraintValidValues); - assertTrue(((JpaToscaConstraintValidValues)(firstDataTypeFirstProperty.getConstraints().iterator().next())) + assertEquals("org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintValidValues", + firstDataTypeFirstProperty.getConstraints().iterator().next().getClass().getCanonicalName()); + assertTrue(((JpaToscaConstraintValidValues) (firstDataTypeFirstProperty.getConstraints().iterator().next())) .getValidValues().size() == 2); JpaToscaProperty firstDataTypeSecondProperty = firstDataTypePropertiesIter.next(); - assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeSecondProperty.getKey() - .getParentKeyName()); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", + firstDataTypeSecondProperty.getKey().getParentKeyName()); assertEquals("eventName", firstDataTypeSecondProperty.getKey().getLocalName()); assertEquals("string", firstDataTypeSecondProperty.getType().getName()); assertTrue(firstDataTypeSecondProperty.isRequired()); - assertEquals("Event name to which thresholds need to be applied", firstDataTypeSecondProperty - .getDescription()); + assertEquals("Event name to which thresholds need to be applied", firstDataTypeSecondProperty.getDescription()); JpaToscaProperty firstDataTypeThirdProperty = firstDataTypePropertiesIter.next(); - assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeThirdProperty.getKey() - .getParentKeyName()); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", + firstDataTypeThirdProperty.getKey().getParentKeyName()); assertEquals("policyName", firstDataTypeThirdProperty.getKey().getLocalName()); assertEquals("string", firstDataTypeThirdProperty.getType().getName()); assertTrue(firstDataTypeThirdProperty.isRequired()); assertEquals("TCA Policy Scope Name", firstDataTypeThirdProperty.getDescription()); JpaToscaProperty firstDataTypeFourthProperty = firstDataTypePropertiesIter.next(); - assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFourthProperty.getKey() - .getParentKeyName()); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", + firstDataTypeFourthProperty.getKey().getParentKeyName()); assertEquals("policyScope", firstDataTypeFourthProperty.getKey().getLocalName()); assertEquals("string", firstDataTypeFourthProperty.getType().getName()); assertTrue(firstDataTypeFourthProperty.isRequired()); assertEquals("TCA Policy Scope", firstDataTypeFourthProperty.getDescription()); JpaToscaProperty firstDataTypeFifthProperty = firstDataTypePropertiesIter.next(); - assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFifthProperty.getKey() - .getParentKeyName()); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", + firstDataTypeFifthProperty.getKey().getParentKeyName()); assertEquals("policyVersion", firstDataTypeFifthProperty.getKey().getLocalName()); assertEquals("string", firstDataTypeFifthProperty.getType().getName()); assertTrue(firstDataTypeFifthProperty.isRequired()); assertEquals("TCA Policy Scope Version", firstDataTypeFifthProperty.getDescription()); JpaToscaProperty firstDataTypeSixthProperty = firstDataTypePropertiesIter.next(); - assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeSixthProperty.getKey() - .getParentKeyName()); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", + firstDataTypeSixthProperty.getKey().getParentKeyName()); assertEquals("thresholds", firstDataTypeSixthProperty.getKey().getLocalName()); assertEquals("list", firstDataTypeSixthProperty.getType().getName()); assertTrue(firstDataTypeSixthProperty.isRequired()); assertEquals("Thresholds associated with eventName", firstDataTypeSixthProperty.getDescription()); assertNotNull(firstDataTypeSixthProperty.getEntrySchema()); - assertEquals("entry_schema", firstDataTypeSixthProperty.getEntrySchema().getKey().getLocalName()); - assertEquals("list", firstDataTypeSixthProperty.getEntrySchema().getKey().getParentKeyName()); - assertEquals("onap.datatypes.monitoring.thresholds", firstDataTypeSixthProperty.getEntrySchema().getType() - .getName()); + assertEquals("onap.datatypes.monitoring.thresholds", + firstDataTypeSixthProperty.getEntrySchema().getType().getName()); Entry secondDataType = dataTypesIter.next(); assertEquals("onap.datatypes.monitoring.tca_policy", secondDataType.getKey().getName()); JpaToscaDataType secondDataTypeVal = secondDataType.getValue(); assertEquals("tosca.datatypes.Root", secondDataTypeVal.getDerivedFrom().getName()); - assertEquals("1.0.0", secondDataTypeVal.getDerivedFrom().getVersion()); + assertEquals("0.0.0", secondDataTypeVal.getDerivedFrom().getVersion()); assertTrue(secondDataTypeVal.getProperties().size() == 2); - Iterator secondDataTypePropertiesIter = secondDataTypeVal.getProperties().iterator(); + Iterator secondDataTypePropertiesIter = secondDataTypeVal.getProperties().values().iterator(); JpaToscaProperty secondDataTypeFirstProperty = secondDataTypePropertiesIter.next(); assertEquals("onap.datatypes.monitoring.tca_policy", secondDataTypeFirstProperty.getKey().getParentKeyName()); @@ -254,13 +256,10 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("Domain name to which TCA needs to be applied", secondDataTypeFirstProperty.getDescription()); assertEquals("measurementsForVfScaling", secondDataTypeFirstProperty.getDefaultValue()); assertTrue(secondDataTypeFirstProperty.getConstraints().size() == 1); - assertEquals("string", secondDataTypeFirstProperty.getConstraints().iterator().next().getKey() - .getParentKeyName()); - assertEquals("equal", secondDataTypeFirstProperty.getConstraints().iterator().next().getKey().getLocalName()); - assertTrue(secondDataTypeFirstProperty.getConstraints().iterator().next() - instanceof JpaToscaConstraintLogicalString); - assertEquals("measurementsForVfScaling", ((JpaToscaConstraintLogicalString)(secondDataTypeFirstProperty - .getConstraints().iterator().next())).getCompareToString()); + assertTrue(secondDataTypeFirstProperty.getConstraints().iterator().next() instanceof JpaToscaConstraintLogical); + assertEquals("measurementsForVfScaling", + ((JpaToscaConstraintLogical) (secondDataTypeFirstProperty.getConstraints().iterator().next())) + .getCompareTo()); JpaToscaProperty secondDataTypeSecondProperty = secondDataTypePropertiesIter.next(); assertEquals("onap.datatypes.monitoring.tca_policy", secondDataTypeSecondProperty.getKey().getParentKeyName()); @@ -270,26 +269,24 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("Contains eventName and threshold details that need to be applied to given eventName", secondDataTypeSecondProperty.getDescription()); assertNotNull(secondDataTypeSecondProperty.getEntrySchema()); - assertEquals("list", secondDataTypeSecondProperty.getEntrySchema().getKey().getParentKeyName()); assertEquals("onap.datatypes.monitoring.metricsPerEventName", secondDataTypeSecondProperty.getEntrySchema().getType().getName()); - assertEquals("entry_schema", secondDataTypeSecondProperty.getEntrySchema().getKey().getLocalName()); Entry thirdDataType = dataTypesIter.next(); assertEquals("onap.datatypes.monitoring.thresholds", thirdDataType.getKey().getName()); JpaToscaDataType thirdDataTypeVal = thirdDataType.getValue(); assertEquals("tosca.datatypes.Root", thirdDataTypeVal.getDerivedFrom().getName()); - assertEquals("1.0.0", thirdDataTypeVal.getDerivedFrom().getVersion()); + assertEquals("0.0.0", thirdDataTypeVal.getDerivedFrom().getVersion()); assertTrue(thirdDataTypeVal.getProperties().size() == 7); - Iterator thirdDataTypePropertiesIter = thirdDataTypeVal.getProperties().iterator(); + Iterator thirdDataTypePropertiesIter = thirdDataTypeVal.getProperties().values().iterator(); JpaToscaProperty thirdDataTypeFirstProperty = thirdDataTypePropertiesIter.next(); assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeFirstProperty.getKey().getParentKeyName()); assertEquals("closedLoopControlName", thirdDataTypeFirstProperty.getKey().getLocalName()); assertEquals("string", thirdDataTypeFirstProperty.getType().getName()); assertTrue(thirdDataTypeFirstProperty.isRequired()); - assertEquals("Closed Loop Control Name associated with the threshold", thirdDataTypeFirstProperty - .getDescription()); + assertEquals("Closed Loop Control Name associated with the threshold", + thirdDataTypeFirstProperty.getDescription()); JpaToscaProperty thirdDataTypeSecondProperty = thirdDataTypePropertiesIter.next(); assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeSecondProperty.getKey().getParentKeyName()); @@ -299,13 +296,11 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("Closed Loop Event Status of the threshold", thirdDataTypeSecondProperty.getDescription()); assertNotNull(thirdDataTypeSecondProperty.getConstraints()); assertTrue(thirdDataTypeSecondProperty.getConstraints().size() == 1); - assertEquals("string", thirdDataTypeSecondProperty.getConstraints().iterator().next().getKey() - .getParentKeyName()); - assertEquals("valid_values", thirdDataTypeSecondProperty.getConstraints().iterator().next().getKey() - .getLocalName()); - assertTrue(thirdDataTypeSecondProperty.getConstraints().iterator().next() - instanceof JpaToscaConstraintValidValues); - assertTrue(((JpaToscaConstraintValidValues)(thirdDataTypeSecondProperty.getConstraints().iterator().next())) + assertEquals("JpaToscaConstraintValidValues(validValues=[ONSET, ABATED])", + thirdDataTypeSecondProperty.getConstraints().iterator().next().toString()); + assertTrue(thirdDataTypeSecondProperty.getConstraints().iterator() + .next() instanceof JpaToscaConstraintValidValues); + assertTrue(((JpaToscaConstraintValidValues) (thirdDataTypeSecondProperty.getConstraints().iterator().next())) .getValidValues().size() == 2); JpaToscaProperty thirdDataTypeThirdProperty = thirdDataTypePropertiesIter.next(); @@ -316,11 +311,10 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("Direction of the threshold", thirdDataTypeThirdProperty.getDescription()); assertNotNull(thirdDataTypeThirdProperty.getConstraints()); assertTrue(thirdDataTypeThirdProperty.getConstraints().size() == 1); - assertEquals("string", thirdDataTypeThirdProperty.getConstraints().iterator().next().getKey() - .getParentKeyName()); - assertEquals("valid_values", thirdDataTypeThirdProperty.getConstraints().iterator().next().getKey() - .getLocalName()); - assertTrue(((JpaToscaConstraintValidValues)(thirdDataTypeThirdProperty.getConstraints().iterator().next())) + assertEquals( + "JpaToscaConstraintValidValues(validValues=[LESS, LESS_OR_EQUAL, GREATER, GREATER_OR_EQUAL, EQUAL])", + thirdDataTypeThirdProperty.getConstraints().iterator().next().toString()); + assertTrue(((JpaToscaConstraintValidValues) (thirdDataTypeThirdProperty.getConstraints().iterator().next())) .getValidValues().size() == 5); JpaToscaProperty thirdDataTypeFourthProperty = thirdDataTypePropertiesIter.next(); @@ -332,11 +326,7 @@ public class MonitoringPolicyTypeSerializationTest { thirdDataTypeFourthProperty.getDescription()); assertNotNull(thirdDataTypeFourthProperty.getConstraints()); assertTrue(thirdDataTypeFourthProperty.getConstraints().size() == 1); - assertEquals("string", thirdDataTypeFourthProperty.getConstraints().iterator().next().getKey() - .getParentKeyName()); - assertEquals("valid_values", thirdDataTypeFourthProperty.getConstraints().iterator().next().getKey() - .getLocalName()); - assertTrue(((JpaToscaConstraintValidValues)(thirdDataTypeFourthProperty.getConstraints().iterator().next())) + assertTrue(((JpaToscaConstraintValidValues) (thirdDataTypeFourthProperty.getConstraints().iterator().next())) .getValidValues().size() == 43); JpaToscaProperty thirdDataTypeFifthProperty = thirdDataTypePropertiesIter.next(); @@ -347,11 +337,9 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("Threshold Event Severity", thirdDataTypeFifthProperty.getDescription()); assertNotNull(thirdDataTypeFifthProperty.getConstraints()); assertTrue(thirdDataTypeFifthProperty.getConstraints().size() == 1); - assertEquals("string", thirdDataTypeFifthProperty.getConstraints().iterator().next().getKey() - .getParentKeyName()); - assertEquals("valid_values", thirdDataTypeFifthProperty.getConstraints().iterator().next().getKey() - .getLocalName()); - assertTrue(((JpaToscaConstraintValidValues)(thirdDataTypeFifthProperty.getConstraints().iterator().next())) + assertEquals("JpaToscaConstraintValidValues(validValues=[CRITICAL, MAJOR, MINOR, WARNING, NORMAL])", + thirdDataTypeFifthProperty.getConstraints().iterator().next().toString()); + assertTrue(((JpaToscaConstraintValidValues) (thirdDataTypeFifthProperty.getConstraints().iterator().next())) .getValidValues().size() == 5);; JpaToscaProperty thirdDataTypeSixthProperty = thirdDataTypePropertiesIter.next(); @@ -359,8 +347,8 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("thresholdValue", thirdDataTypeSixthProperty.getKey().getLocalName()); assertEquals("integer", thirdDataTypeSixthProperty.getType().getName()); assertTrue(thirdDataTypeSixthProperty.isRequired()); - assertEquals("Threshold value for the field Path inside CEF message", thirdDataTypeSixthProperty - .getDescription()); + assertEquals("Threshold value for the field Path inside CEF message", + thirdDataTypeSixthProperty.getDescription()); JpaToscaProperty thirdDataTypeSeventhProperty = thirdDataTypePropertiesIter.next(); assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeSeventhProperty.getKey().getParentKeyName()); @@ -399,7 +387,7 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("policy.nodes.Root", secondPolicyType.getValue().getDerivedFrom().getName()); assertTrue(secondPolicyType.getValue().getProperties().size() == 2); - Iterator propertiesIter = secondPolicyType.getValue().getProperties().iterator(); + Iterator propertiesIter = secondPolicyType.getValue().getProperties().values().iterator(); JpaToscaProperty firstProperty = propertiesIter.next(); assertEquals("onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server", @@ -418,7 +406,8 @@ public class MonitoringPolicyTypeSerializationTest { assertEquals("datafile Policy JSON as string", secondProperty.getDescription()); } - private String serializeMonitoringServiceTemplate(JpaToscaServiceTemplate serviceTemplate) { - return gson.toJson(serviceTemplate); + private String serializeMonitoringServiceTemplate(JpaToscaServiceTemplate serviceTemplate) throws CoderException { + ToscaServiceTemplate toscaServiceTemplate = serviceTemplate.toAuthorative(); + return coder.encode(toscaServiceTemplate); } -} \ No newline at end of file +} -- 2.16.6