ViewIssueActivityAction.java
- package org.itracker.web.actions.project;
- import org.apache.log4j.Logger;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import org.itracker.model.*;
- import org.itracker.model.util.IssueUtilities;
- import org.itracker.model.util.UserUtilities;
- import org.itracker.services.IssueService;
- import org.itracker.web.actions.base.ItrackerBaseAction;
- import org.itracker.web.util.LoginUtilities;
- import org.itracker.web.util.RequestHelper;
- import org.itracker.web.util.ServletContextUtils;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.util.*;
- /**
- * @author ranks
- */
- public class ViewIssueActivityAction extends ItrackerBaseAction {
- private static final Logger log = Logger
- .getLogger(ViewIssueActivityAction.class);
- /**
- * executes this struts-actions processing
- */
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- if (log.isDebugEnabled()) {
- log.debug("execute: called");
- }
- IssueService issueService = ServletContextUtils.getItrackerServices().getIssueService();
- ActionForward ret = checkPermission(request, issueService, mapping);
- if (null != ret) {
- if (log.isDebugEnabled()) {
- log.debug("checkPermission: user has no permission, forwarding to " + ret);
- }
- return ret;
- }
- Map<IssueActivity, String> activities = prepareActivitiesMap(issueService, request);
- if (log.isDebugEnabled()) {
- log.debug("execute: preparing with activities: " + activities);
- }
- setupJspEnv(request, activities);
- if (log.isDebugEnabled()) {
- log.debug("execute: forwarding to " + mapping.findForward("viewissueactivity"));
- }
- return mapping.findForward("viewissueactivity");
- }
- /**
- * check if user can view the issue-activites for the requested issue
- *
- * @return ActionForward: not-null if access is denied, null if user is granted to see issue activities
- */
- private ActionForward checkPermission(HttpServletRequest request, IssueService issueService, ActionMapping mapping) {
- final Map<Integer, Set<PermissionType>> permissions = RequestHelper
- .getUserPermissions(request.getSession());
- User user = RequestHelper.getCurrentUser(request.getSession());
- Integer issueId = getIssueId(request);
- Project project = issueService.getIssueProject(issueId);
- User owner = issueService.getIssueOwner(issueId);
- User creator = issueService.getIssueCreator(issueId);
- if ((project == null ||
- (!UserUtilities.hasPermission(permissions, project.getId(), PermissionType.ISSUE_VIEW_ALL)
- && !(UserUtilities.hasPermission(permissions, project.getId(), PermissionType.ISSUE_VIEW_USERS)
- && ((owner != null && owner.getId().equals(user.getId())) || (creator != null && creator.getId().equals(user.getId())))
- )))) {
- return mapping.findForward("unauthorized");
- }
- return null;
- }
- /**
- * read issue id from request
- *
- * @return Integer - issue id or -1 if not in request
- */
- private static Integer getIssueId(HttpServletRequest request) {
- try {
- return Integer.valueOf(request.getParameter("id"));
- } catch (RuntimeException re) {
- if (log.isDebugEnabled()) {
- log.debug("getIssueId: no issue-id in request, caught", re);
- }
- }
- return -1;
- }
- /**
- * Set the objects in request that are required for ui render
- */
- private static final void setupJspEnv(HttpServletRequest request, Map<IssueActivity, String> activities) {
- Integer issueId = getIssueId(request);
- request.setAttribute("activities", activities);
- request.setAttribute("issueId", issueId);
- }
- /**
- * @param issueService
- * @param request
- * @return
- */
- private static final Map<IssueActivity, String> prepareActivitiesMap(IssueService issueService, HttpServletRequest request) {
- SortedMap<IssueActivity, String> activities = new TreeMap<IssueActivity, String>(AbstractEntity.ID_COMPARATOR);
- Integer issueId = getIssueId(request);
- Iterator<IssueActivity> activityIt = issueService.getIssueActivity(issueId).iterator();
- IssueActivity issueActivity;
- while (activityIt.hasNext()) {
- issueActivity = activityIt.next();
- activities.put(issueActivity, IssueUtilities.getActivityName(issueActivity.getActivityType(),
- LoginUtilities.getCurrentLocale(request)));
- }
- return activities;
- }
- }