aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliamfallon <liam.fallon@est.tech>2021-01-18 11:34:12 +0000
committerliamfallon <liam.fallon@est.tech>2021-01-19 15:07:24 +0000
commit924bdf916ca8d98999f30616324d4c4a07f7966d (patch)
tree304d1ab7d688a522f5f87a4de4f67073b453bd91
parent5b577fd7cc40eaad1a1e5db2d43ef9ffe820e9a2 (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>
-rw-r--r--models-provider/src/main/java/org/onap/policy/models/provider/impl/AbstractModelsProvider.java115
-rw-r--r--models-provider/src/main/java/org/onap/policy/models/provider/impl/DatabasePolicyModelsProviderImpl.java145
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);
}
}