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