/*-
* ============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;
*
* @author Liam Fallon (liam.fallon@est.tech)
*/
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ToscaUtils {
private static final String ROOT_KEY_NAME_SUFFIX = ".Root";
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),
);
// @formatter:on
- /**
- * Private constructor to prevent subclassing.
- */
- private ToscaUtils() {
- // Private constructor to prevent subclassing
- }
-
/**
* Get the predefined policy types.
*
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.
*
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.
*
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.
*
*/
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)) {
}
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;
}
/**
@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()));
}
}