/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2019 Nordix Foundation.
+ * Modifications Copyright (C) 2019 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.
if (matchPolicyTypesExactly && areListsIdentical(pdpSubGroup.getSupportedPolicyTypes(), typeFilter)) {
return true;
} else if (!matchPolicyTypesExactly
- && findSingleElement(pdpSubGroup.getSupportedPolicyTypes(), typeFilter)) {
+ && 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.
*
import java.util.ArrayList;
import java.util.List;
-
+import java.util.stream.Collectors;
import org.junit.Before;
import org.junit.Test;
import org.onap.policy.common.utils.coder.CoderException;
assertEquals(0, filteredList.size());
identifierList.clear();
+ // don't match wild cards
+ identifierList.add(new ToscaPolicyTypeIdentifier(NON_EXISTANT, VERSION1));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ final List<PdpGroup> wildCards =
+ pdpGroupList.stream().map(this::makeWildCardPolicyTypes).collect(Collectors.toList());
+ filteredList = filter.filter(wildCards);
+ assertEquals(0, filteredList.size());
+ identifierList.clear();
+
+ // match wild cards
+ identifierList.add(new ToscaPolicyTypeIdentifier(POLICY_TYPE0, VERSION1));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ filteredList = filter.filter(wildCards);
+ assertEquals(4, filteredList.size());
+ identifierList.clear();
+
identifierList.add(new ToscaPolicyTypeIdentifier(POLICY_TYPE0, VERSION1));
filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
filteredList = filter.filter(pdpGroupList);
assertEquals(1, filteredList.size());
}
+ /**
+ * Makes a clone of a PdpGroup, changing all occurrences of supported policy type,
+ * "policy.type.0", to a wild card type, "policy.type.*".
+ *
+ * @param group group to be cloned
+ * @return a new PdpGroup containing wild card policy types
+ */
+ private PdpGroup makeWildCardPolicyTypes(PdpGroup group) {
+ PdpGroup newGroup = new PdpGroup(group);
+
+ for (PdpSubGroup subgroup : newGroup.getPdpSubgroups()) {
+ for (ToscaPolicyTypeIdentifier subType : subgroup.getSupportedPolicyTypes()) {
+ if (POLICY_TYPE0.equals(subType.getName())) {
+ subType.setName("policy.type.*");
+ }
+ }
+ }
+
+ return newGroup;
+ }
+
@Test
public void testFilterPolicy() {
List<ToscaPolicyIdentifier> identifierList = new ArrayList<>();