/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2019 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.List;
import java.util.stream.Collectors;
-
import lombok.Builder;
import lombok.Data;
import lombok.NonNull;
-
import org.apache.commons.lang3.ObjectUtils;
import org.onap.policy.models.base.PfObjectFilter;
import org.onap.policy.models.pdp.enums.PdpState;
@Builder
@Data
public class PdpGroupFilter implements PfObjectFilter<PdpGroup> {
- public static final String LATEST_VERSION = "LATEST";
-
// Name to find
private String name;
- // Version to find, set to LATEST_VERSION to get the latest version
- private String version;
-
// State to find
private PdpState groupState;
public List<PdpGroup> filter(@NonNull final List<PdpGroup> originalList) {
// @formatter:off
- List<PdpGroup> returnList = originalList.stream()
+ return originalList.stream()
.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 -> filterOnPolicyTypeList(p, policyTypeList, matchPolicyTypesExactly))
.filter(p -> filterOnPdpState(p, pdpState))
.collect(Collectors.toList());
// @formatter:on
-
- if (LATEST_VERSION.equals(version)) {
- returnList = this.latestVersionFilter(returnList);
- }
-
- return returnList;
}
/**
}
for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) {
- if (matchPolicyTypesExactly && areListsIdentical(pdpSubGroup.getSupportedPolicyTypes(), typeFilter)) {
- return true;
- } else if (!matchPolicyTypesExactly
- && findSingleElement(pdpSubGroup.getSupportedPolicyTypes(), typeFilter)) {
+ if (matchPolicyTypesExactly) {
+ if (areListsIdentical(pdpSubGroup.getSupportedPolicyTypes(), typeFilter)) {
+ return true;
+ }
+ } else if (findSupportedPolicyType(pdpSubGroup.getSupportedPolicyTypes(), typeFilter)) {
return true;
}
}
}
+ /**
+ * Find a single supported type.
+ *
+ * @param supportedPolicyTypes supported types
+ * @param typeFilter the list of types, one of which we wish to find supported by
+ * the list we are searching
+ * @return true if one element of the elements to find is supported by an element on
+ * the list we searched
+ */
+ private boolean findSupportedPolicyType(List<ToscaPolicyTypeIdentifier> supportedPolicyTypes,
+ List<ToscaPolicyTypeIdentifier> typeFilter) {
+ for (ToscaPolicyTypeIdentifier supportedPolicyType : supportedPolicyTypes) {
+ String supName = supportedPolicyType.getName();
+ if (supName.endsWith(".*")) {
+ String substr = supName.substring(0, supName.length() - 1);
+ if (typeFilter.stream().anyMatch(type -> type.getName().startsWith(substr))) {
+ return true;
+ }
+ } else if (typeFilter.contains(supportedPolicyType)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
* Filter PDP groups on policy.
*
}
for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) {
- if (matchPoliciesExactly && areListsIdentical(pdpSubGroup.getPolicies(), policyFilter)) {
- return true;
- } else if (!matchPoliciesExactly && findSingleElement(pdpSubGroup.getPolicies(), policyFilter)) {
+ if (matchPoliciesExactly) {
+ if (areListsIdentical(pdpSubGroup.getPolicies(), policyFilter)) {
+ return true;
+ }
+ } else if (findSingleElement(pdpSubGroup.getPolicies(), policyFilter)) {
return true;
}
}