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=70c5027d7e5517254ed7e2565fb1cf45a2b3a791;hb=db2118d4a635f2d116d4a5cd6714730600e47b6c;hp=cc0431946a53edd5fa3ed48f157656fd3974b597;hpb=ad1cd2013f45da5764fc9610db1f679d3c3762cb;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 cc0431946..70c5027d7 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 @@ -21,13 +21,11 @@ package org.onap.policy.models.tosca.utils; 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.NonNull; - import org.apache.commons.collections4.CollectionUtils; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptContainer; @@ -60,6 +58,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), @@ -144,10 +143,10 @@ public final class ToscaUtils { * @param serviceTemplate the service template containing policy types to be checked */ public static void assertExist(final JpaToscaServiceTemplate serviceTemplate, - final Function checkerFunction) { + final Function checkerFunction) { String message = checkerFunction.apply(serviceTemplate); if (message != null) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, message); + throw new PfModelRuntimeException(Response.Status.NOT_FOUND, message); } } @@ -157,7 +156,7 @@ public final class ToscaUtils { * @param serviceTemplate the service template containing policy types to be checked */ public static boolean doExist(final JpaToscaServiceTemplate serviceTemplate, - final Function checkerFunction) { + final Function checkerFunction) { return checkerFunction.apply(serviceTemplate) == null; } @@ -211,7 +210,7 @@ public final class ToscaUtils { } /** - * Find all the ancestors of an entity type. + * getLatestPolicyTypeVersion Find all the ancestors of an entity type. * * @param entityTypes the set of entity types that exist * @param entityType the entity type for which to get the parents @@ -219,27 +218,33 @@ public final class ToscaUtils { * @return the entity set containing the ancestors of the incoming entity */ public static Collection> getEntityTypeAncestors( - @NonNull PfConceptContainer entityTypes, - @NonNull JpaToscaEntityType entityType, @NonNull final PfValidationResult result) { + @NonNull PfConceptContainer entityTypes, + @NonNull JpaToscaEntityType entityType, @NonNull final PfValidationResult result) { PfConceptKey parentEntityTypeKey = entityType.getDerivedFrom(); if (parentEntityTypeKey == null || parentEntityTypeKey.getName().endsWith(ROOT_KEY_NAME_SUFFIX)) { return CollectionUtils.emptyCollection(); } + 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()); + } + @SuppressWarnings("unchecked") Set> ancestorEntitySet = (Set>) entityTypes - .getAll(parentEntityTypeKey.getName(), parentEntityTypeKey.getVersion()); - + .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")); + ValidationResult.INVALID, "parent " + parentEntityTypeKey.getId() + " of entity not found")); } else { for (JpaToscaEntityType filteredEntityType : ancestorEntitySet) { - ancestorEntitySet.addAll(getEntityTypeAncestors(entityTypes, filteredEntityType, result)); + ancestorEntitySetToReturn.addAll(getEntityTypeAncestors(entityTypes, filteredEntityType, result)); } } - return ancestorEntitySet; + return ancestorEntitySetToReturn; } /** @@ -250,23 +255,25 @@ public final class ToscaUtils { * @param entityVersion the version of the entity */ public static void getEntityTree( - @NonNull final PfConceptContainer entityTypes, - final String entityName, final String entityVersion) { + @NonNull final PfConceptContainer entityTypes, + final String entityName, final String entityVersion) { PfValidationResult result = new PfValidationResult(); @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.BAD_REQUEST, result.toString()); + throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, result.toString()); } entityTypes.getConceptMap().entrySet() - .removeIf(entityEntry -> !filteredEntitySet.contains(entityEntry.getValue())); + .removeIf(entityEntry -> !filteredEntitySetToReturn.contains(entityEntry.getValue())); } }