package org.eh.core.annotation;
import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.eh.core.common.Constants;
/**
* 注解处理类
* @author guojing
* @date 2014-3-5
*/
public class AnnocationHandler {
/**
* 将所有注解Controller加入Constants.UrlClassMap
* @param parkage 类名(包含包路径)
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public void paserControllerAnnocation(String parkage) throws ClassNotFoundException {
List<String> classlist = getPkgClass(parkage);
for (String str : classlist) {
Class c = Class.forName(str);
if (c.isAnnotationPresent(Controller.class)) {
Controller desc = (Controller) c.getAnnotation(Controller.class);
Constants.UrlClassMap.put(desc.url(), str);
}
}
}
/**
* 获取指定包下的所有类名(包含包名)
* @param parkage 指定包名
* @return
*/
public List<String> getPkgClass(String parkage) {
String path = Constants.CLASS_PATH + parkage.replace(".", "/") + "/";
List<String> list = new ArrayList<String>();
File file = new File(path);
for (String str : file.list()) {
if (str.endsWith(".class")) {
list.add(parkage + "." + str.replace(".class", ""));
} else if (str.indexOf(".") == -1) {
list.addAll(getPkgClass(parkage + "." + str));
}
}
return list;
}
/**
* 获取类的指定方法
* @param c
* @param methodName
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public Method getMethod(Class c, String methodName) throws NoSuchMethodException,
SecurityException {
Method method = c.getMethod(methodName, Map.class);
return method.isAnnotationPresent(RequestMapping.class) ? method : null;
}
}