/******************************************************************************* * Copyright (c) 2009 Daniel Grout. * * GNU GENERAL PUBLIC LICENSE - Version 3 * * This file is part of Report Runner (http://code.google.com/p/reportrunner). * * Report Runner is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Report Runner is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Report Runner. If not, see <http://www.gnu.org/licenses/>. * * Module: StandardRunnerAction.java ******************************************************************************/ package binky.reportrunner.ui.actions.base; import java.util.List; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.SessionAware; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import binky.reportrunner.data.RunnerGroup; import binky.reportrunner.data.RunnerUser; import binky.reportrunner.ui.Statics; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public abstract class StandardRunnerAction extends ActionSupport implements ServletRequestAware, SessionAware { protected Map<String, Object> sessionData; protected String groupName; private String themeName; public void setSession(Map<String, Object> sessionData) { this.sessionData = sessionData; } private static final long serialVersionUID = -5701712982967708713L; public abstract String execute() throws Exception; private HttpServletRequest request; protected Locale getRequestLocale() { return request.getLocale(); } public final RunnerUser getSessionUser() { // hack to deal with thread local issues RunnerUser user; if ((ActionContext.getContext() == null) || (ActionContext.getContext().getSession() == null)) { user = (RunnerUser) sessionData.get(Statics.USER_HANDLE); } else { user = (RunnerUser) ActionContext.getContext().getSession().get( Statics.USER_HANDLE); sessionData.put(Statics.USER_HANDLE, user); } return user; } public final List<RunnerGroup> getSessionGroups() { // hack to deal with thread local issues List<RunnerGroup> groups; if ((ActionContext.getContext() == null) || (ActionContext.getContext().getSession() == null)) { groups = ( List<RunnerGroup> ) sessionData.get(Statics.GROUPS_HANDLE); } else { groups = ( List<RunnerGroup> ) ActionContext.getContext().getSession().get( Statics.GROUPS_HANDLE); sessionData.put(Statics.GROUPS_HANDLE, groups); } return groups; } public final String getSessionUserName() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth!=null) { return auth.getName(); } else { RunnerUser user = getSessionUser(); if (user!=null) { return user.getUsername(); } else { return null; } } } public long getRandomNumber() { return Math.round(Math.random()*100000000); } public final String getActionName() { return this.getClass().getName(); } public final boolean doesUserHaveGroup(String groupName) { if (getSessionUser() == null) return false; if (getSessionUser().getIsAdmin()) { return true; } else { for (RunnerGroup g : getSessionGroups()) { if (g.getGroupName().equals(groupName)) return true; } return false; } } public final boolean isUserReadOnly() { if (getSessionUser().getIsAdmin()) { return false; } else { return getSessionUser().getIsReadOnly(); } } public List<RunnerGroup> getGroups() { return this.getSessionGroups(); } protected boolean isStringPopulated(String value) { if (value != null) { if (value.trim().isEmpty()) { return false; } else { return true; } } else { return false; } } public final String getCurrentGroupName() { return groupName; } public final String getGroupName() { return groupName; } public final void setGroupName(String groupName) { this.groupName = groupName; } public void setServletRequest(HttpServletRequest request){ this.request = request; } public HttpServletRequest getServletRequest(){ return request; } public String getThemeName() { return themeName; } public void setThemeName(String themeName) { this.themeName = themeName; } }