Author: tchemit Date: 2012-08-13 16:03:06 +0200 (Mon, 13 Aug 2012) New Revision: 3605 Url: http://chorem.org/repositories/revision/pollen/3605 Log: make PollenSession Serializable Modified: trunk/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java Modified: trunk/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java =================================================================== --- trunk/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java 2012-08-13 14:02:08 UTC (rev 3604) +++ trunk/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java 2012-08-13 14:03:06 UTC (rev 3605) @@ -32,6 +32,7 @@ import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import java.io.Serializable; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -42,7 +43,7 @@ * @author tchemit <chemit@codelutin.com> * @since 1.3 */ -public class PollenSession { +public class PollenSession implements Serializable { /** Logger. */ private static final Log log = LogFactory.getLog(PollenSession.class); @@ -56,6 +57,8 @@ public static final String SESSION_TOKEN_WARNINGS = "warnings"; + private static final long serialVersionUID = -1L; + public static PollenSession get(ServletRequest servletRequest) { HttpSession httpSession = ((HttpServletRequest) servletRequest).getSession(true); PollenSession pollenSession = (PollenSession) httpSession.getAttribute(SESSION_PARAMETER); @@ -90,7 +93,7 @@ private UserAccount userAccount; /** To push dynamic data which should be consumed in a page scope. */ - private Map<String, Object> dynamicData; + private Map<String, Serializable> dynamicData; public UserAccount getUserAccount() { return userAccount; @@ -100,20 +103,40 @@ this.userAccount = userAccount; } - public <T> T getDynamicData(String token) { - Object result = getDynamicData().get(token); + public <T extends Serializable> T getDynamicData(String token) { + Serializable result = getDynamicData().get(token); return (T) result; } - public <T> T consumeDynamicData(String token) { - Object result = getDynamicData().get(token); + public <T extends Serializable> List<T> getDynamicListData(String token) { + Serializable result = getDynamicData().get(token); + return (List<T>) result; + } + + public <T extends Serializable> T consumeDynamicData(String token) { + T result = getDynamicData(token); if (result != null) { removeDynamicData(token); } - return (T) result; + return result; } - public void putDynamicData(String token, Object data) { + public <T extends Serializable> List<T> consumeDynamicListData(String token) { + List<T> result = getDynamicListData(token); + if (result != null) { + removeDynamicData(token); + } + return result; + } + + public <T extends Serializable> void putDynamicListData(String token, List<T> data) { + getDynamicData().put(token, (Serializable) data); + if (log.isDebugEnabled()) { + log.debug("Dynamic attributes size : " + getDynamicData().size()); + } + } + + public void putDynamicData(String token, Serializable data) { getDynamicData().put(token, data); if (log.isDebugEnabled()) { log.debug("Dynamic attributes size : " + getDynamicData().size()); @@ -136,7 +159,7 @@ } } - protected Map<String, Object> getDynamicData() { + protected Map<String, Serializable> getDynamicData() { if (dynamicData == null) { dynamicData = Maps.newHashMap(); } @@ -144,20 +167,20 @@ } public void addMessage(String messageScope, String message) { - List<String> messages = getDynamicData(messageScope); + List<String> messages = getDynamicListData(messageScope); if (messages == null) { messages = Lists.newArrayList(message); - putDynamicData(messageScope, messages); + putDynamicListData(messageScope, messages); } else { messages.add(message); } } public void removeDynamicDataWithPrefix(String prefix) { - Iterator<Map.Entry<String, Object>> itr = + Iterator<Map.Entry<String, Serializable>> itr = getDynamicData().entrySet().iterator(); while (itr.hasNext()) { - Map.Entry<String, Object> entry = itr.next(); + Map.Entry<String, Serializable> entry = itr.next(); if (entry.getKey().startsWith(prefix)) { itr.remove(); }