X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=models-tosca%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fmodels%2Ftosca%2Futils%2FToscaUtils.java;h=f4c22fc5f64b5c380a52509b6ff9c72ff1913ea8;hb=938005505883cf7a636a8840e20e3dc8a0ad9176;hp=77633bd27d8de2e605eab409c259e7e4949bad4a;hpb=ca409ee108f3f653d66be804e8a9f95f794e26d4;p=policy%2Fmodels.git diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java index 77633bd27..f4c22fc5f 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. + * Copyright (C) 2019-2023 Nordix Foundation. + * Modifications Copyright (C) 2020-2021 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. @@ -20,24 +21,24 @@ package org.onap.policy.models.tosca.utils; +import jakarta.ws.rs.core.Response; import java.util.Collection; +import java.util.HashSet; import java.util.Set; import java.util.function.Function; - -import javax.ws.rs.core.Response; - +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import lombok.NonNull; - import org.apache.commons.collections4.CollectionUtils; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptContainer; 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.PfNameVersion; -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.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntityType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; @@ -47,6 +48,7 @@ import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; * * @author Liam Fallon (liam.fallon@est.tech) */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) public final class ToscaUtils { private static final String ROOT_KEY_NAME_SUFFIX = ".Root"; @@ -60,6 +62,7 @@ public final class ToscaUtils { new PfConceptKey("null", PfKey.NULL_KEY_VERSION), new PfConceptKey("list", PfKey.NULL_KEY_VERSION), new PfConceptKey("map", PfKey.NULL_KEY_VERSION), + new PfConceptKey("object", PfKey.NULL_KEY_VERSION), new PfConceptKey("scalar-unit.size", PfKey.NULL_KEY_VERSION), new PfConceptKey("scalar-unit.time", PfKey.NULL_KEY_VERSION), new PfConceptKey("scalar-unit.frequency", PfKey.NULL_KEY_VERSION), @@ -67,13 +70,6 @@ public final class ToscaUtils { ); // @formatter:on - /** - * Private constructor to prevent subclassing. - */ - private ToscaUtils() { - // Private constructor to prevent subclassing - } - /** * Get the predefined policy types. * @@ -110,6 +106,15 @@ public final class ToscaUtils { assertExist(serviceTemplate, ToscaUtils::checkPoliciesExist); } + /** + * Assert that node templates have been specified correctly. + * + * @param serviceTemplate the service template containing node templates to be checked + */ + public static void assertNodeTemplatesExist(final JpaToscaServiceTemplate serviceTemplate) { + assertExist(serviceTemplate, ToscaUtils::checkNodeTemplateExist); + } + /** * Check that data types have been specified correctly. * @@ -138,6 +143,16 @@ public final class ToscaUtils { return doExist(serviceTemplate, ToscaUtils::checkPoliciesExist); } + /** + * Check that tosca node templates have been specified correctly. + * + * @param serviceTemplate the service template containing node templates to be checked + */ + public static boolean doNodeTemplatesExist(final JpaToscaServiceTemplate serviceTemplate) { + + return doExist(serviceTemplate, ToscaUtils::checkNodeTemplateExist); + } + /** * Assert that something have been specified correctly. * @@ -210,6 +225,20 @@ public final class ToscaUtils { return null; } + /** + * Check if node templates have been specified correctly. + */ + public static String checkNodeTemplateExist(final JpaToscaServiceTemplate serviceTemplate) { + if (serviceTemplate.getTopologyTemplate().getNodeTemplates() == null) { + return "node templates not present on the service template"; + } + + if (serviceTemplate.getTopologyTemplate().getNodeTemplates().getConceptMap().isEmpty()) { + return "no parameters present on the node templates"; + } + return null; + } + /** * getLatestPolicyTypeVersion Find all the ancestors of an entity type. * @@ -220,7 +249,7 @@ public final class ToscaUtils { */ public static Collection> getEntityTypeAncestors( @NonNull PfConceptContainer entityTypes, - @NonNull JpaToscaEntityType entityType, @NonNull final PfValidationResult result) { + @NonNull JpaToscaEntityType entityType, @NonNull final BeanValidationResult result) { PfConceptKey parentEntityTypeKey = entityType.getDerivedFrom(); if (parentEntityTypeKey == null || parentEntityTypeKey.getName().endsWith(ROOT_KEY_NAME_SUFFIX)) { @@ -228,24 +257,23 @@ public final class ToscaUtils { } if (entityType.getKey().equals(parentEntityTypeKey)) { - result.addValidationMessage(new PfValidationMessage(entityType.getKey(), ToscaUtils.class, - ValidationResult.INVALID, "entity cannot be an ancestor of itself")); - throw new PfModelRuntimeException(Response.Status.CONFLICT, result.toString()); + result.addResult("entity type", entityType.getKey().getId(), + ValidationStatus.INVALID, "ancestor of itself"); + throw new PfModelRuntimeException(Response.Status.CONFLICT, result.getResult()); } @SuppressWarnings("unchecked") Set> ancestorEntitySet = (Set>) entityTypes .getAll(parentEntityTypeKey.getName(), parentEntityTypeKey.getVersion()); - + Set> ancestorEntitySetToReturn = new HashSet<>(ancestorEntitySet); if (ancestorEntitySet.isEmpty()) { - result.addValidationMessage(new PfValidationMessage(entityType.getKey(), ToscaUtils.class, - ValidationResult.INVALID, "parent " + parentEntityTypeKey.getId() + " of entity not found")); + result.addResult("parent", parentEntityTypeKey.getId(), ValidationStatus.INVALID, Validated.NOT_FOUND); } else { for (JpaToscaEntityType filteredEntityType : ancestorEntitySet) { - ancestorEntitySet.addAll(getEntityTypeAncestors(entityTypes, filteredEntityType, result)); + ancestorEntitySetToReturn.addAll(getEntityTypeAncestors(entityTypes, filteredEntityType, result)); } } - return ancestorEntitySet; + return ancestorEntitySetToReturn; } /** @@ -259,20 +287,22 @@ public final class ToscaUtils { @NonNull final PfConceptContainer entityTypes, final String entityName, final String entityVersion) { - PfValidationResult result = new PfValidationResult(); + var result = new BeanValidationResult("entity", entityName); @SuppressWarnings("unchecked") Set> filteredEntitySet = - (Set>) entityTypes.getAll(entityName, entityVersion); + (Set>) entityTypes.getAllNamesAndVersions(entityName, entityVersion); + Set> filteredEntitySetToReturn = new HashSet<>(filteredEntitySet); for (JpaToscaEntityType filteredEntityType : filteredEntitySet) { - filteredEntitySet.addAll(ToscaUtils.getEntityTypeAncestors(entityTypes, filteredEntityType, result)); + filteredEntitySetToReturn + .addAll(ToscaUtils.getEntityTypeAncestors(entityTypes, filteredEntityType, result)); } if (!result.isValid()) { - throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, result.toString()); + throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, result.getResult()); } entityTypes.getConceptMap().entrySet() - .removeIf(entityEntry -> !filteredEntitySet.contains(entityEntry.getValue())); + .removeIf(entityEntry -> !filteredEntitySetToReturn.contains(entityEntry.getValue())); } }