samples/consistency/src-api2.0/api/Lookup.java
changeset 210 acf2c31e22d4
parent 209 1c999569643b
     1.1 --- a/samples/consistency/src-api2.0/api/Lookup.java	Sat Jun 14 10:04:51 2008 +0200
     1.2 +++ b/samples/consistency/src-api2.0/api/Lookup.java	Sat Jun 14 10:04:53 2008 +0200
     1.3 @@ -1,6 +1,11 @@
     1.4  package api;
     1.5  
     1.6 +import java.util.ArrayList;
     1.7  import java.util.Collection;
     1.8 +import java.util.Collections;
     1.9 +import java.util.HashSet;
    1.10 +import java.util.Iterator;
    1.11 +import java.util.List;
    1.12  import java.util.Set;
    1.13  
    1.14  /** Simplified version of NetBeans 
    1.15 @@ -13,26 +18,49 @@
    1.16   * @version 2.0
    1.17   */
    1.18  // BEGIN: design.consistency.2.0
    1.19 -public final class Lookup {
    1.20 +public abstract class Lookup {
    1.21 +    /** only for classes in the same package */
    1.22      Lookup() {
    1.23      }
    1.24      
    1.25      // BEGIN: design.consistency.lookup.2.0
    1.26      public <T> T lookup(Class<T> clazz) {
    1.27 -        return null;
    1.28 +        Iterator<T> it = doLookup(clazz);
    1.29 +        return it.hasNext() ? it.next() : null;
    1.30      }
    1.31      // END: design.consistency.lookup.2.0
    1.32  
    1.33      // BEGIN: design.consistency.lookupAll.2.0
    1.34      public <T> Collection<? extends T> lookupAll(Class<T> clazz) {
    1.35 -        return null;
    1.36 +        Iterator<T> it = doLookup(clazz);
    1.37 +        if (!it.hasNext()) {
    1.38 +            return Collections.emptyList();
    1.39 +        } else {
    1.40 +            List<T> result = new ArrayList<T>();
    1.41 +            while (it.hasNext()) {
    1.42 +                result.add(it.next());
    1.43 +            }
    1.44 +            return result;
    1.45 +        }
    1.46      }
    1.47      // END: design.consistency.lookupAll.2.0
    1.48  
    1.49      // BEGIN: design.consistency.lookupAllClasses.2.0
    1.50      public <T> Set<Class<? extends T>> lookupAllClasses(Class<T> clazz) {
    1.51 -        return null;
    1.52 +        Iterator<T> it = doLookup(clazz);
    1.53 +        if (!it.hasNext()) {
    1.54 +            return Collections.emptySet();
    1.55 +        } else {
    1.56 +            Set<Class<? extends T>> result = 
    1.57 +                new HashSet<Class<? extends T>>();
    1.58 +            while (it.hasNext()) {
    1.59 +                result.add(it.next().getClass().asSubclass(clazz));
    1.60 +            }
    1.61 +            return result;
    1.62 +        }
    1.63      }
    1.64      // END: design.consistency.lookupAllClasses.2.0
    1.65 +// FINISH: design.consistency.2.0
    1.66 +    
    1.67 +    abstract <T> Iterator<T> doLookup(Class<T> clazz);
    1.68  }
    1.69 -// END: design.consistency.2.0
    1.70 \ No newline at end of file