package org.opennms.util.ilr; import java.util.ArrayList; import java.util.Collection; public class Filter { private static String m_searchString = null; public static interface PropertyGetter<T> { T get(ServiceCollector c); } static PropertyGetter<String> serviceID() { return new PropertyGetter<String>() { public String get(ServiceCollector c) { return c.getServiceID(); } }; } static PropertyGetter<Integer> collectionCount() { return new PropertyGetter<Integer>() { public Integer get(ServiceCollector c) { return c.getCollectionCount(); } }; } static Predicate<ServiceCollector> and(final Predicate<ServiceCollector> a, final Predicate<ServiceCollector> b) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return a.apply(svcCollector) && b.apply(svcCollector); } }; } static Predicate<ServiceCollector> or(final Predicate<ServiceCollector> a, final Predicate<ServiceCollector> b) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return a.apply(svcCollector) || b.apply(svcCollector); } }; } static <T> Predicate<ServiceCollector> eq(final PropertyGetter<T> getter, final T val) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return getter.get(svcCollector).equals(val); } }; } static Predicate<ServiceCollector> greaterThan(final PropertyGetter<Integer> getter, final Integer val) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return getter.get(svcCollector) > val; } }; } static Predicate<ServiceCollector> lessThan(final PropertyGetter<Integer> getter, final Integer val) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return getter.get(svcCollector) < val; } }; } static Predicate<ServiceCollector> byServiceID(final String serviceID) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getServiceID().equals(serviceID); } }; } static Predicate<ServiceCollector> byPartialServiceID(final String searchString) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector){ return svcCollector.getServiceID().contains(searchString); } }; } static Predicate<ServiceCollector> byTotalCollections(final long totalCollections) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == totalCollections; } }; } static Predicate<ServiceCollector> byTotalCollectionTime(final long totalCollectionTime) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == totalCollectionTime; } }; } static Predicate<ServiceCollector> byAverageCollectionTime(final long averageCollectionTime) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == averageCollectionTime; } }; } static Predicate<ServiceCollector> byAverageTimeBetweenCollections(final long averageTimeBetweenCollections) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == averageTimeBetweenCollections; } }; } static Predicate<ServiceCollector> byTotalSuccessfulCollections(final long totalSuccessfulCollections) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == totalSuccessfulCollections; } }; } static Predicate<ServiceCollector> bySuccessfulPercentage(final double successfulPercentage) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == successfulPercentage; } }; } static Predicate<ServiceCollector> byAverageSuccessfulCollectionTime(final long averageSuccessfulCollectionTime) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == averageSuccessfulCollectionTime; } }; } static Predicate<ServiceCollector> byTotalUnsuccessfulCollections(final long totalUnsuccessfulCollections) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == totalUnsuccessfulCollections; } }; } static Predicate<ServiceCollector> byUnsuccessfulPercentage(final double unsuccessfulPercentage) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == unsuccessfulPercentage; } }; } static Predicate<ServiceCollector> byAverageUnsuccessfulCollectionTime(final long averageUnsuccessfulCollectionTime) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == averageUnsuccessfulCollectionTime; } }; } static Predicate<ServiceCollector> byTotalPersistTime(final long totalPersistTime) { return new Predicate<ServiceCollector>() { public boolean apply(ServiceCollector svcCollector) { return svcCollector.getCollectionCount() == totalPersistTime; } }; } public Predicate<Integer> createIntegerBasedPredicate(final int j) { Predicate<Integer> predicate = new Predicate<Integer>() { public boolean apply(Integer i) { if(i == j){ return true; }else{ return false; } } }; return predicate; } public Predicate<String> createStringBasedPredicate(final String filterString) { Predicate<String> predicate = new Predicate<String>() { public boolean apply(String s) { if(s.equals(filterString)){ return true; }else { return false; } } }; return predicate; } static public <T> Collection<T> filter(Collection<T> target, Predicate<T> predicate) { Collection<T> filteredCollection = new ArrayList<T>(); for (T t : target) { if (predicate.apply(t)) { filteredCollection.add(t); } } return filteredCollection; } public interface Predicate<T> { public boolean apply(T type); } public static void setSearchString(String searchString) { m_searchString = searchString; } public static String getSearchString() { return m_searchString; } }