samples/consistency/src-api2.0/api/Lookup.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:04:08 +0200
changeset 200 c2f0f73f0e02
parent 199 ef3e24d5cb1c
child 209 1c999569643b
permissions -rw-r--r--
Shortening long line
jtulach@26
     1
package api;
jtulach@26
     2
jtulach@199
     3
import java.util.ArrayList;
jtulach@26
     4
import java.util.Collection;
jtulach@199
     5
import java.util.Collections;
jtulach@199
     6
import java.util.HashSet;
jtulach@199
     7
import java.util.Iterator;
jtulach@199
     8
import java.util.List;
jtulach@26
     9
import java.util.Set;
jtulach@26
    10
jtulach@26
    11
/** Simplified version of NetBeans 
jtulach@26
    12
 * <a href="http://bits.netbeans.org/6.0/javadoc/org-openide-util/org/openide/util/Lookup.html">Lookup</a>
jtulach@26
    13
 * reimplemented to separate the API for clients
jtulach@26
    14
 * from the API for implementators while guaranteeing
jtulach@26
    15
 * consistency among all there methods.
jtulach@26
    16
 *
jtulach@26
    17
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jtulach@26
    18
 * @version 2.0
jtulach@26
    19
 */
jtulach@26
    20
// BEGIN: design.consistency.2.0
jtulach@199
    21
public abstract class Lookup {
jtulach@199
    22
    /** only for classes in the same package */
jtulach@26
    23
    Lookup() {
jtulach@26
    24
    }
jtulach@26
    25
    
jtulach@26
    26
    // BEGIN: design.consistency.lookup.2.0
jtulach@26
    27
    public <T> T lookup(Class<T> clazz) {
jtulach@199
    28
        Iterator<T> it = doLookup(clazz);
jtulach@199
    29
        return it.hasNext() ? it.next() : null;
jtulach@26
    30
    }
jtulach@26
    31
    // END: design.consistency.lookup.2.0
jtulach@26
    32
jtulach@26
    33
    // BEGIN: design.consistency.lookupAll.2.0
jtulach@26
    34
    public <T> Collection<? extends T> lookupAll(Class<T> clazz) {
jtulach@199
    35
        Iterator<T> it = doLookup(clazz);
jtulach@199
    36
        if (!it.hasNext()) {
jtulach@199
    37
            return Collections.emptyList();
jtulach@199
    38
        } else {
jtulach@199
    39
            List<T> result = new ArrayList<T>();
jtulach@199
    40
            while (it.hasNext()) {
jtulach@199
    41
                result.add(it.next());
jtulach@199
    42
            }
jtulach@199
    43
            return result;
jtulach@199
    44
        }
jtulach@26
    45
    }
jtulach@26
    46
    // END: design.consistency.lookupAll.2.0
jtulach@26
    47
jtulach@26
    48
    // BEGIN: design.consistency.lookupAllClasses.2.0
jtulach@26
    49
    public <T> Set<Class<? extends T>> lookupAllClasses(Class<T> clazz) {
jtulach@199
    50
        Iterator<T> it = doLookup(clazz);
jtulach@199
    51
        if (!it.hasNext()) {
jtulach@199
    52
            return Collections.emptySet();
jtulach@199
    53
        } else {
jtulach@200
    54
            Set<Class<? extends T>> result = 
jtulach@200
    55
                new HashSet<Class<? extends T>>();
jtulach@199
    56
            while (it.hasNext()) {
jtulach@199
    57
                result.add(it.next().getClass().asSubclass(clazz));
jtulach@199
    58
            }
jtulach@199
    59
            return result;
jtulach@199
    60
        }
jtulach@26
    61
    }
jtulach@26
    62
    // END: design.consistency.lookupAllClasses.2.0
jtulach@199
    63
// FINISH: design.consistency.2.0
jtulach@199
    64
    
jtulach@199
    65
    abstract <T> Iterator<T> doLookup(Class<T> clazz);
jtulach@26
    66
}