Java 17 Upgrade
[policy/models.git] / models-tosca / src / main / java / org / onap / policy / models / tosca / utils / ToscaUtils.java
index 77633bd..f4c22fc 100644 (file)
@@ -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.
 
 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<JpaToscaEntityType<ToscaEntity>> getEntityTypeAncestors(
             @NonNull PfConceptContainer<? extends PfConcept, ? extends PfNameVersion> 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<JpaToscaEntityType<ToscaEntity>> ancestorEntitySet = (Set<JpaToscaEntityType<ToscaEntity>>) entityTypes
                 .getAll(parentEntityTypeKey.getName(), parentEntityTypeKey.getVersion());
-
+        Set<JpaToscaEntityType<ToscaEntity>> 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<? extends PfConcept, ? extends PfNameVersion> entityTypes,
             final String entityName, final String entityVersion) {
 
-        PfValidationResult result = new PfValidationResult();
+        var result = new BeanValidationResult("entity", entityName);
 
         @SuppressWarnings("unchecked")
         Set<JpaToscaEntityType<?>> filteredEntitySet =
-                (Set<JpaToscaEntityType<?>>) entityTypes.getAll(entityName, entityVersion);
+                (Set<JpaToscaEntityType<?>>) entityTypes.getAllNamesAndVersions(entityName, entityVersion);
+        Set<JpaToscaEntityType<?>> 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()));
     }
 }