@Override public boolean evaluateWithObject(Object object) { Object destinationValue = NSKeyValueCodingAdditions.Utility.valueForKeyPath(object, relationshipName); if (destinationValue != null) { if (destinationValue instanceof NSArray) { NSArray arr = (NSArray) destinationValue; return EOQualifier.filteredArrayWithQualifier(arr, qualifier).count() > 0; } return qualifier.evaluateWithObject(destinationValue); } return false; }
/** * Like EOQualifier.filteredArrayWithQualifier but for an NSSet. * * @param <T> type of set contents * @param set the set to filter * @param qualifier the qualifier to apply * @return the filtered set */ public static <T> NSSet<T> filteredSetWithQualifier(NSSet<T> set, EOQualifier qualifier) { if (set == null) { return NSSet.EmptySet; } if (qualifier == null || qualifier._isEmpty()) { return set; } int count = set.count(); NSMutableSet<T> filteredSet = new NSMutableSet<>(count); Enumeration setEnum = set.objectEnumerator(); while (setEnum.hasMoreElements()) { Object object = setEnum.nextElement(); if (qualifier.evaluateWithObject(object)) { filteredSet.addObject((T) object); } } return filteredSet; }