package org.onap.policy.api.main.rest.provider;\r
\r
import java.util.ArrayList;\r
-import java.util.HashMap;\r
import java.util.List;\r
import java.util.Map;\r
import javax.ws.rs.core.Response;\r
import org.apache.commons.lang3.tuple.Pair;\r
+import org.onap.policy.models.base.PfConceptKey;\r
import org.onap.policy.models.base.PfModelException;\r
import org.onap.policy.models.pdp.concepts.PdpGroup;\r
import org.onap.policy.models.pdp.concepts.PdpGroupFilter;\r
-import org.onap.policy.models.pdp.concepts.PdpSubGroup;\r
-import org.onap.policy.models.pdp.enums.PdpState;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;\r
public Map<Pair<String, String>, List<ToscaPolicy>> fetchDeployedPolicies(\r
String policyTypeId, String policyTypeVersion, String policyId) throws PfModelException {\r
\r
- List<ToscaPolicyTypeIdentifier> policyTypes = new ArrayList<>();\r
- policyTypes.add(new ToscaPolicyTypeIdentifier(policyTypeId, policyTypeVersion));\r
- PdpGroupFilter pdpGroupFilter = PdpGroupFilter.builder().policyTypeList(policyTypes)\r
- .groupState(PdpState.ACTIVE).pdpState(PdpState.ACTIVE).build();\r
- List<PdpGroup> pdpGroups = modelsProvider.getFilteredPdpGroups(pdpGroupFilter);\r
-\r
- if (pdpGroups.isEmpty()) {\r
- throw new PfModelException(Response.Status.NOT_FOUND,\r
- constructDeploymentNotFoundMessage(policyTypeId, policyTypeVersion, policyId));\r
- }\r
-\r
- Map<Pair<String, String>, List<ToscaPolicy>> deployedPolicyMap =\r
- constructDeployedPolicyMap(pdpGroups, policyId);\r
- if (deployedPolicyMap.isEmpty()) {\r
- throw new PfModelException(Response.Status.NOT_FOUND,\r
- constructDeploymentNotFoundMessage(policyTypeId, policyTypeVersion, policyId));\r
- }\r
-\r
- return deployedPolicyMap;\r
+ return collectDeployedPolicies(policyId, new PfConceptKey(policyTypeId, policyTypeVersion),\r
+ modelsProvider::getPolicyList, List::addAll, new ArrayList<>());\r
}\r
\r
/**\r
}\r
}\r
\r
- /**\r
- * Constructs the map of deployed pdp groups and deployed policies.\r
- *\r
- * @param pdpGroups the list of pdp groups that contain the specified policy\r
- * @param policyId the ID of policy\r
- *\r
- * @return the constructed map of pdp groups and deployed policies\r
- *\r
- * @throws PfModelException the PfModel parsing exception\r
- */\r
- private Map<Pair<String, String>, List<ToscaPolicy>> constructDeployedPolicyMap(\r
- List<PdpGroup> pdpGroups, String policyId) throws PfModelException {\r
-\r
- Map<Pair<String, String>, List<ToscaPolicy>> deployedPolicyMap = new HashMap<>();\r
- for (PdpGroup pdpGroup : pdpGroups) {\r
- List<ToscaPolicyIdentifier> policyIdentifiers = extractPolicyIdentifiers(policyId, pdpGroup);\r
- List<ToscaPolicy> deployedPolicies = getDeployedPolicies(policyIdentifiers);\r
- if (!deployedPolicies.isEmpty()) {\r
- deployedPolicyMap.put(Pair.of(pdpGroup.getName(), pdpGroup.getVersion()), deployedPolicies);\r
- }\r
- }\r
- return deployedPolicyMap;\r
- }\r
-\r
- private List<ToscaPolicyIdentifier> extractPolicyIdentifiers(String policyId, PdpGroup pdpGroup) {\r
- List<ToscaPolicyIdentifier> policyIdentifiers = new ArrayList<>();\r
- for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) {\r
- for (ToscaPolicyIdentifier policyIdentifier : pdpSubGroup.getPolicies()) {\r
- if (policyId.equalsIgnoreCase(policyIdentifier.getName())) {\r
- policyIdentifiers.add(policyIdentifier);\r
- }\r
- }\r
- }\r
- return policyIdentifiers;\r
- }\r
-\r
- private List<ToscaPolicy> getDeployedPolicies(List<ToscaPolicyIdentifier> policyIdentifiers)\r
- throws PfModelException {\r
-\r
- List<ToscaPolicy> deployedPolicies = new ArrayList<>();\r
- if (!policyIdentifiers.isEmpty()) {\r
- for (ToscaPolicyIdentifier policyIdentifier : policyIdentifiers) {\r
- deployedPolicies.addAll(\r
- modelsProvider.getPolicyList(policyIdentifier.getName(), policyIdentifier.getVersion()));\r
- }\r
- }\r
- return deployedPolicies;\r
- }\r
-\r
/**\r
* Constructs returned message for not found resource.\r
*\r
return "policy with ID " + policyId + ":" + policyVersion\r
+ " and type " + policyTypeId + ":" + policyTypeVersion + " does not exist";\r
}\r
-\r
- /**\r
- * Constructs returned message for not found policy deployment.\r
- *\r
- * @param policyTypeId the ID of policy type\r
- * @param policyTypeVersion the version of policy type\r
- * @param policyId the ID of policy\r
- * @param policyVersion the version of policy\r
- *\r
- * @return constructed message\r
- */\r
- private String constructDeploymentNotFoundMessage(String policyTypeId, String policyTypeVersion,\r
- String policyId) {\r
-\r
- return "could not find policy with ID " + policyId + " and type "\r
- + policyTypeId + ":" + policyTypeVersion + " deployed in any pdp group";\r
- }\r
}\r