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 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: }