Migrate API DB provider to springboot data jpa 57/127257/4
authorRashmi Pujar <rashmi.pujar1@bell.ca>
Wed, 23 Feb 2022 16:27:07 +0000 (11:27 -0500)
committerRam Krishna Verma <ram_krishna.verma@bell.ca>
Thu, 24 Feb 2022 17:16:17 +0000 (17:16 +0000)
PolicyProviders and PolicyTypeProvider will be removed
once the NodeTemplateController migration is complete.

Issue-ID: POLICY-3924
Signed-off-by: Rashmi Pujar <rashmi.pujar1@bell.ca>
Change-Id: I01a7491c9a09d78a79a4c887f5a49024af648b8b

main/src/main/java/org/onap/policy/api/main/config/PolicyApiConfig.java
main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java
main/src/main/java/org/onap/policy/api/main/rest/ApiStatisticsManager.java
main/src/main/java/org/onap/policy/api/main/rest/provider/HealthCheckProvider.java
main/src/main/java/org/onap/policy/api/main/rest/provider/StatisticsProvider.java
main/src/main/java/org/onap/policy/api/main/service/ToscaServiceTemplateService.java
main/src/main/java/org/onap/policy/api/main/startstop/ApiDatabaseInitializer.java
main/src/test/java/org/onap/policy/api/main/rest/TestApiStatisticsManager.java
main/src/test/resources/application-test.yaml

index 3e4f11a..e1cc58c 100644 (file)
@@ -69,6 +69,11 @@ public class PolicyApiConfig {
         return new PolicyModelsProviderFactory().createPolicyModelsProvider(modelsProviderParameters);
     }
 
+    /**
+     * Initialize the statistics report bean.
+     *
+     * @return a new instance of StatisticsReport
+     */
     @Bean
     public StatisticsReport createStatisticsReport() {
         return new StatisticsReport();
index c564dbe..84b26c8 100644 (file)
@@ -42,11 +42,11 @@ import java.net.HttpURLConnection;
 import java.util.List;\r
 import java.util.UUID;\r
 import javax.ws.rs.core.Response.Status;\r
+import lombok.RequiredArgsConstructor;\r
 import org.onap.policy.api.main.exception.PolicyApiRuntimeException;\r
 import org.onap.policy.api.main.rest.provider.HealthCheckProvider;\r
-import org.onap.policy.api.main.rest.provider.PolicyProvider;\r
-import org.onap.policy.api.main.rest.provider.PolicyTypeProvider;\r
 import org.onap.policy.api.main.rest.provider.StatisticsProvider;\r
+import org.onap.policy.api.main.service.ToscaServiceTemplateService;\r
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;\r
 import org.onap.policy.common.endpoints.report.HealthCheckReport;\r
 import org.onap.policy.common.endpoints.utils.NetLoggerUtil;\r
@@ -54,9 +54,6 @@ import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
 import org.onap.policy.models.base.PfModelException;\r
 import org.onap.policy.models.base.PfModelRuntimeException;\r
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.http.HttpMethod;\r
 import org.springframework.http.HttpStatus;\r
 import org.springframework.http.ResponseEntity;\r
@@ -92,6 +89,7 @@ import org.springframework.web.bind.annotation.RestController;
             @ExtensionProperty(name = "component", value = "Policy Framework")})}),\r
     schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS},\r
     securityDefinition = @SecurityDefinition(basicAuthDefinitions = {@BasicAuthDefinition(key = "basicAuth")}))\r
