001/* 002@license.text@ 003 */ 004package com.hammurapi.common; 005 006import java.util.Iterator; 007 008import com.hammurapi.extract.Predicate; 009 010/** 011 * Execution context. 012 * @author Pavel Vlasov 013 * @version $Revision: 1.1 $ 014 */ 015public interface Context { 016 017 /** 018 * Context constructed from all available context services. 019 */ 020 Context INSTANCE = Util.loadContext(); 021 022 /** 023 * Looks up object by name. 024 * @param name Object name. 025 * @return named object or null. 026 */ 027 Object lookup(String name); 028 029 /** 030 * Looks up single object (service) by type. 031 * @param <T> Service type. 032 * @param serviceClass Requested service type. 033 * @param selectors Optional service selectors. If more than one, selectors are combined with AND. 034 * @return Service instance or null. 035 */ 036 <T> T lookup(Class<T> serviceClass, Predicate<T, Context>... selectors); 037 038 /** 039 * Looks up all services of given type. 040 * @param <T> Service type. 041 * @param serviceClass Requested service type. 042 * @param selectors Optional service selectors. If more than one, selectors are combined with AND. 043 * @return Iterator over services of requested type. 044 */ 045 <T> Iterator<T> lookupAll(Class<T> serviceClass, Predicate<T, Context>... selectors); 046}