List of usage examples for org.apache.commons.collections4.functors TransformedPredicate TransformedPredicate
public TransformedPredicate(final Transformer<? super T, ? extends T> transformer, final Predicate<? super T> predicate)
From source file:com.link_intersystems.lang.reflect.ReflectFacade.java
/** * A {@link Predicate} that evaluates to true if it is evaluated against * {@link Member} objects and the {@link Member#getName()} is equal to the * memberName this Predicate was constructed with. * * @return {@link Predicate} that evaluates to true if the {@link Member}'s * name it is evaluated against is equal to the name that this * {@link MemberNamePredicate} was constructed with. * @since 1.0.0.0// w ww . j a v a 2s . c o m */ public static Predicate getMemberNamePredicate(String memberName) { Assert.notNull("memberName", memberName); class SerializableMemberNamePredicate implements SerializableReference<Predicate> { private static final long serialVersionUID = -625148437829360498L; private transient Predicate predicate; private final String memberName; public SerializableMemberNamePredicate(String memberName) { this.memberName = memberName; } public Predicate get() { if (predicate == null) { Method memberGetNameMethod = MethodUtils.getAccessibleMethod(Member.class, "getName", new Class<?>[0]); MethodInvokingTransformer member2NameTransformer = new MethodInvokingTransformer( memberGetNameMethod); Predicate propertyValuePredicate = AndPredicate .andPredicate(NotNullPredicate.notNullPredicate(), new EqualPredicate(memberName)); Predicate instance = TransformedPredicate.transformedPredicate(member2NameTransformer, propertyValuePredicate); Predicate memberNamePredicate = AndPredicate.andPredicate(NotNullPredicate.notNullPredicate(), instance); this.predicate = memberNamePredicate; } return predicate; } } return new SerializablePredicate(new SerializableMemberNamePredicate(memberName)); }
From source file:com.link_intersystems.lang.reflect.ReflectFacade.java
/** * A {@link Predicate} that evaluates to true if the object it is evaluated * against is a {@link Member} and that {@link Member}'s declaring class is * equal to the {@link Class} that this//from w w w . j a v a 2s . com * {@link DeclaringClassMemberPredicate} was constructed with. * * @author Ren Link <a * href="mailto:rene.link@link-intersystems.com">[rene.link@link- * intersystems.com]</a> * @since 1.0.0.0 */ public static Predicate getDeclaringClassPredicate(Class<?> declaringClass) { Assert.notNull("declaringClass", declaringClass); class SerializableDeclaringClassPredicate implements SerializableReference<Predicate> { private static final long serialVersionUID = -625148437829360498L; private transient Predicate predicate; private final Class<?> declaringClass; public SerializableDeclaringClassPredicate(Class<?> declaringClass) { this.declaringClass = declaringClass; } public Predicate get() { if (predicate == null) { Method getDeclaringClassMethod = MethodUtils.getAccessibleMethod(Member.class, "getDeclaringClass", new Class<?>[0]); MethodInvokingTransformer member2NameTransformer = new MethodInvokingTransformer( getDeclaringClassMethod); Predicate propertyValuePredicate = AndPredicate .andPredicate(NotNullPredicate.notNullPredicate(), new EqualPredicate(declaringClass)); Predicate instance = TransformedPredicate.transformedPredicate(member2NameTransformer, propertyValuePredicate); Predicate memberNamePredicate = AndPredicate.andPredicate(NotNullPredicate.notNullPredicate(), instance); this.predicate = memberNamePredicate; } return predicate; } } return new SerializablePredicate(new SerializableDeclaringClassPredicate(declaringClass)); }
From source file:com.link_intersystems.lang.reflect.criteria.ClassCriteria.java
/** * * @param startAt// w ww . j a v a 2s . c o m * @param stopAt * @return an {@link Iterable} that iterates through the class hierarchy as * defined by this criteria starting at the given class and stopping * at the given class. * @throws NullArgumentException * if the stop class is not a superclass of the start class. * @since 1.0.0.0 */ public Iterable<Class<?>> getIterable(Class<?> startAt, Class<?> stopAt) { Assert.notNull("startAt", startAt); if (stopAt != null && !stopAt.isAssignableFrom(startAt)) { throw new IllegalArgumentException("stopAt " + stopAt + " must be a superclass of " + startAt); } class StartAtIterable implements Iterable<Class<?>> { private final Class<?> startAt; private final ObjectFactory<ClassCriteria> templateObjectFactory; public StartAtIterable(Class<?> startAt, ObjectFactory<ClassCriteria> classCriteria) { this.templateObjectFactory = classCriteria; this.startAt = startAt; } @SuppressWarnings({ "unchecked", "rawtypes" }) public Iterator<Class<?>> iterator() { ClassCriteria classCriteriaCopy = templateObjectFactory.getObject(); TraverseStrategy traverseStrategy = classCriteriaCopy.traverseStrategy; boolean separatedClassTypeTraversal = classCriteriaCopy.separatedClassTypeTraversal; Comparator<Class<?>> interfacesComparator = classCriteriaCopy.interfacesComparator; Comparator<Class<?>> innerClassesComparator = classCriteriaCopy.innerClassesComparator; ClassType[] classTypes = classCriteriaCopy.classTypes; ClassNode rootNode = new ClassNode(startAt, classTypes); rootNode.setInterfacesOrder(interfacesComparator); rootNode.setInnerClassesOrder(innerClassesComparator); class Node2ClassTransformer implements Transformer { public Object transform(Object input) { Node node = Node.class.cast(input); Object userObject = node.getUserObject(); Class<?> clazz = Class.class.cast(userObject); return clazz; } } Iterator<Node> classNodeIterator = null; Iterator classesIterator = null; if (separatedClassTypeTraversal) { NodeIterateStrategy nodeIterateStrategy = NodeIterateStrategy.valueOf(traverseStrategy.name()); Predicate[] nodeIteratePredicates = new Predicate[classTypes.length]; Node2ClassTransformer node2ClassTransformer = new Node2ClassTransformer(); for (int i = 0; i < classTypes.length; i++) { ClassType classType = classTypes[i]; ClassTypePredicate classTypePredicate = new ClassTypePredicate(classType); TransformedPredicate transformedPredicate = new TransformedPredicate(node2ClassTransformer, classTypePredicate); nodeIteratePredicates[i] = transformedPredicate; } classNodeIterator = GraphFacade.perPredicateNodeIterator(nodeIterateStrategy, rootNode, nodeIteratePredicates); classesIterator = IteratorUtils.transformedIterator(classNodeIterator, new Node2ClassTransformer()); } else { switch (classCriteriaCopy.traverseStrategy) { case BREADTH_FIRST: classNodeIterator = new BreadthFirstNodeIterator(rootNode); break; case DEPTH_FIRST: classNodeIterator = new DepthFirstNodeIterator(rootNode); break; } classesIterator = IteratorUtils.transformedIterator(classNodeIterator, new Node2ClassTransformer()); } ClassTypePredicate classTypePredicate = new ClassTypePredicate(classTypes); classesIterator = IteratorUtils.filteredIterator(classesIterator, classTypePredicate); classesIterator = classCriteriaCopy.applyTraverseClassesUniquely(classesIterator); classesIterator = classCriteriaCopy.applyStopAtFilter(classesIterator); classesIterator = classCriteriaCopy.applyElementFilter(classesIterator); classesIterator = classCriteriaCopy.applySelectionFilter(classesIterator); return classesIterator; } } return new StartAtIterable(startAt, getObjectFactory()); }