diff options
author | liamfallon <liam.fallon@est.tech> | 2021-01-18 11:34:12 +0000 |
---|---|---|
committer | liamfallon <liam.fallon@est.tech> | 2021-01-19 15:07:24 +0000 |
commit | 924bdf916ca8d98999f30616324d4c4a07f7966d (patch) | |
tree | 304d1ab7d688a522f5f87a4de4f67073b453bd91 /models-provider/src/main/java | |
parent | 5b577fd7cc40eaad1a1e5db2d43ef9ffe820e9a2 (diff) |
Allow providers other than PolicyModelsProvider
This change separates the database initiation and close functions of the
DatabasePolicyModelsProviderImpl class into an abstract class that does
the database DAO initiation and closing, and a domain specific part,
that does the manipulation of the policy models in the database.
This means that other providers, that wish to manipulate other objects
in the database, can specialize the AbstractModelsProvider class and use
its common DAO initiation and clsoing functionality, but can have their
own domain specific code.
The abstract class also now supports the Closeable interface.
Note that the exiting JUnit tests provide 100% coverage on
AbstractModelsProvider.
Issue-ID: POLICY-2971
Change-Id: Ibe59c02ab127ddbd9355d892b94a5d315507a8e6
Signed-off-by: liamfallon <liam.fallon@est.tech>
Diffstat (limited to 'models-provider/src/main/java')
2 files changed, 153 insertions, 107 deletions
diff --git a/models-provider/src/main/java/org/onap/policy/models/provider/impl/AbstractModelsProvider.java b/models-provider/src/main/java/org/onap/policy/models/provider/impl/AbstractModelsProvider.java new file mode 100644 index 000000000..818cc44d4 --- /dev/null +++ b/models-provider/src/main/java/org/onap/policy/models/provider/impl/AbstractModelsProvider.java @@ -0,0 +1,115 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.provider.impl; + +import java.io.Closeable; +import java.util.Properties; +import javax.ws.rs.core.Response; +import lombok.Getter; +import lombok.NonNull; +import org.eclipse.persistence.config.PersistenceUnitProperties; +import org.onap.policy.models.base.PfModelException; +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.provider.PolicyModelsProviderParameters; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class provides an abstract models provider that can be used to initialise the database for any specialisation of + * the class. + */ +public abstract class AbstractModelsProvider implements Closeable { + + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractModelsProvider.class); + + private final PolicyModelsProviderParameters parameters; + + // Database connection and the DAO for reading and writing Policy Framework concepts + @Getter + private PfDao pfDao; + + /** + * Constructor that takes the parameters. + * + * @param parameters the parameters for the provider + */ + protected AbstractModelsProvider(@NonNull final PolicyModelsProviderParameters parameters) { + this.parameters = parameters; + } + + /** + * Initialise the provider. + * + * @throws PfModelException in initialisation errors + */ + public synchronized void init() throws PfModelException { + LOGGER.debug("opening the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), + parameters.getPersistenceUnit()); + + if (pfDao != null) { + String errorMessage = "provider is already initialized"; + throw new PfModelException(Response.Status.NOT_ACCEPTABLE, errorMessage); + } + + // Parameters for the DAO + final DaoParameters daoParameters = new DaoParameters(); + daoParameters.setPluginClass(DefaultPfDao.class.getName()); + daoParameters.setPersistenceUnit(parameters.getPersistenceUnit()); + + // @formatter:off + Properties jdbcProperties = new Properties(); + jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, parameters.getDatabaseDriver()); + jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, parameters.getDatabaseUrl()); + jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, parameters.getDatabaseUser()); + jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, parameters.getDatabasePassword()); + // @formatter:on + + daoParameters.setJdbcProperties(jdbcProperties); + + 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() + "\""; + + this.close(); + throw new PfModelException(Response.Status.NOT_ACCEPTABLE, errorMessage, exc); + } + } + + @Override + public synchronized void close() { + LOGGER.debug("closing the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), + parameters.getPersistenceUnit()); + + if (pfDao != null) { + pfDao.close(); + pfDao = null; + } + + LOGGER.debug("closed the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), + parameters.getPersistenceUnit()); + } +} 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 6b54a1c24..3094efc27 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 @@ -25,16 +25,10 @@ package org.onap.policy.models.provider.impl; import java.util.Collection; import java.util.Date; import java.util.List; -import java.util.Properties; import javax.ws.rs.core.Response; import lombok.NonNull; -import org.eclipse.persistence.config.PersistenceUnitProperties; 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.PdpGroupFilter; @@ -54,8 +48,6 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplateFilter; import org.onap.policy.models.tosca.authorative.provider.AuthorativeToscaProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * This class provides an implementation of the Policy Models Provider for the ONAP Policy Framework that works towards @@ -63,81 +55,21 @@ import org.slf4j.LoggerFactory; * * @author Liam Fallon (liam.fallon@est.tech) */ -public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { - - 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 PfDao pfDao; - +public class DatabasePolicyModelsProviderImpl extends AbstractModelsProvider implements PolicyModelsProvider { /** * Constructor that takes the parameters. * * @param parameters the parameters for the provider */ public DatabasePolicyModelsProviderImpl(@NonNull final PolicyModelsProviderParameters parameters) { - this.parameters = parameters; - } - - @Override - public void init() throws PfModelException { - LOGGER.debug("opening the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), - parameters.getPersistenceUnit()); - - if (pfDao != null) { - String errorMessage = "provider is already initialized"; - LOGGER.warn(errorMessage); - throw new PfModelException(Response.Status.NOT_ACCEPTABLE, errorMessage); - } - - // Parameters for the DAO - final DaoParameters daoParameters = new DaoParameters(); - daoParameters.setPluginClass(DefaultPfDao.class.getName()); - daoParameters.setPersistenceUnit(parameters.getPersistenceUnit()); - - // @formatter:off - Properties jdbcProperties = new Properties(); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, parameters.getDatabaseDriver()); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, parameters.getDatabaseUrl()); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, parameters.getDatabaseUser()); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, parameters.getDatabasePassword()); - // @formatter:on - - daoParameters.setJdbcProperties(jdbcProperties); - - 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() + "\""; - - this.close(); - throw new PfModelException(Response.Status.NOT_ACCEPTABLE, errorMessage, exc); - } - } - - @Override - public void close() throws PfModelException { - LOGGER.debug("closing the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), - parameters.getPersistenceUnit()); - - if (pfDao != null) { - pfDao.close(); - pfDao = null; - } - - LOGGER.debug("closed the database connection to {} using persistence unit {}", parameters.getDatabaseUrl(), - parameters.getPersistenceUnit()); + super(parameters); } @Override public List<ToscaServiceTemplate> getServiceTemplateList(final String name, final String version) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getServiceTemplateList(pfDao, name, version); + return new AuthorativeToscaProvider().getServiceTemplateList(getPfDao(), name, version); } @@ -145,21 +77,21 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { public List<ToscaServiceTemplate> getFilteredServiceTemplateList(@NonNull ToscaServiceTemplateFilter filter) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getFilteredServiceTemplateList(pfDao, filter); + return new AuthorativeToscaProvider().getFilteredServiceTemplateList(getPfDao(), filter); } @Override public ToscaServiceTemplate createServiceTemplate(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().createServiceTemplate(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().createServiceTemplate(getPfDao(), serviceTemplate); } @Override public ToscaServiceTemplate updateServiceTemplate(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().updateServiceTemplate(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().updateServiceTemplate(getPfDao(), serviceTemplate); } @Override @@ -167,46 +99,46 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().deleteServiceTemplate(pfDao, name, version); + return new AuthorativeToscaProvider().deleteServiceTemplate(getPfDao(), name, version); } @Override public ToscaServiceTemplate getPolicyTypes(final String name, final String version) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getPolicyTypes(pfDao, name, version); + return new AuthorativeToscaProvider().getPolicyTypes(getPfDao(), name, version); } @Override public List<ToscaPolicyType> getPolicyTypeList(final String name, final String version) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getPolicyTypeList(pfDao, name, version); + return new AuthorativeToscaProvider().getPolicyTypeList(getPfDao(), name, version); } @Override public ToscaServiceTemplate getFilteredPolicyTypes(@NonNull ToscaPolicyTypeFilter filter) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getFilteredPolicyTypes(pfDao, filter); + return new AuthorativeToscaProvider().getFilteredPolicyTypes(getPfDao(), filter); } @Override public List<ToscaPolicyType> getFilteredPolicyTypeList(@NonNull ToscaPolicyTypeFilter filter) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getFilteredPolicyTypeList(pfDao, filter); + return new AuthorativeToscaProvider().getFilteredPolicyTypeList(getPfDao(), filter); } @Override public ToscaServiceTemplate createPolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().createPolicyTypes(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().createPolicyTypes(getPfDao(), serviceTemplate); } @Override public ToscaServiceTemplate updatePolicyTypes(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().updatePolicyTypes(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().updatePolicyTypes(getPfDao(), serviceTemplate); } @Override @@ -217,45 +149,45 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { ToscaConceptIdentifier policyTypeIdentifier = new ToscaConceptIdentifier(name, version); assertPolicyTypeNotSupportedInPdpGroup(policyTypeIdentifier); - return new AuthorativeToscaProvider().deletePolicyType(pfDao, name, version); + return new AuthorativeToscaProvider().deletePolicyType(getPfDao(), name, version); } @Override public ToscaServiceTemplate getPolicies(final String name, final String version) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getPolicies(pfDao, name, version); + return new AuthorativeToscaProvider().getPolicies(getPfDao(), name, version); } @Override public List<ToscaPolicy> getPolicyList(final String name, final String version) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getPolicyList(pfDao, name, version); + return new AuthorativeToscaProvider().getPolicyList(getPfDao(), name, version); } @Override public ToscaServiceTemplate getFilteredPolicies(@NonNull ToscaPolicyFilter filter) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getFilteredPolicies(pfDao, filter); + return new AuthorativeToscaProvider().getFilteredPolicies(getPfDao(), filter); } @Override public List<ToscaPolicy> getFilteredPolicyList(@NonNull ToscaPolicyFilter filter) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, filter); + return new AuthorativeToscaProvider().getFilteredPolicyList(getPfDao(), filter); } @Override public ToscaServiceTemplate createPolicies(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().createPolicies(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().createPolicies(getPfDao(), serviceTemplate); } @Override public ToscaServiceTemplate updatePolicies(@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException { assertInitialized(); - return new AuthorativeToscaProvider().updatePolicies(pfDao, serviceTemplate); + return new AuthorativeToscaProvider().updatePolicies(getPfDao(), serviceTemplate); } @Override @@ -266,56 +198,56 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { ToscaConceptIdentifier policyIdentifier = new ToscaConceptIdentifier(name, version); assertPolicyNotDeployedInPdpGroup(policyIdentifier); - return new AuthorativeToscaProvider().deletePolicy(pfDao, name, version); + return new AuthorativeToscaProvider().deletePolicy(getPfDao(), name, version); } @Override public List<PdpGroup> getPdpGroups(final String name) throws PfModelException { assertInitialized(); - return new PdpProvider().getPdpGroups(pfDao, name); + return new PdpProvider().getPdpGroups(getPfDao(), name); } @Override public List<PdpGroup> getFilteredPdpGroups(@NonNull PdpGroupFilter filter) throws PfModelException { assertInitialized(); - return new PdpProvider().getFilteredPdpGroups(pfDao, filter); + return new PdpProvider().getFilteredPdpGroups(getPfDao(), filter); } @Override public List<PdpGroup> createPdpGroups(@NonNull final List<PdpGroup> pdpGroups) throws PfModelException { assertInitialized(); - return new PdpProvider().createPdpGroups(pfDao, pdpGroups); + return new PdpProvider().createPdpGroups(getPfDao(), pdpGroups); } @Override public List<PdpGroup> updatePdpGroups(@NonNull final List<PdpGroup> pdpGroups) throws PfModelException { assertInitialized(); - return new PdpProvider().updatePdpGroups(pfDao, pdpGroups); + return new PdpProvider().updatePdpGroups(getPfDao(), pdpGroups); } @Override public void updatePdpSubGroup(@NonNull final String pdpGroupName, @NonNull final PdpSubGroup pdpSubGroup) throws PfModelException { assertInitialized(); - new PdpProvider().updatePdpSubGroup(pfDao, pdpGroupName, pdpSubGroup); + new PdpProvider().updatePdpSubGroup(getPfDao(), pdpGroupName, pdpSubGroup); } @Override public void updatePdp(@NonNull String pdpGroupName, @NonNull String pdpSubGroup, @NonNull Pdp pdp) throws PfModelException { - new PdpProvider().updatePdp(pfDao, pdpGroupName, pdpSubGroup, pdp); + new PdpProvider().updatePdp(getPfDao(), pdpGroupName, pdpSubGroup, pdp); } @Override public PdpGroup deletePdpGroup(@NonNull final String name) throws PfModelException { assertInitialized(); - return new PdpProvider().deletePdpGroup(pfDao, name); + return new PdpProvider().deletePdpGroup(getPfDao(), name); } @Override public List<PdpStatistics> getPdpStatistics(final String name, final Date timestamp) throws PfModelException { assertInitialized(); - return new PdpStatisticsProvider().getPdpStatistics(pfDao, name, timestamp); + return new PdpStatisticsProvider().getPdpStatistics(getPfDao(), name, timestamp); } @Override @@ -323,7 +255,7 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { final String pdpSubGroup, final Date startTimeStamp, final Date endTimeStamp, final String sortOrder, final int getRecordNum) throws PfModelException { assertInitialized(); - return new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, name, pdpGroupName, pdpSubGroup, + return new PdpStatisticsProvider().getFilteredPdpStatistics(getPfDao(), name, pdpGroupName, pdpSubGroup, startTimeStamp, endTimeStamp, sortOrder, getRecordNum); } @@ -331,57 +263,56 @@ public class DatabasePolicyModelsProviderImpl implements PolicyModelsProvider { public List<PdpStatistics> createPdpStatistics(@NonNull final List<PdpStatistics> pdpStatisticsList) throws PfModelException { assertInitialized(); - return new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsList); + return new PdpStatisticsProvider().createPdpStatistics(getPfDao(), pdpStatisticsList); } @Override public List<PdpStatistics> updatePdpStatistics(@NonNull final List<PdpStatistics> pdpStatisticsList) throws PfModelException { assertInitialized(); - return new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsList); + return new PdpStatisticsProvider().updatePdpStatistics(getPfDao(), pdpStatisticsList); } @Override public List<PdpStatistics> deletePdpStatistics(@NonNull final String name, final Date timestamp) throws PfModelException { assertInitialized(); - return new PdpStatisticsProvider().deletePdpStatistics(pfDao, name, timestamp); + return new PdpStatisticsProvider().deletePdpStatistics(getPfDao(), name, timestamp); } @Override public List<PdpPolicyStatus> getAllPolicyStatus() throws PfModelException { assertInitialized(); - return new PdpProvider().getAllPolicyStatus(pfDao); + return new PdpProvider().getAllPolicyStatus(getPfDao()); } @Override public List<PdpPolicyStatus> getAllPolicyStatus(@NonNull ToscaConceptIdentifierOptVersion policy) throws PfModelException { assertInitialized(); - return new PdpProvider().getAllPolicyStatus(pfDao, policy); + return new PdpProvider().getAllPolicyStatus(getPfDao(), policy); } @Override public List<PdpPolicyStatus> getGroupPolicyStatus(@NonNull String groupName) throws PfModelException { assertInitialized(); - return new PdpProvider().getGroupPolicyStatus(pfDao, groupName); + return new PdpProvider().getGroupPolicyStatus(getPfDao(), groupName); } @Override public void cudPolicyStatus(Collection<PdpPolicyStatus> createObjs, Collection<PdpPolicyStatus> updateObjs, Collection<PdpPolicyStatus> deleteObjs) { assertInitialized(); - new PdpProvider().cudPolicyStatus(pfDao, createObjs, updateObjs, deleteObjs); + new PdpProvider().cudPolicyStatus(getPfDao(), createObjs, updateObjs, deleteObjs); } /** * Check if the model provider is initialized. */ private void assertInitialized() { - if (pfDao == null) { + if (getPfDao() == null) { String errorMessage = "policy models provider is not initilaized"; - LOGGER.warn(errorMessage); throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); } } |