Make filters on TOSCA entities generic 74/117574/1
authorliamfallon <liam.fallon@est.tech>
Sun, 7 Feb 2021 15:20:23 +0000 (15:20 +0000)
committerliamfallon <liam.fallon@est.tech>
Sun, 7 Feb 2021 15:20:28 +0000 (15:20 +0000)
The classes PolicyTypeFilter and PolicyFilter only work on Policy types
and policies. However they just filter on name/version/type/typeversion
so there is no reason that the filters could not be applied to other
entities.

This commit adapts the PolicyTypeFilter to EntityFilter and PolicyFilter
to TypedEntityFilter, so the filters can be applied to collections of
any ToscaEntity class.

Issue-ID: POLICY-2995
Change-Id: Ibf12c757758d31ec3075119c56243e0abcf259bf
Signed-off-by: liamfallon <liam.fallon@est.tech>
main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java
main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java
main/src/main/java/org/onap/policy/api/main/startstop/ApiDatabaseInitializer.java
main/src/test/java/org/onap/policy/api/main/rest/provider/TestPolicyTypeProvider.java

index 4ba3322..33df1cc 100644 (file)
@@ -3,7 +3,7 @@
  * ONAP Policy API\r
  * ================================================================================\r
  * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.\r
- * Modifications Copyright (C) 2020 Nordix Foundation.\r
+ * Modifications Copyright (C) 2020-2021 Nordix Foundation.\r
  * ================================================================================\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
@@ -25,8 +25,9 @@ package org.onap.policy.api.main.rest.provider;
 \r
 import org.onap.policy.api.main.rest.PolicyFetchMode;\r
 import org.onap.policy.models.base.PfModelException;\r
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;\r
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;\r
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;\r
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;\r
 \r
 /**\r
  * Class to provide all kinds of policy operations.\r
@@ -56,7 +57,7 @@ public class PolicyProvider extends CommonModelProvider {
      * @throws PfModelException the PfModel parsing exception\r
      */\r
     public ToscaServiceTemplate fetchPolicies(final String policyTypeId, final String policyTypeVersion,\r
-        final String policyId, final String policyVersion, final PolicyFetchMode mode) throws PfModelException {\r
+            final String policyId, final String policyVersion, final PolicyFetchMode mode) throws PfModelException {\r
 \r
         return getFilteredPolicies(policyTypeId, policyTypeVersion, policyId, policyVersion, mode);\r
     }\r
