Example usage for org.apache.commons.collections4.functors TransformedPredicate TransformedPredicate

List of usage examples for org.apache.commons.collections4.functors TransformedPredicate TransformedPredicate

Introduction

In this page you can find the example usage for org.apache.commons.collections4.functors TransformedPredicate TransformedPredicate.

Prototype

public TransformedPredicate(final Transformer<? super T, ? extends T> transformer,
        final Predicate<? super T> predicate) 

Source Link

Document

Constructor that performs no validation.

Usage

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());
}