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
     1 package api;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collection;
     5 import java.util.HashSet;
     6 import java.util.List;
     7 import java.util.Set;
     8 
     9 /** Factory to create various types of lookup instances.
    10  *
    11  * @author Jaroslav Tulach <jtulach@netbeans.org>
    12  * @version 1.0
    13  */
    14 public final class Lookups {
    15     private Lookups() {
    16     }
    17     
    18     public static Lookup fixed(final Object... instances) {
    19         return new Lookup() {
    20             @Override
    21             public <T> T lookup(Class<T> clazz) {
    22                 for (Object obj : instances) {
    23                     if (clazz.isInstance(obj)) {
    24                         return clazz.cast(obj);
    25                     }
    26                 }
    27                 return null;
    28             }
    29 
    30             @Override
    31             public <T> Collection<? extends T> lookupAll(Class<T> clazz) {
    32                 List<T> result = new ArrayList<T>();
    33                 for (Object obj : instances) {
    34                     if (clazz.isInstance(obj)) {
    35                         result.add(clazz.cast(obj));
    36                     }
    37                 }
    38                 return result;
    39             }
    40 
    41             @Override
    42             public <T> Set<Class<? extends T>> lookupAllClasses(Class<T> clazz) {
    43                 Set<Class<? extends T>> result = new HashSet<Class<? extends T>>();
    44                 for (Object obj : instances) {
    45                     if (clazz.isInstance(obj)) {
    46                         result.add(obj.getClass().asSubclass(clazz));
    47                     }
    48                 }
    49                 return result;
    50             }
    51         };
    52     }
    53 }