package ilarkesto.core.scope; import ilarkesto.core.base.Str; import ilarkesto.core.logging.Log; import java.util.List; public abstract class Scope { static Log log = Log.get(Scope.class); /** * Gets an initialized component by name. */ public abstract Object getComponent(String name); public abstract List getAllComponents(); public abstract <T> T putComponent(String name, T component); public String getName() { return Str.getSimpleName(getClass()); } @Override public String toString() { return getName(); } // --- helper --- public <T> T putComponent(T component) { if (component == null) throw new IllegalArgumentException("component == null"); return putComponent(ScopeUtil.getComponentName(component.getClass()), component); } public <T> T getComponent(Class<T> type) { String name = ScopeUtil.getComponentName(type); return (T) getComponent(name); } public static Scope get() { return ScopeManager.getInstance().getScope(); } }