001 package com.khubla.pragmatach.framework.controller;
002
003 import java.util.Hashtable;
004 import java.util.Set;
005
006 import javax.servlet.http.HttpSession;
007
008 import com.khubla.pragmatach.framework.annotation.Controller;
009 import com.khubla.pragmatach.framework.api.PragmatachException;
010
011 /**
012 * @author tome
013 */
014 public class SessionScopedControllers {
015 /***
016 * Session key for session scoped controllers
017 */
018 private static final String SESSION_CONTROLLERS = "Session-Scoped-Controllers";
019
020 /**
021 * get controller with clazz
022 */
023 public static PragmatachController getController(HttpSession httpSession, Class<?> clazz) {
024 final Hashtable<Class<?>, PragmatachController> map = getMap(httpSession);
025 return map.get(clazz);
026 }
027
028 /**
029 * get the map
030 */
031 @SuppressWarnings("unchecked")
032 public static Hashtable<Class<?>, PragmatachController> getMap(HttpSession httpSession) {
033 Hashtable<Class<?>, PragmatachController> controllers = (Hashtable<Class<?>, PragmatachController>) httpSession.getAttribute(SESSION_CONTROLLERS);
034 if (null == controllers) {
035 controllers = new Hashtable<Class<?>, PragmatachController>();
036 httpSession.setAttribute(SESSION_CONTROLLERS, controllers);
037 }
038 return controllers;
039 }
040
041 /**
042 * create instances of all session controllers and make sure they're in the map
043 */
044 public static void populateSessionControllers(HttpSession httpSession) throws PragmatachException {
045 try {
046 final Set<Class<?>> controllers = Controllers.getInstance().getControllers();
047 if (null != controllers) {
048 for (final Class<?> clazz : controllers) {
049 final Controller controller = clazz.getAnnotation(Controller.class);
050 if (controller.scope() == Controller.Scope.session) {
051 final PragmatachController pragmatachController = Controllers.getInstance(clazz);
052 SessionScopedControllers.setController(httpSession, pragmatachController);
053 }
054 }
055 }
056 } catch (final Exception e) {
057 throw new PragmatachException("Exception in populateSessionControllers", e);
058 }
059 }
060
061 /**
062 * set controller
063 */
064 public static void setController(HttpSession httpSession, PragmatachController pragmatachController) {
065 final Hashtable<Class<?>, PragmatachController> map = getMap(httpSession);
066 map.put(pragmatachController.getClass(), pragmatachController);
067 }
068 }