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=cc0431946a53edd5fa3ed48f157656fd3974b597;hb=88bcb550c2efd5e43ad3d256fe075a6bf7e90538;hp=7e106fa530305ea1bc3ceaef3d6072c88efcdff0;hpb=2d67b63613f01063614239d29499d12bdd479164;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 7e106fa53..cc0431946 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 @@ -32,15 +32,15 @@ import org.apache.commons.collections4.CollectionUtils; 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.tosca.authorative.concepts.ToscaEntity; import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntityType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Utility class for TOSCA concepts. @@ -48,10 +48,25 @@ import org.slf4j.LoggerFactory; * @author Liam Fallon (liam.fallon@est.tech) */ public final class ToscaUtils { - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaUtils.class); - private static final String ROOT_KEY_NAME_SUFFIX = ".Root"; + // @formatter:off + private static final Set PREDEFINED_TOSCA_DATA_TYPES = Set.of( + new PfConceptKey("string", PfKey.NULL_KEY_VERSION), + new PfConceptKey("integer", PfKey.NULL_KEY_VERSION), + new PfConceptKey("float", PfKey.NULL_KEY_VERSION), + new PfConceptKey("boolean", PfKey.NULL_KEY_VERSION), + new PfConceptKey("timestamp", PfKey.NULL_KEY_VERSION), + new PfConceptKey("null", PfKey.NULL_KEY_VERSION), + new PfConceptKey("list", PfKey.NULL_KEY_VERSION), + new PfConceptKey("map", 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), + new PfConceptKey("tosca.datatypes.TimeInterval", PfKey.NULL_KEY_VERSION) + ); + // @formatter:on + /** * Private constructor to prevent subclassing. */ @@ -59,6 +74,15 @@ public final class ToscaUtils { // Private constructor to prevent subclassing } + /** + * Get the predefined policy types. + * + * @return the predefined policy types + */ + public static Collection getPredefinedDataTypes() { + return PREDEFINED_TOSCA_DATA_TYPES; + } + /** * Assert that data types have been specified correctly. * @@ -123,7 +147,6 @@ public final class ToscaUtils { final Function checkerFunction) { String message = checkerFunction.apply(serviceTemplate); if (message != null) { - LOGGER.warn(message); throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, message); } } @@ -193,9 +216,9 @@ public final class ToscaUtils { * @param entityTypes the set of entity types that exist * @param entityType the entity type for which to get the parents * @param result the result of the ancestor search with any warnings or errors - * @return + * @return the entity set containing the ancestors of the incoming entity */ - public static Collection> getEntityTypeAncestors( + public static Collection> getEntityTypeAncestors( @NonNull PfConceptContainer entityTypes, @NonNull JpaToscaEntityType entityType, @NonNull final PfValidationResult result) { @@ -205,7 +228,7 @@ public final class ToscaUtils { } @SuppressWarnings("unchecked") - Set> ancestorEntitySet = (Set>) entityTypes + Set> ancestorEntitySet = (Set>) entityTypes .getAll(parentEntityTypeKey.getName(), parentEntityTypeKey.getVersion()); if (ancestorEntitySet.isEmpty()) { @@ -218,4 +241,32 @@ public final class ToscaUtils { } return ancestorEntitySet; } + + /** + * Get the entity tree from a concept container for a given entity key. + * + * @param entityTypes the concept container containing entity types + * @param entityName the name of the entity + * @param entityVersion the version of the entity + */ + public static void getEntityTree( + @NonNull final PfConceptContainer entityTypes, + final String entityName, final String entityVersion) { + + PfValidationResult result = new PfValidationResult(); + + @SuppressWarnings("unchecked") + Set> filteredEntitySet = + (Set>) entityTypes.getAll(entityName, entityVersion); + for (JpaToscaEntityType filteredEntityType : filteredEntitySet) { + filteredEntitySet.addAll(ToscaUtils.getEntityTypeAncestors(entityTypes, filteredEntityType, result)); + } + + if (!result.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, result.toString()); + } + + entityTypes.getConceptMap().entrySet() + .removeIf(entityEntry -> !filteredEntitySet.contains(entityEntry.getValue())); + } }