samples/consistency/src-api1.0/api/Lookups.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:04:53 +0200
changeset 210 acf2c31e22d4
parent 209 1c999569643b
permissions -rw-r--r--
Merge: Geertjan's changes to the end of the chapter
jtulach@26
     1
package api;
jtulach@26
     2
jtulach@210
     3
import java.util.ArrayList;
jtulach@26
     4
import java.util.Collection;
jtulach@210
     5
import java.util.HashSet;
jtulach@210
     6
import java.util.List;
jtulach@26
     7
import java.util.Set;
jtulach@26
     8
jtulach@26
     9
/** Factory to create various types of lookup instances.
jtulach@26
    10
 *
jtulach@26
    11
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jtulach@26
    12
 * @version 1.0
jtulach@26
    13
 */
jtulach@26
    14
public final class Lookups {
jtulach@26
    15
    private Lookups() {
jtulach@26
    16
    }
jtulach@26
    17
    
jtulach@210
    18
    public static Lookup fixed(final Object... instances) {
jtulach@210
    19
        return new Lookup() {
jtulach@210
    20
            @Override
jtulach@210
    21
            public <T> T lookup(Class<T> clazz) {
jtulach@210
    22
                for (Object obj : instances) {
jtulach@210
    23
                    if (clazz.isInstance(obj)) {
jtulach@210
    24
                        return clazz.cast(obj);
jtulach@210
    25
                    }
jtulach@210
    26
                }
jtulach@210
    27
                return null;
jtulach@210
    28
            }
jtulach@210
    29
jtulach@210
    30
            @Override
jtulach@210
    31
            public <T> Collection<? extends T> lookupAll(Class<T> clazz) {
jtulach@210
    32
                List<T> result = new ArrayList<T>();
jtulach@210
    33
                for (Object obj : instances) {
jtulach@210
    34
                    if (clazz.isInstance(obj)) {
jtulach@210
    35
                        result.add(clazz.cast(obj));
jtulach@210
    36
                    }
jtulach@210
    37
                }
jtulach@210
    38
                return result;
jtulach@210
    39
            }
jtulach@210
    40
jtulach@210
    41
            @Override
jtulach@210
    42
            public <T> Set<Class<? extends T>> lookupAllClasses(Class<T> clazz) {
jtulach@210
    43
                Set<Class<? extends T>> result = new HashSet<Class<? extends T>>();
jtulach@210
    44
                for (Object obj : instances) {
jtulach@210
    45
                    if (clazz.isInstance(obj)) {
jtulach@210
    46
                        result.add(obj.getClass().asSubclass(clazz));
jtulach@210
    47
                    }
jtulach@210
    48
                }
jtulach@210
    49
                return result;
jtulach@210
    50
            }
jtulach@210
    51
        };
jtulach@26
    52
    }
jtulach@26
    53
}