X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=models-provider%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fmodels%2Fprovider%2Fimpl%2FDatabasePolicyModelsProviderImpl.java;h=8f4cdbcb329d2889b4ad7f3c204981de64d92a5b;hb=938005505883cf7a636a8840e20e3dc8a0ad9176;hp=51b7d2f688adf37d50366bc013042fb3812d07be;hpb=09c5d18a9e3b2ae2958d2762bd4277499611d5ec;p=policy%2Fmodels.git diff --git a/models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java b/models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java index 51b7d2f68..8f4cdbcb3 100644 --- a/models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java +++ b/models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java @@ -1,6 +1,8 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021, 2023 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2020, 2022 Bell Canada. 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. @@ -20,38 +22,12 @@ package org.onap.policy.models.provider.impl; -import java.sql.Connection; -import java.sql.DriverManager; -import java.util.Base64; -import java.util.List; -import java.util.Map; - -import javax.ws.rs.core.Response; - +import jakarta.ws.rs.core.Response; +import lombok.Getter; import lombok.NonNull; - -import org.apache.commons.lang3.tuple.Pair; import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.dao.DaoParameters; import org.onap.policy.models.dao.PfDao; -import org.onap.policy.models.dao.PfDaoFactory; -import org.onap.policy.models.dao.impl.DefaultPfDao; -import org.onap.policy.models.pdp.concepts.Pdp; -import org.onap.policy.models.pdp.concepts.PdpGroup; -import org.onap.policy.models.pdp.concepts.PdpStatistics; -import org.onap.policy.models.pdp.concepts.PdpSubGroup; -import org.onap.policy.models.pdp.persistence.provider.PdpProvider; -import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.provider.PolicyModelsProviderParameters; -import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; -import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; -import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; -import org.onap.policy.models.tosca.authorative.provider.AuthorativeToscaProvider; -import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput; -import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput; -import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; -import org.onap.policy.models.tosca.legacy.provider.LegacyProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,13 +37,14 @@ import org.slf4j.LoggerFactory; * * @author Liam Fallon (liam.fallon@est.tech) */ -public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { - private static final Logger LOGGER = LoggerFactory.getLogger(DefaultPfDao.class); +public class DatabasePolicyModelsProviderImpl extends AbstractPolicyModelsProvider { + + private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderImpl.class); private final PolicyModelsProviderParameters parameters; // Database connection and the DAO for reading and writing Policy Framework concepts - private Connection connection; + @Getter private PfDao pfDao; /** @@ -80,49 +57,20 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { } @Override - public void init() throws PfModelException { + public synchronized void init() throws PfModelException { LOGGER.debug("opening the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), parameters.getPersistenceUnit()); - if (connection != null || pfDao != null) { - String errorMessage = "provider is already initialized"; - LOGGER.warn(errorMessage); + if (pfDao != null) { + var errorMessage = "provider is already initialized"; throw new PfModelException(Response.Status.NOT_ACCEPTABLE, errorMessage); } - // Decode the password using Base64 - String decodedPassword = new String(Base64.getDecoder().decode(parameters.getDatabasePassword())); - - // Connect to the database, call does not implement AutoCloseable for try-with-resources - try { - connection = DriverManager.getConnection(parameters.getDatabaseUrl(), parameters.getDatabaseUser(), - decodedPassword); - } catch (Exception exc) { - String errorMessage = "could not connect to database with URL \"" + parameters.getDatabaseUrl() + "\""; - LOGGER.warn(errorMessage, exc); - throw new PfModelException(Response.Status.NOT_ACCEPTABLE, errorMessage, exc); - } - - // Parameters for the DAO - final DaoParameters daoParameters = new DaoParameters(); - daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName()); - daoParameters.setPersistenceUnit(parameters.getPersistenceUnit()); - - try { - pfDao = new PfDaoFactory().createPfDao(daoParameters); - pfDao.init(daoParameters); - } catch (Exception exc) { - String errorMessage = "could not create Data Access Object (DAO) using url \"" + parameters.getDatabaseUrl() - + "\" and persistence unit \"" + parameters.getPersistenceUnit() + "\""; - LOGGER.warn(errorMessage, exc); - - this.close(); - throw new PfModelException(Response.Status.NOT_ACCEPTABLE, errorMessage, exc); - } + pfDao = ModelsProvider.init(parameters); } @Override - public void close() throws PfModelException { + public synchronized void close() throws PfModelException { LOGGER.debug("closing the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), parameters.getPersistenceUnit()); @@ -131,270 +79,8 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { pfDao = null; } - if (connection != null) { - try { - connection.close(); - } catch (Exception exc) { - - String errorMessage = - "could not close connection to database with URL \"" + parameters.getDatabaseUrl() + "\""; - LOGGER.warn(errorMessage, exc); - throw new PfModelException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, exc); - } finally { - connection = null; - } - } - LOGGER.debug("closed the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), parameters.getPersistenceUnit()); } - @Override - public ToscaServiceTemplate getPolicyTypes(final String name, final String version) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getPolicyTypes(pfDao, name, version); - } - - @Override - public List getPolicyTypeList(final String name, final String version) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getPolicyTypeList(pfDao, name, version); - } - - @Override - public ToscaServiceTemplate getLatestPolicyTypes(final String name) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getLatestPolicyTypes(pfDao, name); - } - - @Override - public List getLatestPolicyTypeList(final String name) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getLatestPolicyTypeList(pfDao, name); - } - - @Override - public ToscaServiceTemplate createPolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) - throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().createPolicyTypes(pfDao, serviceTemplate); - } - - @Override - public ToscaServiceTemplate updatePolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) - throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().updatePolicyTypes(pfDao, serviceTemplate); - } - - @Override - public ToscaServiceTemplate deletePolicyType(@NonNull final String name, @NonNull final String version) - throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().deletePolicyType(pfDao, name, version); - } - - @Override - public ToscaServiceTemplate getPolicies(final String name, final String version) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getPolicies(pfDao, name, version); - } - - @Override - public List getPolicyList(final String name, final String version) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getPolicyList(pfDao, name, version); - } - - @Override - public ToscaServiceTemplate getPolicies4PolicyType(@NonNull String policyTypeName, String policyTypeVersion) - throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getPolicies4PolicyType(pfDao, policyTypeName, policyTypeVersion); - } - - @Override - public List getPolicyList4PolicyType(@NonNull final String policyTypeName, - final String policyTypeVersion) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getPolicyList4PolicyType(pfDao, policyTypeName, policyTypeVersion); - } - - @Override - public ToscaServiceTemplate getLatestPolicies(final String name) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getLatestPolicies(pfDao, name); - } - - @Override - public List getLatestPolicyList(final String name) throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().getLatestPolicyList(pfDao, name); - } - - @Override - public ToscaServiceTemplate createPolicies(@NonNull final ToscaServiceTemplate serviceTemplate) - throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().createPolicies(pfDao, serviceTemplate); - } - - @Override - public ToscaServiceTemplate updatePolicies(@NonNull final ToscaServiceTemplate serviceTemplate) - throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().updatePolicies(pfDao, serviceTemplate); - } - - @Override - public ToscaServiceTemplate deletePolicy(@NonNull final String name, @NonNull final String version) - throws PfModelException { - assertInitilized(); - return new AuthorativeToscaProvider().deletePolicy(pfDao, name, version); - } - - @Override - public LegacyOperationalPolicy getOperationalPolicy(@NonNull final String policyId) throws PfModelException { - assertInitilized(); - return new LegacyProvider().getOperationalPolicy(pfDao, policyId); - } - - @Override - public LegacyOperationalPolicy createOperationalPolicy( - @NonNull final LegacyOperationalPolicy legacyOperationalPolicy) throws PfModelException { - assertInitilized(); - return new LegacyProvider().createOperationalPolicy(pfDao, legacyOperationalPolicy); - } - - @Override - public LegacyOperationalPolicy updateOperationalPolicy( - @NonNull final LegacyOperationalPolicy legacyOperationalPolicy) throws PfModelException { - assertInitilized(); - return new LegacyProvider().updateOperationalPolicy(pfDao, legacyOperationalPolicy); - } - - @Override - public LegacyOperationalPolicy deleteOperationalPolicy(@NonNull final String policyId) throws PfModelException { - assertInitilized(); - return new LegacyProvider().deleteOperationalPolicy(pfDao, policyId); - } - - @Override - public Map getGuardPolicy(@NonNull final String policyId) throws PfModelException { - assertInitilized(); - return new LegacyProvider().getGuardPolicy(pfDao, policyId); - } - - @Override - public Map createGuardPolicy( - @NonNull final LegacyGuardPolicyInput legacyGuardPolicy) throws PfModelException { - assertInitilized(); - return new LegacyProvider().createGuardPolicy(pfDao, legacyGuardPolicy); - } - - @Override - public Map updateGuardPolicy( - @NonNull final LegacyGuardPolicyInput legacyGuardPolicy) throws PfModelException { - assertInitilized(); - return new LegacyProvider().updateGuardPolicy(pfDao, legacyGuardPolicy); - } - - @Override - public Map deleteGuardPolicy(@NonNull final String policyId) - throws PfModelException { - assertInitilized(); - return new LegacyProvider().deleteGuardPolicy(pfDao, policyId); - } - - @Override - public List getPdpGroups(final String name, final String version) throws PfModelException { - assertInitilized(); - return new PdpProvider().getPdpGroups(pfDao, name, version); - } - - @Override - public List getLatestPdpGroups(final String name) throws PfModelException { - assertInitilized(); - return new PdpProvider().getLatestPdpGroups(pfDao, name); - } - - @Override - public List getFilteredPdpGroups(final String pdpType, - @NonNull final List> supportedPolicyTypes) { - assertInitilized(); - return new PdpProvider().getFilteredPdpGroups(pfDao, pdpType, supportedPolicyTypes); - } - - @Override - public List createPdpGroups(@NonNull final List pdpGroups) throws PfModelException { - assertInitilized(); - return new PdpProvider().createPdpGroups(pfDao, pdpGroups); - } - - @Override - public List updatePdpGroups(@NonNull final List pdpGroups) throws PfModelException { - assertInitilized(); - return new PdpProvider().updatePdpGroups(pfDao, pdpGroups); - } - - @Override - public void updatePdpSubGroup(@NonNull final String pdpGroupName, @NonNull final String pdpGroupVersion, - @NonNull final PdpSubGroup pdpSubGroup) throws PfModelException { - assertInitilized(); - new PdpProvider().updatePdpSubGroup(pfDao, pdpGroupName, pdpGroupVersion, pdpSubGroup); - } - - @Override - public void updatePdp(@NonNull String pdpGroupName, @NonNull String pdpGroupVersion, - @NonNull String pdpSubGroup, @NonNull Pdp pdp) throws PfModelException { - new PdpProvider().updatePdp(pfDao, pdpGroupName, pdpGroupVersion, pdpSubGroup, pdp); - } - - @Override - public PdpGroup deletePdpGroup(@NonNull final String name, @NonNull final String version) throws PfModelException { - assertInitilized(); - return new PdpProvider().deletePdpGroup(pfDao, name, version); - } - - @Override - public List getPdpStatistics(final String name, final String version) throws PfModelException { - assertInitilized(); - return new PdpProvider().getPdpStatistics(pfDao, name, version); - } - - @Override - public void updatePdpStatistics(@NonNull final String pdpGroupName, @NonNull final String pdpGroupVersion, - @NonNull final String pdpType, @NonNull final String pdpInstanceId, - @NonNull final PdpStatistics pdppStatistics) throws PfModelException { - assertInitilized(); - new PdpProvider().updatePdpStatistics(pfDao, pdpGroupName, pdpGroupVersion, pdpType, pdpInstanceId, - pdppStatistics); - } - - @Override - public Map, List> getDeployedPolicyList(final String name) - throws PfModelException { - assertInitilized(); - return new PdpProvider().getDeployedPolicyList(pfDao, name); - } - - /** - * Check if the model provider is initialized. - */ - private void assertInitilized() { - if (pfDao == null) { - String errorMessage = "policy models provider is not initilaized"; - LOGGER.warn(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); - } - } - - /** - * Hook for unit test mocking of database connection. - * - * @param client the mocked client - */ - protected void setConnection(final Connection connection) { - this.connection = connection; - } }