package com.aggrepoint.winlet;
import java.util.HashMap;
import javax.servlet.http.HttpSession;
/**
*
* @author Jiangming Yang (yangjm@gmail.com)
*/
public class SharedPageStorageImpl implements SharedPageStorage {
HashMap<Object, Object> pageSession = null;
HashMap<Object, Object> pageRefreshSession = null;
public static final String PAGE_SESSION_KEY = "com.aggrepoint.page";
public static final String REFRESH_PREFIX = "REFRESH_";
protected SharedPageStorageImpl(ReqInfo reqInfo) {
HttpSession session = reqInfo.getSession();
synchronized (session) {
@SuppressWarnings("unchecked")
HashMap<String, HashMap<Object, Object>> htByPage = (HashMap<String, HashMap<Object, Object>>) session
.getAttribute(PAGE_SESSION_KEY);
if (htByPage == null) {
htByPage = new HashMap<String, HashMap<Object, Object>>();
session.setAttribute(PAGE_SESSION_KEY, htByPage);
}
pageSession = htByPage.get(reqInfo.getPageId());
if (pageSession == null) {
pageSession = new HashMap<Object, Object>();
htByPage.put(reqInfo.getPageId(), pageSession);
}
pageRefreshSession = htByPage.get(REFRESH_PREFIX
+ reqInfo.getPageId());
if (pageRefreshSession == null) {
pageRefreshSession = new HashMap<Object, Object>();
htByPage.put(REFRESH_PREFIX + reqInfo.getPageId(),
pageRefreshSession);
}
}
}
@SuppressWarnings("unchecked")
@Override
public <T> T getAttribute(Object obj) {
T t = (T) pageSession.get(obj);
return t == null ? (T) pageRefreshSession.get(obj) : t;
}
@Override
public void setAttribute(Object key, Object value) {
setAttribute(key, value, false);
}
@Override
public synchronized void setAttribute(Object key, Object value,
boolean clearOnRefresh) {
removeAttribute(key);
if (value == null)
return;
if (clearOnRefresh)
pageRefreshSession.put(key, value);
else
pageSession.put(key, value);
}
@Override
public synchronized void removeAttribute(Object key) {
pageSession.remove(key);
pageRefreshSession.remove(key);
}
@Override
public void refresh() {
pageRefreshSession.clear();
}
}