aboutsummaryrefslogtreecommitdiffstats
path: root/models-base/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'models-base/src/main')
-rw-r--r--models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java71
1 files changed, 67 insertions, 4 deletions
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java b/models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java
index 35319b4fd..f4e457192 100644
--- a/models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java
+++ b/models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java
@@ -24,6 +24,9 @@ package org.onap.policy.models.base;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.regex.Pattern;
/**
* Interface for filtering a list of concepts.
@@ -41,14 +44,74 @@ public interface PfObjectFilter<T extends Comparable<T>> {
public List<T> filter(final List<T> originalList);
/**
- * Check if a value matches a regular expression.
+ * Check if a value exactly equals some text.
*
* @param value the incoming value to check
- * @param pattern the pattern to check against
+ * @param text the desired text to check against
* @return match or not
*/
- public default boolean filterString(final String value, final String pattern) {
- return value == null || pattern == null || value.equals(pattern);
+ public default boolean filterString(final String value, final String text) {
+ return value == null || text == null || value.equals(text);
+ }
+
+ /**
+ * Gets a predicate used to filter an item in a list by exactly matching an extracted value
+ * with some text.
+ *
+ * @param text the desired text to check against, or {@code null} if to accept everything
+ * @param extractor function to extract the value, to be matched, from a list item
+ * @return a predicate to match a value from a list item
+ */
+ public default Predicate<T> filterStringPred(final String text, Function<T, String> extractor) {
+ // if null text, then everything matches
+ if (text == null) {
+ return item -> true;
+ }
+
+ return item -> text.equals(extractor.apply(item));
+ }
+
+ /**
+ * Gets a predicate used to filter an item in a list by comparing the start of an
+ * extracted value with a prefix.
+ *
+ * @param prefix the desired prefix to check against, or {@code null} if to accept
+ * everything
+ * @param extractor function to extract the value, to be matched, from a list item
+ * @return a predicate to match a prefix with a value from a list item
+ */
+ public default Predicate<T> filterPrefixPred(final String prefix, Function<T, String> extractor) {
+ // if null prefix, then everything matches
+ if (prefix == null) {
+ return item -> true;
+ }
+
+ return item -> {
+ String value = extractor.apply(item);
+ return (value != null && value.startsWith(prefix));
+ };
+ }
+
+ /**
+ * Gets a predicate used to filter an item in a list by matching an extracted value
+ * with a regular expression.
+ *
+ * @param pattern regular expression to match, or {@code null} if to accept everything
+ * @param extractor function to extract the value, to be matched, from a list item
+ * @return a predicate to match a value from a list item using a regular expression
+ */
+ public default Predicate<T> filterRegexpPred(final String pattern, Function<T, String> extractor) {
+ // if null pattern, then everything matches
+ if (pattern == null) {
+ return item -> true;
+ }
+
+ Pattern pat = Pattern.compile(pattern);
+
+ return item -> {
+ String value = extractor.apply(item);
+ return (value != null && pat.matcher(value).matches());
+ };
}
/**