001 package com.khubla.pragmatach.framework.controller;
002
003 import java.lang.reflect.Method;
004 import java.util.HashSet;
005 import java.util.Set;
006
007 import org.slf4j.Logger;
008 import org.slf4j.LoggerFactory;
009
010 import com.khubla.pragmatach.framework.annotation.Controller;
011 import com.khubla.pragmatach.framework.annotation.Route;
012 import com.khubla.pragmatach.framework.api.PragmatachException;
013 import com.khubla.pragmatach.framework.scanner.AnnotationScanner;
014
015 /**
016 * @author tome
017 */
018 public class ControllerClasses {
019 /**
020 * logger
021 */
022 private static Logger logger = LoggerFactory.getLogger(ControllerClasses.class);
023 /**
024 * routes
025 */
026 private static Set<Method> routerMethods = new HashSet<Method>();
027 /**
028 * controllers
029 */
030 private static Set<Class<?>> controllers = new HashSet<Class<?>>();
031
032 /**
033 * do the annotations scan
034 */
035 public static void buildDB() throws PragmatachException {
036 try {
037 /*
038 * controllers
039 */
040 final Set<Class<?>> annotatedControllers = AnnotationScanner.getAllClasses(Controller.class);
041 for (final Class<?> clazz : annotatedControllers) {
042 controllers.add(clazz);
043 logger.info("Found controller '" + clazz.getName() + "'");
044 }
045 /*
046 * routes
047 */
048 final Set<Class<?>> controllersWithRoutes = AnnotationScanner.getAllClasses(Route.class);
049 for (final Class<?> clazz : controllersWithRoutes) {
050 final Method[] methods = clazz.getMethods();
051 if (null != methods) {
052 for (final Method method : methods) {
053 if (method.isAnnotationPresent(Route.class)) {
054 if (method.isAnnotationPresent(Route.class)) {
055 routerMethods.add(method);
056 logger.info("Found router method '" + method.getDeclaringClass().getName() + ":" + method.getName() + "' with route specification '" + method.getAnnotation(Route.class).uri()
057 + "'");
058 }
059 }
060 }
061 }
062 }
063 } catch (final Exception e) {
064 throw new PragmatachException("Exception in processAnnotations", e);
065 }
066 }
067
068 public static Set<Class<?>> getControllers() {
069 return controllers;
070 }
071
072 public static Set<Method> getRouterMethods() {
073 return routerMethods;
074 }
075
076 public static void setControllers(Set<Class<?>> controllers) {
077 ControllerClasses.controllers = controllers;
078 }
079
080 public static void setRouterMethods(Set<Method> routerMethods) {
081 ControllerClasses.routerMethods = routerMethods;
082 }
083 }