package org.etk.java5.reflection.test; import java.util.Map; import org.etk.reflect.api.ClassTypeInfo; import org.etk.reflect.api.MethodInfo; import org.etk.reflect.api.TypeInfo; import org.etk.reflect.api.TypeResolver; import org.etk.reflect.core.AnnotationType; public class TypeDomain<T> { /** . */ private TypeResolver<T> domain; /** . */ private Map<String, T> types; public TypeDomain(TypeResolver<T> domain, Map<String, T> types) { this.domain = domain; this.types = types; } protected final TypeInfo getTypeInfo(String typeId) { T type = types.get(typeId); if (type == null) { throw new IllegalArgumentException("Could not find type " + typeId); } return getInfo(type); } private TypeInfo getInfo(T type) { return domain.resolve(type); } public MethodInfo getMethodInfo(String id) { for (T type : types.values()) { TypeInfo ti = domain.resolve(type); if (ti instanceof ClassTypeInfo) { for (MethodInfo mi : ((ClassTypeInfo)ti).getDeclaredMethods()) { org.etk.java5.reflection.test.Method methodAnnocation = mi.getDeclaredAnnotation(AnnotationType.get(org.etk.java5.reflection.test.Method.class)); if (methodAnnocation != null && methodAnnocation.value().equals(id)) { return mi; } } } } return null; } }