From f69b6681486e4d1c5859f649a3293488c1859712 Mon Sep 17 00:00:00 2001 From: liamfallon Date: Tue, 7 Jan 2020 10:24:12 +0000 Subject: Support persistence of data types Data types must be persisted to the database in order for them to be retrieved in policy type queries and later for policy validation. Issue-ID: POLICY-2315 Change-Id: Iacb88501a597aeee8f6d8bcc3d9604c13dc09090 Signed-off-by: liamfallon --- .../provider/AuthorativeToscaProvider.java | 8 +- .../tosca/simple/provider/SimpleToscaProvider.java | 124 ++++++++++++++++++++- .../onap/policy/models/tosca/utils/ToscaUtils.java | 29 ++++- 3 files changed, 149 insertions(+), 12 deletions(-) (limited to 'models-tosca/src/main/java') diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java index 8c6e492f7..7999f620b 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,6 +28,7 @@ import java.util.Map; import java.util.TreeMap; import lombok.NonNull; + import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.dao.PfDao; @@ -64,8 +65,9 @@ public class AuthorativeToscaProvider { LOGGER.debug("->getPolicyTypes: name={}, version={}", name, version); - ToscaServiceTemplate serviceTemplate = - new SimpleToscaProvider().getPolicyTypes(dao, name, version).toAuthorative(); + JpaToscaServiceTemplate jpaServiceTemplate = new SimpleToscaProvider().getPolicyTypes(dao, name, version); + + ToscaServiceTemplate serviceTemplate = jpaServiceTemplate.toAuthorative(); LOGGER.debug("<-getPolicyTypes: name={}, version={}, serviceTemplate={}", name, version, serviceTemplate); return serviceTemplate; diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java index 30ab89491..cce6fd9ee 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,6 +36,8 @@ import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.dao.PfDao; +import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; +import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType; @@ -54,6 +56,116 @@ import org.slf4j.LoggerFactory; public class SimpleToscaProvider { private static final Logger LOGGER = LoggerFactory.getLogger(SimpleToscaProvider.class); + /** + * Get data types. + * + * @param dao the DAO to use to access the database + * @param name the name of the data type to get, set to null to get all policy types + * @param version the version of the data type to get, set to null to get all versions + * @return the data types found + * @throws PfModelException on errors getting data types + */ + public JpaToscaServiceTemplate getDataTypes(@NonNull final PfDao dao, final String name, final String version) + throws PfModelException { + LOGGER.debug("->getDataTypes: name={}, version={}", name, version); + + // Create the structure of the TOSCA service template to contain the data type + JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate(); + serviceTemplate.setDataTypes(new JpaToscaDataTypes()); + + // Add the data type to the TOSCA service template + List jpaDataTypeList = dao.getFiltered(JpaToscaDataType.class, name, version); + serviceTemplate.getDataTypes().getConceptMap().putAll(asConceptMap(jpaDataTypeList)); + + LOGGER.debug("<-getDataTypes: name={}, version={}, serviceTemplate={}", name, version, serviceTemplate); + return serviceTemplate; + } + + /** + * Create data types. + * + * @param dao the DAO to use to access the database + * @param serviceTemplate the service template containing the definition of the data types to be created + * @return the TOSCA service template containing the created data types + * @throws PfModelException on errors creating data types + */ + public JpaToscaServiceTemplate createDataTypes(@NonNull final PfDao dao, + @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException { + LOGGER.debug("->createDataTypes: serviceTempalate={}", serviceTemplate); + + ToscaUtils.assertDataTypesExist(serviceTemplate); + + for (JpaToscaDataType dataType : serviceTemplate.getDataTypes().getAll(null)) { + dao.create(dataType); + } + + // Return the created Data types + JpaToscaDataTypes returnDataTypes = new JpaToscaDataTypes(); + + for (PfConceptKey dataTypeKey : serviceTemplate.getDataTypes().getConceptMap().keySet()) { + returnDataTypes.getConceptMap().put(dataTypeKey, dao.get(JpaToscaDataType.class, dataTypeKey)); + } + + JpaToscaServiceTemplate returnServiceTemplate = new JpaToscaServiceTemplate(); + returnServiceTemplate.setDataTypes(returnDataTypes); + + LOGGER.debug("<-createDataTypes: returnServiceTempalate={}", returnServiceTemplate); + return returnServiceTemplate; + } + + /** + * Update Data types. + * + * @param dao the DAO to use to access the database + * @param serviceTemplate the service template containing the definition of the data types to be modified + * @return the TOSCA service template containing the modified data types + * @throws PfModelException on errors updating Data types + */ + public JpaToscaServiceTemplate updateDataTypes(@NonNull final PfDao dao, + @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException { + LOGGER.debug("->updateDataTypes: serviceTempalate={}", serviceTemplate); + + ToscaUtils.assertDataTypesExist(serviceTemplate); + + for (JpaToscaDataType dataType : serviceTemplate.getDataTypes().getAll(null)) { + dao.update(dataType); + } + + // Return the created data types + JpaToscaDataTypes returnDataTypes = new JpaToscaDataTypes(); + + for (PfConceptKey dataTypeKey : serviceTemplate.getDataTypes().getConceptMap().keySet()) { + returnDataTypes.getConceptMap().put(dataTypeKey, dao.get(JpaToscaDataType.class, dataTypeKey)); + } + + JpaToscaServiceTemplate returnServiceTemplate = new JpaToscaServiceTemplate(); + returnServiceTemplate.setDataTypes(returnDataTypes); + + LOGGER.debug("<-updateDataTypes: returnServiceTempalate={}", returnServiceTemplate); + return returnServiceTemplate; + } + + /** + * Delete Data types. + * + * @param dao the DAO to use to access the database + * @param dataTypeKey the data type key for the Data types to be deleted, if the version of the key is null, all + * versions of the data type are deleted. + * @return the TOSCA service template containing the data types that were deleted + * @throws PfModelException on errors deleting data types + */ + public JpaToscaServiceTemplate deleteDataType(@NonNull final PfDao dao, @NonNull final PfConceptKey dataTypeKey) + throws PfModelException { + LOGGER.debug("->deleteDataType: key={}", dataTypeKey); + + JpaToscaServiceTemplate serviceTemplate = getDataTypes(dao, dataTypeKey.getName(), dataTypeKey.getVersion()); + + dao.delete(JpaToscaDataType.class, dataTypeKey); + + LOGGER.debug("<-deleteDataType: key={}, serviceTempalate={}", dataTypeKey, serviceTemplate); + return serviceTemplate; + } + /** * Get policy types. * @@ -75,7 +187,7 @@ public class SimpleToscaProvider { List jpaPolicyTypeList = dao.getFiltered(JpaToscaPolicyType.class, name, version); serviceTemplate.getPolicyTypes().getConceptMap().putAll(asConceptMap(jpaPolicyTypeList)); - LOGGER.debug("<-getPolicyTypes: name={}, version={}, serviceTemplate=", name, version, serviceTemplate); + LOGGER.debug("<-getPolicyTypes: name={}, version={}, serviceTemplate={}", name, version, serviceTemplate); return serviceTemplate; } @@ -112,7 +224,7 @@ public class SimpleToscaProvider { } /** - * Create policy types. + * Update policy types. * * @param dao the DAO to use to access the database * @param serviceTemplate the service template containing the definition of the policy types to be modified @@ -161,7 +273,7 @@ public class SimpleToscaProvider { dao.delete(JpaToscaPolicyType.class, policyTypeKey); - LOGGER.debug("<-deletePolicyType: key={}, serviceTempalate=", policyTypeKey, serviceTemplate); + LOGGER.debug("<-deletePolicyType: key={}, serviceTempalate={}", policyTypeKey, serviceTemplate); return serviceTemplate; } @@ -187,7 +299,7 @@ public class SimpleToscaProvider { List jpaPolicyList = dao.getFiltered(JpaToscaPolicy.class, name, version); serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().putAll(asConceptMap(jpaPolicyList)); - LOGGER.debug("<-getPolicies: name={}, version={}, serviceTemplate=", name, version, serviceTemplate); + LOGGER.debug("<-getPolicies: name={}, version={}, serviceTemplate={}", name, version, serviceTemplate); return serviceTemplate; } @@ -273,7 +385,7 @@ public class SimpleToscaProvider { dao.delete(JpaToscaPolicy.class, policyKey); - LOGGER.debug("<-deletePolicy: key={}, serviceTempalate=", policyKey, serviceTemplate); + LOGGER.debug("<-deletePolicy: key={}, serviceTempalate={}", policyKey, serviceTemplate); return serviceTemplate; } 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 1b509e2a8..23a428b65 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,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,7 +43,28 @@ public final class ToscaUtils { } /** - * Check if policy types have been specified is initialized. + * Check if data types have been specified correctly. + * + * @param serviceTemplate the service template containing data types to be checked + */ + public static void assertDataTypesExist(final JpaToscaServiceTemplate serviceTemplate) { + if (serviceTemplate.getDataTypes() == null) { + String errorMessage = "no data types specified on service template"; + LOGGER.warn(errorMessage); + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); + } + + if (serviceTemplate.getDataTypes().getConceptMap().isEmpty()) { + String errorMessage = "list of data types specified on service template is empty"; + LOGGER.warn(errorMessage); + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); + } + } + + /** + * Check if policy types have been specified correctly. + * + * @param serviceTemplate the service template containing policy types to be checked */ public static void assertPolicyTypesExist(final JpaToscaServiceTemplate serviceTemplate) { if (serviceTemplate.getPolicyTypes() == null) { @@ -60,7 +81,9 @@ public final class ToscaUtils { } /** - * Check if policy types have been specified is initialized. + * Check if policies have been specified correctly. + * + * @param serviceTemplate the service template containing policy types to be checked */ public static void assertPoliciesExist(final JpaToscaServiceTemplate serviceTemplate) { if (serviceTemplate.getTopologyTemplate() == null) { -- cgit 1.2.3-korg