WebJETActionBean.java
package sk.iway.iwcm.system.stripes;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
import net.sourceforge.stripes.action.After;
import net.sourceforge.stripes.action.Before;
import net.sourceforge.stripes.controller.LifecycleStage;
import net.sourceforge.stripes.controller.StripesRequestWrapper;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.PageParams;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.users.UsersDB;
/**
* WebJETActionBean.java - supertrieda pre standardne Stripes Action Beany
*
*@Title webjet4
*@Company Interway s.r.o. (www.interway.sk)
*@Copyright Interway s.r.o. (c) 2001-2008
*@author $Author: jeeff $
*@version $Revision: 1.2 $
*@created Date: 3.3.2008 17:20:16
*@modified $Date: 2008/12/11 08:49:57 $
*/
public class WebJETActionBean implements ActionBean
{
public static final String RESOLUTION_CLOSE = "/components/reloadParentClose.jsp";
public static final String RESOLUTION_CONTINUE = "/components/maybeError.jsp";
public static final String RESOLUTION_NOT_LOGGED = "/components/maybeError.jsp";
public static final String RESOLUTION_CSRF = "/components/csrfError.jsp";
protected ActionBeanContext context;
/**
* Vrati true, ak je prihlaseny administrator
* @return
*/
public boolean isAdminLogged()
{
Identity user = (Identity) getRequest().getSession().getAttribute(Constants.USER_KEY);
if (user != null && user.isAdmin()) return true;
getRequest().setAttribute("errorText", Prop.getInstance(getRequest()).getText("error.userNotLogged"));
return false;
}
/**
* Vrati true, ak je prihlaseny administrator a ma povoleny dany modul
* @param module
* @return
*/
public boolean isAdminLoggedWithPerms(String module)
{
Identity user = (Identity) getRequest().getSession().getAttribute(Constants.USER_KEY);
if (user != null && user.isAdmin() && user.isEnabledItem(module)) return true;
getRequest().setAttribute("errorText", Prop.getInstance(getRequest()).getText("error.userNotLogged"));
return false;
}
/**
* Vrati true ak je prihlaseny akykolvek user (navstevnik stranky)
* @return
*/
public boolean isAnyUserLogged()
{
Identity user = (Identity) getRequest().getSession().getAttribute(Constants.USER_KEY);
if (user != null) return true;
getRequest().setAttribute("errorText", Prop.getInstance(getRequest()).getText("error.userNotLogged"));
return false;
}
public void setErrorText(String text)
{
getRequest().setAttribute("errorText", text);
}
public HttpServletRequest getRequest()
{
return context.getRequest();
}
public HttpSession getSession()
{
return context.getRequest().getSession();
}
public Identity getCurrentUser()
{
return UsersDB.getCurrentUser(context);
}
@Override
public ActionBeanContext getContext()
{
return context;
}
@Override
public void setContext(ActionBeanContext context)
{
this.context = context;
}
private static Map<Class<? extends ActionBean>, List<String>> includeParamsOnly = new HashMap<Class<? extends ActionBean>, List<String>>();
/**
* vykona sa pri kazdom requeste pred BindingAndValidation stage a v pripade ze je actionBean anotovana InjectPageParams,
* zabezpeci zabalenie povodneho requestu do specialneho-vyčuraného requestu, ktory podsunie pageparams ako parametre requestu
* zaroven zabezpeci ze nieje mozne poslat ako parameter actionbeane taky ktory ma rovnaky nazov ako atribut actionbeany, anotovany
* //
*/
@Before(stages={LifecycleStage.BindingAndValidation})
public void prepareIncludeRequestWrapper()
{
//,sk.iway.iwcm.stripes.include.IncludePageParamsInterceptor
HttpServletRequest request = context.getRequest();
// ak mam nejake pageParams
if (request.getAttribute("includePageParams")!= null || Tools.isNotEmpty(request.getParameter("__ppState")))
{
//ziskam si mapu params
PageParams pp = new PageParams(request);
Map<String, String> includeParams = pp.getParams();
// najdem StripesRequestWrapper (ten moze byt niekde v request wrapperoch)
StripesRequestWrapper stripesWrapper = StripesRequestWrapper.findStripesWrapper(request);
//nemal by byt null, kedze ide o stripes RQ, ale istota je gulomet a zaroven actionBeana je anotovana @InjectPageParams
if (stripesWrapper!=null && getClass().isAnnotationPresent(BindPageParams.class))
{
HttpServletRequest originalRequest = (HttpServletRequest) stripesWrapper.getRequest();
Class<? extends ActionBean> actionBeanClass = getClass();
// ziskam si zoznam poli anotovanych PageParamOnly, bud uz ziskane z mapy, alebo prebehnem actionbean classu
List<String> paramNames = null;
if (includeParamsOnly.containsKey(actionBeanClass))
{
paramNames = includeParamsOnly.get(actionBeanClass);
}
else
{
paramNames = new ArrayList<String>();
Class<?> clazz = getClass();
do
{
for (Field field : clazz.getDeclaredFields())
{
if (field.isAnnotationPresent(PageParamOnly.class))
{
paramNames.add(field.getName());
}
}
clazz = clazz.getSuperclass();
} while (clazz != null);
includeParamsOnly.put(actionBeanClass, paramNames);
}
// vytvorim si novy rq wrapper (na tento ucel pripraveny)
IncludePageParamsRequestWrapper includePPRequestWrapper = new IncludePageParamsRequestWrapper(originalRequest, includeParams, paramNames);
// a ten pridam az do striper rq wrappera, aby binding zohladnoval pageParams
stripesWrapper.setRequest(includePPRequestWrapper);
}
}
}
/**
* odstrani IncludePageParamsRequestWrapper z stripesrequestu aby v dalsom vykonavani uz nezavadzal
*/
@After(stages={LifecycleStage.BindingAndValidation})
public void removeIncludeRequestWrapper()
{
HttpServletRequest request = context.getRequest();
StripesRequestWrapper stripesWrapper = StripesRequestWrapper.findStripesWrapper(request);
if (stripesWrapper!=null)
{
ServletRequest maybeIncludeRQW = stripesWrapper.getRequest();
// zistim ci je to instancia includeReqWrappera, ak ano odstranim ju
if (maybeIncludeRQW instanceof IncludePageParamsRequestWrapper)
{
IncludePageParamsRequestWrapper includeRQW = (IncludePageParamsRequestWrapper)maybeIncludeRQW;
ServletRequest originalRequest = includeRQW.getRequest();
stripesWrapper.setRequest(originalRequest);
}
}
}
}