@@ -73,9 +74,10 @@ public class PolicyProvider extends CommonModelProvider {
      * @throws PfModelException the PfModel parsing exception\r
      */\r
     public ToscaServiceTemplate fetchLatestPolicies(final String policyTypeId, final String policyTypeVersion,\r
-        final String policyId, final PolicyFetchMode mode) throws PfModelException {\r
+            final String policyId, final PolicyFetchMode mode) throws PfModelException {\r
 \r
-        return getFilteredPolicies(policyTypeId, policyTypeVersion, policyId, ToscaPolicyFilter.LATEST_VERSION, mode);\r
+        return getFilteredPolicies(policyTypeId, policyTypeVersion, policyId, ToscaTypedEntityFilter.LATEST_VERSION,\r
+                mode);\r
     }\r
 \r
     /**\r
@@ -90,7 +92,7 @@ public class PolicyProvider extends CommonModelProvider {
      * @throws PfModelException the PfModel parsing exception\r
      */\r
     public ToscaServiceTemplate createPolicy(String policyTypeId, String policyTypeVersion, ToscaServiceTemplate body)\r
-        throws PfModelException {\r
+            throws PfModelException {\r
 \r
         return modelsProvider.createPolicies(body);\r
     }\r
@@ -121,7 +123,7 @@ public class PolicyProvider extends CommonModelProvider {
      * @throws PfModelException the PfModel parsing exception\r
      */\r
     public ToscaServiceTemplate deletePolicy(String policyTypeId, String policyTypeVersion, String policyId,\r
-        String policyVersion) throws PfModelException {\r
+            String policyVersion) throws PfModelException {\r
 \r
         return modelsProvider.deletePolicy(policyId, policyVersion);\r
     }\r
@@ -140,10 +142,10 @@ public class PolicyProvider extends CommonModelProvider {
      * @throws PfModelException the PfModel parsing exception\r
      */\r
     private ToscaServiceTemplate getFilteredPolicies(final String policyTypeName, final String policyTypeVersion,\r
-        final String policyName, final String policyVersion, final PolicyFetchMode mode) throws PfModelException {\r
+            final String policyName, final String policyVersion, final PolicyFetchMode mode) throws PfModelException {\r
 \r
-        ToscaPolicyFilter policyFilter = ToscaPolicyFilter.builder().name(policyName).version(policyVersion)\r
-            .type(policyTypeName).typeVersion(policyTypeVersion).build();\r
+        ToscaTypedEntityFilter<ToscaPolicy> policyFilter = ToscaTypedEntityFilter.<ToscaPolicy>builder()\r
+                .name(policyName).version(policyVersion).type(policyTypeName).typeVersion(policyTypeVersion).build();\r
 \r
         ToscaServiceTemplate serviceTemplate = modelsProvider.getFilteredPolicies(policyFilter);\r
 \r
index 9c9c41c..e56b536 100644 (file)
@@ -3,7 +3,7 @@
  * ONAP Policy API\r
  * ================================================================================\r
  * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.\r
- * Modifications Copyright (C) 2020 Nordix Foundation.\r
+ * Modifications Copyright (C) 2020-2021 Nordix Foundation.\r
  * ================================================================================\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
@@ -24,7 +24,8 @@
 package org.onap.policy.api.main.rest.provider;\r
 \r
 import org.onap.policy.models.base.PfModelException;\r
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;\r
+import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityFilter;\r
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;\r
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;\r
 \r
 /**\r
@@ -68,7 +69,7 @@ public class PolicyTypeProvider extends CommonModelProvider {
      */\r
     public ToscaServiceTemplate fetchLatestPolicyTypes(String policyTypeId) throws PfModelException {\r
 \r
-        return getFilteredPolicyTypes(policyTypeId, ToscaPolicyTypeFilter.LATEST_VERSION);\r
+        return getFilteredPolicyTypes(policyTypeId, ToscaEntityFilter.LATEST_VERSION);\r
     }\r
 \r
     /**\r
@@ -113,8 +114,8 @@ public class PolicyTypeProvider extends CommonModelProvider {
     private ToscaServiceTemplate getFilteredPolicyTypes(String policyTypeName, String policyTypeVersion)\r
             throws PfModelException {\r
 \r
-        ToscaPolicyTypeFilter policyTypeFilter =\r
-                ToscaPolicyTypeFilter.builder().name(policyTypeName).version(policyTypeVersion).build();\r
+        ToscaEntityFilter<ToscaPolicyType> policyTypeFilter =\r
+                ToscaEntityFilter.<ToscaPolicyType>builder().name(policyTypeName).version(policyTypeVersion).build();\r
         return modelsProvider.getFilteredPolicyTypes(policyTypeFilter);\r
     }\r
 }\r
index dbcc42c..d30b012 100644 (file)
@@ -3,7 +3,7 @@
  * ONAP Policy API
  * ================================================================================
  * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Modifications Copyright (C) 2019-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.
@@ -35,7 +35,8 @@ 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.provider.PolicyModelsProviderFactory;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
+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;
@@ -83,8 +84,8 @@ public class ApiDatabaseInitializer {
 
             ToscaServiceTemplate createdPolicyTypes = preloadServiceTemplate(serviceTemplate,
                     apiParameterGroup.getPreloadPolicyTypes(), databaseProvider::createPolicyTypes);
-            preloadServiceTemplate(createdPolicyTypes,
-                    apiParameterGroup.getPreloadPolicies(), databaseProvider::createPolicies);
+            preloadServiceTemplate(createdPolicyTypes, apiParameterGroup.getPreloadPolicies(),
+                    databaseProvider::createPolicies);
         } catch (final PolicyApiException | PfModelException | CoderException exp) {
             throw new PolicyApiException(exp);
         }
@@ -93,7 +94,7 @@ public class ApiDatabaseInitializer {
     private boolean alreadyExists(PolicyModelsProvider databaseProvider) throws PfModelException {
         try {
             ToscaServiceTemplate serviceTemplate =
-                            databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build());
+                    databaseProvider.getFilteredPolicyTypes(ToscaEntityFilter.<ToscaPolicyType>builder().build());
             if (!serviceTemplate.getPolicyTypes().isEmpty()) {
                 return true;
             }
@@ -105,9 +106,9 @@ public class ApiDatabaseInitializer {
         return false;
     }
 
-    private ToscaServiceTemplate preloadServiceTemplate(ToscaServiceTemplate serviceTemplate,
-            List<String> entities, FunctionWithEx<ToscaServiceTemplate, ToscaServiceTemplate> getter)
-                    throws PolicyApiException, CoderException, PfModelException {
+    private ToscaServiceTemplate preloadServiceTemplate(ToscaServiceTemplate serviceTemplate, List<String> entities,
+            FunctionWithEx<ToscaServiceTemplate, ToscaServiceTemplate> getter)
+            throws PolicyApiException, CoderException, PfModelException {
 
         for (String entity : entities) {
             String entityAsStringYaml = ResourceUtils.getResourceAsString(entity);
@@ -116,8 +117,7 @@ public class ApiDatabaseInitializer {
                 continue;
             }
 
-            ToscaServiceTemplate singleEntity =
-                    coder.decode(entityAsStringYaml,  ToscaServiceTemplate.class);
+            ToscaServiceTemplate singleEntity = coder.decode(entityAsStringYaml, ToscaServiceTemplate.class);
             if (singleEntity == null) {
                 throw new PolicyApiException("Error deserializaing entity from file: " + entity);
             }
@@ -136,7 +136,7 @@ public class ApiDatabaseInitializer {
                 serviceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
                 serviceTemplate.getToscaTopologyTemplate().setPolicies(new LinkedList<>());
                 serviceTemplate.getToscaTopologyTemplate().getPolicies()
-                    .addAll(singleEntity.getToscaTopologyTemplate().getPolicies());
+                        .addAll(singleEntity.getToscaTopologyTemplate().getPolicies());
             }
         }
         // Preload the specified entities
index 9b2f3b8..95f9386 100644 (file)
@@ -3,7 +3,7 @@
  * ONAP Policy API
  * ================================================================================
  * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2021 Nordix Foundation.
  * Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -117,11 +117,11 @@ public class TestPolicyTypeProvider {
 
         assertThatThrownBy(() -> {
             policyTypeProvider.fetchPolicyTypes("dummy", null);
-        }).hasMessage("policy types for filter ToscaPolicyTypeFilter(name=dummy, version=null) do not exist");
+        }).hasMessage("policy types for filter ToscaEntityFilter(name=dummy, version=null) do not exist");
 
         assertThatThrownBy(() -> {
             policyTypeProvider.fetchPolicyTypes("dummy", "dummy");
-        }).hasMessage("policy types for filter ToscaPolicyTypeFilter(name=dummy, version=dummy) do not exist");
+        }).hasMessage("policy types for filter ToscaEntityFilter(name=dummy, version=dummy) do not exist");
     }
 
     @Test
@@ -129,7 +129,7 @@ public class TestPolicyTypeProvider {
 
         assertThatThrownBy(() -> {
             policyTypeProvider.fetchLatestPolicyTypes("dummy");
-        }).hasMessage("policy types for filter ToscaPolicyTypeFilter(name=dummy, version=LATEST) do not exist");
+        }).hasMessage("policy types for filter ToscaEntityFilter(name=dummy, version=LATEST) do not exist");
     }
 
     @Test