+@RequiredArgsConstructor\r
 public class ApiRestController extends CommonRestController {\r
 \r
     private enum Target {\r
@@ -100,20 +98,10 @@ public class ApiRestController extends CommonRestController {
         OTHER\r
     }\r
 \r
-    @Autowired\r
-    private PolicyProvider policyProvider;\r
-\r
-    @Autowired\r
-    private HealthCheckProvider healthCheckProvider;\r
-\r
-    @Autowired\r
-    private PolicyTypeProvider policyTypeProvider;\r
-\r
-    @Autowired\r
-    private ApiStatisticsManager mgr;\r
-\r
-    @Autowired\r
-    private StatisticsProvider statisticsProvider;\r
+    private final ToscaServiceTemplateService toscaServiceTemplateService;\r
+    private final HealthCheckProvider healthCheckProvider;\r
+    private final ApiStatisticsManager mgr;\r
+    private final StatisticsProvider statisticsProvider;\r
 \r
     /**\r
      * Retrieves the healthcheck status of the API component.\r
@@ -219,7 +207,7 @@ public class ApiRestController extends CommonRestController {
         @RequestHeader(name = REQUEST_ID_NAME, required = false)\r
         @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId) {\r
         try {\r
-            ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchPolicyTypes(null, null);\r
+            ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.fetchPolicyTypes(null, null);\r
             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -267,7 +255,7 @@ public class ApiRestController extends CommonRestController {
         @RequestHeader(name = REQUEST_ID_NAME, required = false)\r
         @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId) {\r
         try {\r
-            ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchPolicyTypes(policyTypeId, null);\r
+            ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.fetchPolicyTypes(policyTypeId, null);\r
             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -316,7 +304,8 @@ public class ApiRestController extends CommonRestController {
         @RequestHeader(name = REQUEST_ID_NAME, required = false)\r
         @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId) {\r
         try {\r
-            ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchPolicyTypes(policyTypeId, versionId);\r
+            ToscaServiceTemplate serviceTemplate =\r
+                toscaServiceTemplateService.fetchPolicyTypes(policyTypeId, versionId);\r
             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -363,7 +352,7 @@ public class ApiRestController extends CommonRestController {
         @RequestHeader(name = REQUEST_ID_NAME, required = false)\r
         @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId) {\r
         try {\r
-            ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchLatestPolicyTypes(policyTypeId);\r
+            ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.fetchLatestPolicyTypes(policyTypeId);\r
             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -414,10 +403,10 @@ public class ApiRestController extends CommonRestController {
             NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, "/policytypes", toJson(body));\r
         }\r
         try {\r
-            ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(body);\r
+            ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.createPolicyType(body);\r
             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.POST);\r
             return makeOkResponse(requestId, serviceTemplate);\r
-        } catch (PfModelException | PfModelRuntimeException pfme) {\r
+        } catch (PfModelRuntimeException pfme) {\r
             final var msg = "POST /policytypes";\r
             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
                 .getStatusCode()), HttpMethod.POST);\r
@@ -467,10 +456,11 @@ public class ApiRestController extends CommonRestController {
         @RequestHeader(name = REQUEST_ID_NAME, required = false)\r
         @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId) {\r
         try {\r
-            ToscaServiceTemplate serviceTemplate = policyTypeProvider.deletePolicyType(policyTypeId, versionId);\r
+            ToscaServiceTemplate serviceTemplate =\r
+                toscaServiceTemplateService.deletePolicyType(policyTypeId, versionId);\r
             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.DELETE);\r
             return makeOkResponse(requestId, serviceTemplate);\r
-        } catch (PfModelException | PfModelRuntimeException pfme) {\r
+        } catch (PfModelRuntimeException pfme) {\r
             var msg = String.format("DELETE /policytypes/%s/versions/%s", policyTypeId, versionId);\r
             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
                 .getStatusCode()), HttpMethod.DELETE);\r
@@ -526,7 +516,7 @@ public class ApiRestController extends CommonRestController {
             + " policies (default), REFERENCED for fully referenced policies") PolicyFetchMode mode) {\r
         try {\r
             ToscaServiceTemplate serviceTemplate =\r
-                policyProvider.fetchPolicies(policyTypeId, policyTypeVersion, null, null, mode);\r
+                toscaServiceTemplateService.fetchPolicies(policyTypeId, policyTypeVersion, null, null, mode);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -585,11 +575,11 @@ public class ApiRestController extends CommonRestController {
             + " REFERENCED for fully referenced policies") PolicyFetchMode mode) {\r
         try {\r
             ToscaServiceTemplate serviceTemplate =\r
-                policyProvider.fetchPolicies(policyTypeId, policyTypeVersion, policyId, null, mode);\r
+                toscaServiceTemplateService.fetchPolicies(policyTypeId, policyTypeVersion, policyId, null, mode);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
-            var msg = String.format("/policytypes/%s/versions/$s/policies/%s",\r
+            var msg = String.format("/policytypes/%s/versions/%s/policies/%s",\r
                 policyTypeId, policyTypeVersion, policyId);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
                 .getStatusCode()), HttpMethod.GET);\r
@@ -647,8 +637,8 @@ public class ApiRestController extends CommonRestController {
         @RequestParam(name = "mode", defaultValue = "bare") @ApiParam("Fetch mode for policies, BARE for bare policies"\r
             + "  (default), REFERENCED for fully referenced policies") PolicyFetchMode mode) {\r
         try {\r
-            ToscaServiceTemplate serviceTemplate =\r
-                policyProvider.fetchPolicies(policyTypeId, policyTypeVersion, policyId, policyVersion, mode);\r
+            ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService\r
+                .fetchPolicies(policyTypeId, policyTypeVersion, policyId, policyVersion, mode);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -704,7 +694,7 @@ public class ApiRestController extends CommonRestController {
             + "policies (default), REFERENCED for fully referenced policies") PolicyFetchMode mode) {\r
         try {\r
             ToscaServiceTemplate serviceTemplate =\r
-                policyProvider.fetchLatestPolicies(policyTypeId, policyTypeVersion, policyId, mode);\r
+                toscaServiceTemplateService.fetchLatestPolicies(policyTypeId, policyTypeVersion, policyId, mode);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -764,10 +754,11 @@ public class ApiRestController extends CommonRestController {
                 "/policytypes/" + policyTypeId + "/versions/" + policyTypeVersion + "/policies", toJson(body));\r
         }\r
         try {\r
-            ToscaServiceTemplate serviceTemplate = policyProvider.createPolicy(policyTypeId, policyTypeVersion, body);\r
+            ToscaServiceTemplate serviceTemplate =\r
+                toscaServiceTemplateService.createPolicy(policyTypeId, policyTypeVersion, body);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.POST);\r
             return makeOkResponse(requestId, serviceTemplate);\r
-        } catch (PfModelException | PfModelRuntimeException pfme) {\r
+        } catch (PfModelRuntimeException pfme) {\r
             var msg = String.format("POST /policytypes/%s/versions/%s/policies", policyTypeId, policyTypeVersion);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
                 .getStatusCode()), HttpMethod.POST);\r
@@ -822,10 +813,10 @@ public class ApiRestController extends CommonRestController {
         @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId) {\r
         try {\r
             ToscaServiceTemplate serviceTemplate =\r
-                policyProvider.deletePolicy(policyTypeId, policyTypeVersion, policyId, policyVersion);\r
+                toscaServiceTemplateService.deletePolicy(policyTypeId, policyTypeVersion, policyId, policyVersion);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.DELETE);\r
             return makeOkResponse(requestId, serviceTemplate);\r
-        } catch (PfModelException | PfModelRuntimeException pfme) {\r
+        } catch (PfModelRuntimeException pfme) {\r
             var msg = String.format("DELETE /policytypes/%s/versions/%s/policies/%s/versions/%s",\r
                 policyTypeId, policyTypeVersion, policyId, policyVersion);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
@@ -875,7 +866,7 @@ public class ApiRestController extends CommonRestController {
             + "  policies (default), REFERENCED for fully referenced policies") PolicyFetchMode mode) {\r
         try {\r
             ToscaServiceTemplate serviceTemplate =\r
-                policyProvider.fetchPolicies(null, null, null, null, mode);\r
+                toscaServiceTemplateService.fetchPolicies(null, null, null, null, mode);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -936,7 +927,7 @@ public class ApiRestController extends CommonRestController {
             + "  policies (default), REFERENCED for fully referenced policies") PolicyFetchMode mode) {\r
         try {\r
             ToscaServiceTemplate serviceTemplate =\r
-                policyProvider.fetchPolicies(null, null, policyId, policyVersion, mode);\r
+                toscaServiceTemplateService.fetchPolicies(null, null, policyId, policyVersion, mode);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
             return makeOkResponse(requestId, serviceTemplate);\r
         } catch (PfModelException | PfModelRuntimeException pfme) {\r
@@ -989,10 +980,10 @@ public class ApiRestController extends CommonRestController {
             NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, "/policies", toJson(body));\r
         }\r
         try {\r
-            ToscaServiceTemplate serviceTemplate = policyProvider.createPolicies(body);\r
+            ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.createPolicies(body);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.POST);\r
             return makeOkResponse(requestId, serviceTemplate);\r
-        } catch (PfModelException | PfModelRuntimeException pfme) {\r
+        } catch (PfModelRuntimeException pfme) {\r
             final var msg = "POST /policies";\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
                 .getStatusCode()), HttpMethod.POST);\r
@@ -1041,10 +1032,10 @@ public class ApiRestController extends CommonRestController {
         @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId) {\r
         try {\r
             ToscaServiceTemplate serviceTemplate =\r
-                policyProvider.deletePolicy(null, null, policyId, policyVersion);\r
+                toscaServiceTemplateService.deletePolicy(null, null, policyId, policyVersion);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.DELETE);\r
             return makeOkResponse(requestId, serviceTemplate);\r
-        } catch (PfModelException | PfModelRuntimeException pfme) {\r
+        } catch (PfModelRuntimeException pfme) {\r
             var msg = String.format("DELETE /policies/%s/versions/%s", policyId, policyVersion);\r
             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
                 .getStatusCode()), HttpMethod.DELETE);\r
index b497c7f..9109742 100644 (file)
@@ -23,7 +23,7 @@
 
 package org.onap.policy.api.main.rest;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 
 /**
@@ -32,10 +32,10 @@ import org.springframework.stereotype.Component;
  * @author Chenfei Gao (cgao@research.att.com)
  */
 @Component
+@RequiredArgsConstructor
 public class ApiStatisticsManager {
 
-    @Autowired
-    private StatisticsReport report;
+    private final StatisticsReport report;
 
     private long totalPolicyDeleteCount;
     private long totalPolicyTypeDeleteCount;
index 40b841e..139e528 100644 (file)
 
 package org.onap.policy.api.main.rest.provider;
 
+import lombok.RequiredArgsConstructor;
 import org.onap.policy.api.main.rest.PolicyFetchMode;
+import org.onap.policy.api.main.service.ToscaServiceTemplateService;
 import org.onap.policy.common.endpoints.report.HealthCheckReport;
 import org.onap.policy.common.utils.network.NetworkUtil;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfModelRuntimeException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -40,17 +41,16 @@ import org.springframework.stereotype.Service;
  *
  */
 @Service
+@RequiredArgsConstructor
 public class HealthCheckProvider {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(HealthCheckProvider.class);
-
     private static final String ALIVE = "alive";
     private static final String URL = NetworkUtil.getHostname();
     private static final String NAME = "Policy API";
     private static final String DB_CONN_FAILURE = "unable to connect with database";
 
-    @Autowired
-    private PolicyProvider policyProvider;
+    private final ToscaServiceTemplateService toscaServiceTemplateService;
 
     /**
      * Performs the health check of api service.
@@ -75,9 +75,9 @@ public class HealthCheckProvider {
      */
     private boolean verifyApiDatabase() {
         try {
-            policyProvider.fetchPolicies(null, null, null, null, PolicyFetchMode.BARE);
+            toscaServiceTemplateService.getDefaultJpaToscaServiceTemplate();
             return true;
-        } catch (PfModelException | PfModelRuntimeException pfme) {
+        } catch (PfModelRuntimeException pfme) {
             LOGGER.warn("Api to database connection check failed. Details - ", pfme);
             return false;
         }
index 9dfc0dd..b7089ad 100644 (file)
@@ -24,8 +24,8 @@
 
 package org.onap.policy.api.main.rest.provider;
 
+import lombok.RequiredArgsConstructor;
 import org.onap.policy.api.main.rest.StatisticsReport;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -34,10 +34,10 @@ import org.springframework.stereotype.Service;
  * @author Chenfei Gao (cgao@research.att.com)
  */
 @Service
+@RequiredArgsConstructor
 public class StatisticsProvider {
 
-    @Autowired
-    private StatisticsReport report;
+    private final StatisticsReport report;
 
     /**
      * Return the current API statistics.
index ba61dd4..0fa0225 100644 (file)
@@ -21,6 +21,7 @@
 package org.onap.policy.api.main.service;
 
 import java.util.List;
+import java.util.Optional;
 import javax.ws.rs.core.Response;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
@@ -75,7 +76,9 @@ public class ToscaServiceTemplateService {
      */
     public ToscaServiceTemplate fetchPolicyTypes(final String policyTypeName, final String policyTypeVersion)
         throws PfModelException {
-        return getFilteredPolicyTypes(policyTypeName, policyTypeVersion);
+        final var policyTypeFilter =
+            ToscaEntityFilter.<ToscaPolicyType>builder().name(policyTypeName).version(policyTypeVersion).build();
+        return getFilteredPolicyTypes(policyTypeFilter);
     }
 
     /**
@@ -85,7 +88,9 @@ public class ToscaServiceTemplateService {
      * @return the ToscaServiceTemplate object
      */
     public ToscaServiceTemplate fetchLatestPolicyTypes(final String policyTypeName) throws PfModelException {
-        return getFilteredPolicyTypes(policyTypeName, ToscaEntityFilter.LATEST_VERSION);
+        final var policyTypeFilter = ToscaEntityFilter.<ToscaPolicyType>builder()
+            .name(policyTypeName).version(ToscaEntityFilter.LATEST_VERSION).build();
+        return getFilteredPolicyTypes(policyTypeFilter);
     }
 
     /**
@@ -104,8 +109,14 @@ public class ToscaServiceTemplateService {
         ToscaUtils.assertPolicyTypesExist(incomingServiceTemplate);
 
         // append the incoming fragment to the DB TOSCA service template
-        final var serviceTemplateToWrite =
-            ToscaServiceTemplateUtils.addFragment(getDefaultJpaToscaServiceTemplate(), incomingServiceTemplate);
+        var dbServiceTemplateOpt = getDefaultJpaToscaServiceTemplateOpt();
+        JpaToscaServiceTemplate serviceTemplateToWrite;
+        if (dbServiceTemplateOpt.isEmpty()) {
+            serviceTemplateToWrite = incomingServiceTemplate;
+        } else {
+            serviceTemplateToWrite =
+                ToscaServiceTemplateUtils.addFragment(dbServiceTemplateOpt.get(), incomingServiceTemplate);
+        }
 
         final var result = serviceTemplateToWrite.validate("service template");
         if (!result.isValid()) {
@@ -244,8 +255,14 @@ public class ToscaServiceTemplateService {
         ToscaUtils.assertPoliciesExist(incomingServiceTemplate);
 
         // append the incoming fragment to the DB TOSCA service template
-        final var serviceTemplateToWrite =
-            ToscaServiceTemplateUtils.addFragment(getDefaultJpaToscaServiceTemplate(), incomingServiceTemplate);
+        var dbServiceTemplateOpt = getDefaultJpaToscaServiceTemplateOpt();
+        JpaToscaServiceTemplate serviceTemplateToWrite;
+        if (dbServiceTemplateOpt.isEmpty()) {
+            serviceTemplateToWrite = incomingServiceTemplate;
+        } else {
+            serviceTemplateToWrite =
+                ToscaServiceTemplateUtils.addFragment(dbServiceTemplateOpt.get(), incomingServiceTemplate);
+        }
 
         final var result = serviceTemplateToWrite.validate("Policies CRUD service template.");
         if (!result.isValid()) {
@@ -254,7 +271,7 @@ public class ToscaServiceTemplateService {
 
         toscaServiceTemplateRepository.save(serviceTemplateToWrite);
 
-        LOGGER.debug("<-appendServiceTemplateFragment: returnServiceTempalate={}", serviceTemplateToWrite);
+        LOGGER.debug("<-appendServiceTemplateFragment: returnServiceTemplate={}", serviceTemplateToWrite);
         return body;
     }
 
@@ -308,16 +325,13 @@ public class ToscaServiceTemplateService {
     /**
      * Retrieves TOSCA service template with the specified version of the policy type.
      *
-     * @param policyTypeName the name of the policy type
-     * @param policyTypeVersion the version of the policy type
+     * @param policyTypeFilter the policy type filter containing name and version of the policy type
      * @return the TOSCA service template containing the specified version of the policy type
      * @throws PfModelException on errors getting the policy type
      */
-    private ToscaServiceTemplate getFilteredPolicyTypes(final String policyTypeName, final String policyTypeVersion)
+    public ToscaServiceTemplate getFilteredPolicyTypes(final ToscaEntityFilter<ToscaPolicyType> policyTypeFilter)
         throws PfModelException {
         final var dbServiceTemplate = getDefaultJpaToscaServiceTemplate();
-        final var policyTypeFilter =
-            ToscaEntityFilter.<ToscaPolicyType>builder().name(policyTypeName).version(policyTypeVersion).build();
         LOGGER.debug("->getFilteredPolicyTypes: filter={}, serviceTemplate={}", policyTypeFilter, dbServiceTemplate);
 
         // validate that policyTypes exist in db
@@ -326,9 +340,11 @@ public class ToscaServiceTemplateService {
                 "policy types for filter " + policyTypeFilter + DO_NOT_EXIST_MSG);
         }
 
+        var version = ToscaTypedEntityFilter.LATEST_VERSION
+            .equals(policyTypeFilter.getVersion()) ? null : policyTypeFilter.getVersion();
         // fetch all polices and filter by policyType, policy name and version
         final var serviceTemplate = new SimpleToscaProvider()
-            .getCascadedPolicyTypes(dbServiceTemplate, policyTypeName, policyTypeVersion);
+            .getCascadedPolicyTypes(dbServiceTemplate, policyTypeFilter.getName(), version);
         var simpleToscaProvider = new SimpleToscaProvider();
 
         List<ToscaPolicyType> filteredPolicyTypes = serviceTemplate.getPolicyTypes().toAuthorativeList();
@@ -414,15 +430,26 @@ public class ToscaServiceTemplateService {
 
     /**
      * Get Service Template.
+     *
      * @return the Service Template read from the database
+     * @throws PfModelRuntimeException if service template if not found in database.
      */
-    private JpaToscaServiceTemplate getDefaultJpaToscaServiceTemplate() {
-        final var defaultServiceTemplateOpt = toscaServiceTemplateRepository
-            .findById(new PfConceptKey(JpaToscaServiceTemplate.DEFAULT_NAME, JpaToscaServiceTemplate.DEFAULT_VERSION));
+    public JpaToscaServiceTemplate getDefaultJpaToscaServiceTemplate() throws PfModelRuntimeException {
+        final var defaultServiceTemplateOpt = getDefaultJpaToscaServiceTemplateOpt();
         if (defaultServiceTemplateOpt.isEmpty()) {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND, SERVICE_TEMPLATE_NOT_FOUND_MSG);
         }
         LOGGER.debug("<-getDefaultJpaToscaServiceTemplate: serviceTemplate={}", defaultServiceTemplateOpt.get());
         return defaultServiceTemplateOpt.get();
     }
+
+    /**
+     * Get Service Template Optional object.
+     *
+     * @return the Optional object for Service Template read from the database
+     */
+    private Optional<JpaToscaServiceTemplate> getDefaultJpaToscaServiceTemplateOpt() {
+        return toscaServiceTemplateRepository
+            .findById(new PfConceptKey(JpaToscaServiceTemplate.DEFAULT_NAME, JpaToscaServiceTemplate.DEFAULT_VERSION));
+    }
 }
\ No newline at end of file
index 4aa2516..87a5389 100644 (file)
@@ -28,21 +28,21 @@ import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import javax.annotation.PostConstruct;
+import lombok.RequiredArgsConstructor;
 import org.onap.policy.api.main.config.PolicyPreloadConfig;
 import org.onap.policy.api.main.exception.PolicyApiException;
+import org.onap.policy.api.main.service.ToscaServiceTemplateService;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardYamlCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.provider.PolicyModelsProvider;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityFilter;
 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.concepts.ToscaTopologyTemplate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Component;
 
@@ -53,17 +53,14 @@ import org.springframework.stereotype.Component;
  */
 @Component
 @ConditionalOnProperty(value = "database.initialize", havingValue = "true", matchIfMissing = true)
+@RequiredArgsConstructor
 public class ApiDatabaseInitializer {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ApiDatabaseInitializer.class);
-
     private static final StandardYamlCoder coder = new StandardYamlCoder();
 
-    @Autowired
-    PolicyModelsProvider policyModelsProvider;
-
-    @Autowired
-    PolicyPreloadConfig policyPreloadConfig;
+    private final ToscaServiceTemplateService toscaServiceTemplateService;
+    private final PolicyPreloadConfig policyPreloadConfig;
 
     @PostConstruct
     public void loadData() throws PolicyApiException {
@@ -91,8 +88,8 @@ public class ApiDatabaseInitializer {
             serviceTemplate.setToscaDefinitionsVersion("tosca_simple_yaml_1_1_0");
 
             ToscaServiceTemplate createdPolicyTypes =
-                    preloadServiceTemplate(serviceTemplate, policyTypes, policyModelsProvider::createPolicyTypes);
-            preloadServiceTemplate(createdPolicyTypes, policies, policyModelsProvider::createPolicies);
+                preloadServiceTemplate(serviceTemplate, policyTypes, toscaServiceTemplateService::createPolicyType);
+            preloadServiceTemplate(createdPolicyTypes, policies, toscaServiceTemplateService::createPolicies);
         } catch (final PolicyApiException | PfModelException | CoderException exp) {
             throw new PolicyApiException(exp);
         }
@@ -100,8 +97,8 @@ public class ApiDatabaseInitializer {
 
     private boolean alreadyExists() throws PfModelException {
         try {
-            ToscaServiceTemplate serviceTemplate =
-                    policyModelsProvider.getFilteredPolicyTypes(ToscaEntityFilter.<ToscaPolicyType>builder().build());
+            ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService
+                .getFilteredPolicyTypes(ToscaEntityFilter.<ToscaPolicyType>builder().build());
             if (!serviceTemplate.getPolicyTypes().isEmpty()) {
                 return true;
             }
index bc67d21..48484d6 100644 (file)
@@ -26,6 +26,7 @@ package org.onap.policy.api.main.rest;
 
 import static org.junit.Assert.assertEquals;
 
+import lombok.RequiredArgsConstructor;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.onap.policy.api.main.PolicyApiApplication;
@@ -40,7 +41,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 public class TestApiStatisticsManager {
 
     @Autowired
-    private ApiStatisticsManager mgr = new ApiStatisticsManager();
+    private ApiStatisticsManager mgr;
 
     @Test
     public void testUpdateMethods() {
index 240d364..6ed69ea 100644 (file)
@@ -1,3 +1,17 @@
+spring:
+  datasource:
+    url: jdbc:h2:mem:testdb
+    driverClassName: org.h2.Driver
+  jpa:
+    properties:
+      hibernate:
+        dialect: org.hibernate.dialect.H2Dialect
+    hibernate:
+      ddl-auto: update
+      naming:
+        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
+        implicit-strategy: org.onap.policy.common.spring.utils.CustomImplicitNamingStrategy
+
 database:
   name: PolicyProviderParameterGroup
   implementation: org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl