jtulach@26: package api;
jtulach@26:
jtulach@210: import java.util.ArrayList;
jtulach@26: import java.util.Collection;
jtulach@210: import java.util.Collections;
jtulach@210: import java.util.HashSet;
jtulach@210: import java.util.Iterator;
jtulach@210: import java.util.List;
jtulach@26: import java.util.Set;
jtulach@26:
jtulach@26: /** Simplified version of NetBeans
jtulach@26: * Lookup
jtulach@26: * reimplemented to separate the API for clients
jtulach@26: * from the API for implementators while guaranteeing
jtulach@26: * consistency among all there methods.
jtulach@26: *
jtulach@26: * @author Jaroslav Tulach
jtulach@26: * @version 2.0
jtulach@26: */
jtulach@26: // BEGIN: design.consistency.2.0
jtulach@210: public abstract class Lookup {
jtulach@210: /** only for classes in the same package */
jtulach@26: Lookup() {
jtulach@26: }
jtulach@26:
jtulach@26: // BEGIN: design.consistency.lookup.2.0
jtulach@26: public T lookup(Class clazz) {
jtulach@210: Iterator it = doLookup(clazz);
jtulach@210: return it.hasNext() ? it.next() : null;
jtulach@26: }
jtulach@26: // END: design.consistency.lookup.2.0
jtulach@26:
jtulach@26: // BEGIN: design.consistency.lookupAll.2.0
jtulach@26: public Collection extends T> lookupAll(Class clazz) {
jtulach@210: Iterator it = doLookup(clazz);
jtulach@210: if (!it.hasNext()) {
jtulach@210: return Collections.emptyList();
jtulach@210: } else {
jtulach@210: List result = new ArrayList();
jtulach@210: while (it.hasNext()) {
jtulach@210: result.add(it.next());
jtulach@210: }
jtulach@210: return result;
jtulach@210: }
jtulach@26: }
jtulach@26: // END: design.consistency.lookupAll.2.0
jtulach@26:
jtulach@26: // BEGIN: design.consistency.lookupAllClasses.2.0
jtulach@26: public Set> lookupAllClasses(Class clazz) {
jtulach@210: Iterator it = doLookup(clazz);
jtulach@210: if (!it.hasNext()) {
jtulach@210: return Collections.emptySet();
jtulach@210: } else {
jtulach@210: Set> result =
jtulach@210: new HashSet>();
jtulach@210: while (it.hasNext()) {
jtulach@210: result.add(it.next().getClass().asSubclass(clazz));
jtulach@210: }
jtulach@210: return result;
jtulach@210: }
jtulach@26: }
jtulach@26: // END: design.consistency.lookupAllClasses.2.0
jtulach@210: // FINISH: design.consistency.2.0
jtulach@210:
jtulach@210: abstract Iterator doLookup(Class clazz);
jtulach@26: }