samples/consistency/src-api2.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.Iterator;
     6 import java.util.Set;
     7 
     8 /** Factory to create various types of lookup instances.
     9  *
    10  * @author Jaroslav Tulach <jtulach@netbeans.org>
    11  * @version 2.0
    12  */
    13 public final class Lookups {
    14     private Lookups() {
    15     }
    16     
    17     public static Lookup fixed(final Object... instances) {
    18         return new Lookup() {
    19             @Override
    20             <T> Iterator<T> doLookup(Class<T> clazz) {
    21                 ArrayList<T> result = new ArrayList<T>();
    22                 for (Object obj : instances) {
    23                     if (clazz.isInstance(obj)) {
    24                         result.add(clazz.cast(obj));
    25                     }
    26                 }
    27                 return result.iterator();
    28             }
    29         };
    30     }
    31     
    32     public static Lookup dynamic(final Dynamic provider) {
    33         return new Lookup() {
    34             @Override
    35             <T> Iterator<T> doLookup(Class<T> clazz) {
    36                 ArrayList<T> result = new ArrayList<T>();
    37                 provider.computeInstances(clazz, result);
    38                 return result.iterator();
    39             }
    40         };
    41     }
    42     
    43     public interface Dynamic {
    44         public <T> void computeInstances(Class<T> requestedType, Collection<? super T> addInstancesTo);
    45     }
    46 }