X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=models-pdp%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fmodels%2Fpdp%2Fconcepts%2FPdpGroupFilter.java;h=0f86c689009d922a8bdd5f09aa3ad26a86a19f00;hb=891bffd9f13177d96ad26acdfa7148d09e1d682a;hp=c5c0bc541fb4e8f3201b3b8bad3ba2a4957fb835;hpb=009e46781b895c60a012c4ac13baddb145f698e9;p=policy%2Fmodels.git diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpGroupFilter.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpGroupFilter.java index c5c0bc541..0f86c6890 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpGroupFilter.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpGroupFilter.java @@ -43,23 +43,33 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifi public class PdpGroupFilter implements PfObjectFilter { public static final String LATEST_VERSION = "LATEST"; - // Regular expression + // Name to find private String name; - // Regular Expression, set to LATEST_VERRSION to get the latest version + // Version to find, set to LATEST_VERSION to get the latest version private String version; + // State to find private PdpState groupState; - // Regular expression + // PDP type to find private String pdpType; // Set regular expressions on fields to match policy type names and versions - private ToscaPolicyTypeIdentifier policyType; + private List policyTypeList; + + // If set, only PDP groups where policy types are matched exactly are returned + @Builder.Default + private boolean matchPolicyTypesExactly = false; // Set regular expressions on fields to match policy names and versions - private ToscaPolicyIdentifier policy; + private List policyList; + + // If set, only PDP groups where policies are matched exactly are returned + @Builder.Default + private boolean matchPoliciesExactly = false; + // If set, only PDP groups with PDPs in this state are returned private PdpState pdpState; @Override @@ -67,14 +77,16 @@ public class PdpGroupFilter implements PfObjectFilter { // @formatter:off List returnList = originalList.stream() - .filter(p -> filterOnRegexp(p.getName(), name)) - .filter(p -> filterOnRegexp(p.getVersion(), version)) - .filter(p -> ObjectUtils.compare(p.getPdpGroupState(), groupState) == 0) + .filter(p -> filterString(p.getName(), name)) + .filter(p -> LATEST_VERSION.equals(version) + || filterString(p.getVersion(), version)) + .filter(p -> groupState == null || ObjectUtils.compare(p.getPdpGroupState(), groupState) == 0) .filter(p -> filterOnPdpType(p, pdpType)) - .filter(p -> filterOnPolicyType(p, policyType)) - .filter(p -> filterOnPolicy(p, policy)) + .filter(p -> filterOnPolicyTypeList(p, policyTypeList, matchPolicyTypesExactly)) + .filter(p -> filterOnPolicyList(p, policyList, matchPoliciesExactly)) + .filter(p -> filterOnPdpState(p, pdpState)) .collect(Collectors.toList()); - // @formatter:off + // @formatter:on if (LATEST_VERSION.equals(version)) { returnList = this.latestVersionFilter(returnList); @@ -95,7 +107,7 @@ public class PdpGroupFilter implements PfObjectFilter { return true; } - for (PdpSubGroup pdpSubGroup: pdpGroup.getPdpSubgroups()) { + for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) { if (pdpSubGroup.getPdpType().equals(pdpType)) { return true; } @@ -108,24 +120,27 @@ public class PdpGroupFilter implements PfObjectFilter { * Filter PDP groups on policy type. * * @param pdpGroup the PDP group to check - * @param policyTypeFilter the policy type regular expressions to check for + * @param typeFilter the policy type regular expressions to check for + * @param matchPolicyTypesExactly if true, only PDP groups where policy types are matched exactly are returned * @return true if the filter should let this PDP group through */ - private boolean filterOnPolicyType(final PdpGroup pdpGroup, final ToscaPolicyTypeIdentifier policyTypeFiler) { - if (policyTypeFiler == null) { + private boolean filterOnPolicyTypeList(final PdpGroup pdpGroup, final List typeFilter, + final boolean matchPolicyTypesExactly) { + if (typeFilter == null) { return true; } - for (PdpSubGroup pdpSubGroup: pdpGroup.getPdpSubgroups()) { - for (ToscaPolicyTypeIdentifier foundPolicyType : pdpSubGroup.getSupportedPolicyTypes()) { - if (foundPolicyType.getName().matches(policyTypeFiler.getName()) - && foundPolicyType.getVersion().matches(policyTypeFiler.getVersion())) { - return true; - } + for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) { + if (matchPolicyTypesExactly && areListsIdentical(pdpSubGroup.getSupportedPolicyTypes(), typeFilter)) { + return true; + } else if (!matchPolicyTypesExactly + && findSingleElement(pdpSubGroup.getSupportedPolicyTypes(), typeFilter)) { + return true; } } return false; + } /** @@ -133,17 +148,41 @@ public class PdpGroupFilter implements PfObjectFilter { * * @param pdpGroup the PDP group to check * @param policyFilter the policy regular expressions to check for + * @param matchPoliciesExactly if true, only PDP groups where ps are matched exactly are returned + * @return true if the filter should let this PDP group through + */ + private boolean filterOnPolicyList(final PdpGroup pdpGroup, final List policyFilter, + final boolean matchPoliciesExactly) { + if (policyFilter == null) { + return true; + } + + for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) { + if (matchPoliciesExactly && areListsIdentical(pdpSubGroup.getPolicies(), policyFilter)) { + return true; + } else if (!matchPoliciesExactly && findSingleElement(pdpSubGroup.getPolicies(), policyFilter)) { + return true; + } + } + + return false; + } + + /** + * Filter PDP groups on PDP state. + * + * @param pdpGroup the PDP group to check + * @param policyFilter the policy regular expressions to check for * @return true if the filter should let this PDP group through */ - private boolean filterOnPolicy(final PdpGroup pdpGroup, final ToscaPolicyIdentifier policyFiler) { - if (policyFiler == null) { + private boolean filterOnPdpState(final PdpGroup pdpGroup, final PdpState pdpState) { + if (pdpState == null) { return true; } - for (PdpSubGroup pdpSubGroup: pdpGroup.getPdpSubgroups()) { - for (ToscaPolicyIdentifier foundPolicy : pdpSubGroup.getPolicies()) { - if (foundPolicy.getName().matches(policyFiler.getName()) - && foundPolicy.getVersion().matches(policyFiler.getVersion())) { + for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) { + for (Pdp pdp : pdpSubGroup.getPdpInstances()) { + if (pdpState.equals(pdp.getPdpState())) { return true; } } @@ -151,4 +190,32 @@ public class PdpGroupFilter implements PfObjectFilter { return false; } + + /** + * Check if two lists have identical content. + * + * @param leftList the left list + * @param rightList the right list + * @return true if the lists are identical + */ + private boolean areListsIdentical(final List leftList, List rightList) { + return leftList.equals(rightList); + } + + /** + * Find a single element of a list in a list. + * + * @param listToSearch the list in which we are searching for elements + * @param listOfElementsToFind the list of elements, one of which we wish to find on the list we are searching + * @return true if one element of the elements to find is found on the list we searched + */ + private boolean findSingleElement(final List listToSearch, List listOfElementsToFind) { + for (Object elementToFind : listOfElementsToFind) { + if (listToSearch.contains(elementToFind)) { + return true; + } + } + + return false; + } }