EditVersionAction.java

  1. /*
  2.  * This software was designed and created by Jason Carroll.
  3.  * Copyright (c) 2002, 2003, 2004 Jason Carroll.
  4.  * The author can be reached at jcarroll@cowsultants.com
  5.  * ITracker website: http://www.cowsultants.com
  6.  * ITracker forums: http://www.cowsultants.com/phpBB/index.php
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it only under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  */

  18. package org.itracker.web.actions.admin.project;

  19. import org.apache.log4j.Logger;
  20. import org.apache.struts.action.*;
  21. import org.itracker.model.PermissionType;
  22. import org.itracker.model.Project;
  23. import org.itracker.model.Version;
  24. import org.itracker.model.util.UserUtilities;
  25. import org.itracker.services.ProjectService;
  26. import org.itracker.web.actions.base.ItrackerBaseAction;
  27. import org.itracker.web.forms.VersionForm;
  28. import org.itracker.web.util.Constants;
  29. import org.itracker.web.util.RequestHelper;
  30. import org.itracker.web.util.ServletContextUtils;

  31. import javax.servlet.ServletException;
  32. import javax.servlet.http.HttpServletRequest;
  33. import javax.servlet.http.HttpServletResponse;
  34. import javax.servlet.http.HttpSession;
  35. import java.io.IOException;
  36. import java.util.Map;
  37. import java.util.Set;

  38. /**
  39.  * Action for edit a version.
  40.  *
  41.  * @author ranks
  42.  */
  43. public class EditVersionAction extends ItrackerBaseAction {
  44.     private static final Logger log = Logger.getLogger(EditVersionAction.class);

  45.     public EditVersionAction() {
  46.     }

  47.     public ActionForward execute(ActionMapping mapping, ActionForm form,
  48.                                  HttpServletRequest request, HttpServletResponse response)
  49.             throws ServletException, IOException {
  50.         ActionMessages errors = new ActionMessages();


  51.         if (!isTokenValid(request)) {
  52.             log.debug("Invalid request token while editing version.");
  53.             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  54.                     "itracker.web.error.transaction"));
  55.             saveErrors(request, errors);
  56.             return mapping.findForward("listprojectsadmin");
  57.         }
  58.         resetToken(request);

  59.         Version version;
  60.         Project project;

  61.         try {
  62.             VersionForm versionForm = (VersionForm) form;
  63.             ProjectService projectService = ServletContextUtils.getItrackerServices()
  64.                     .getProjectService();

  65.             HttpSession session = request.getSession(true);
  66.             Map<Integer, Set<PermissionType>> userPermissions = RequestHelper.getUserPermissions(session);

  67.             Integer projectId = versionForm.getProjectId();

  68.             if (projectId == null) {
  69.                 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  70.                         "itracker.web.error.invalidproject"));
  71.             } else {
  72.                 project = projectService.getProject(projectId);

  73.                 if (project == null) {
  74.                     errors.add(ActionMessages.GLOBAL_MESSAGE,
  75.                             new ActionMessage(
  76.                                     "itracker.web.error.invalidproject"));
  77.                 } else {
  78.                     boolean authorised = UserUtilities.hasPermission(
  79.                             userPermissions, project.getId(),
  80.                             UserUtilities.PERMISSION_PRODUCT_ADMIN);

  81.                     if (!authorised) {
  82.                         return mapping.findForward("unauthorised");
  83.                     } else {

  84.                         String action = (String) request.getParameter("action");

  85.                         if ("create".equals(action)) {
  86.                             version = new Version(project, versionForm
  87.                                     .getNumber());
  88.                             version
  89.                                     .setDescription(versionForm
  90.                                             .getDescription());
  91.                             version = projectService.addProjectVersion(project
  92.                                     .getId(), version);
  93.                         } else if ("update".equals(action)) {
  94.                             version = projectService
  95.                                     .getProjectVersion(versionForm.getId());
  96.                             version.setNumber(versionForm.getNumber());
  97.                             version.setProject(project);
  98.                             version
  99.                                     .setDescription(versionForm
  100.                                             .getDescription());
  101.                             version = projectService
  102.                                     .updateProjectVersion(version);
  103.                         }
  104.                         session.removeAttribute(Constants.VERSION_KEY);

  105.                         return new ActionForward(mapping.findForward(
  106.                                 "editproject").getPath()
  107.                                 + "?id=" + project.getId() + "&action=update");
  108.                     }
  109.                 }
  110.             }
  111.         } catch (RuntimeException ex) {
  112.             log.error("Exception processing form data", ex);
  113.             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  114.                     "itracker.web.error.system"));
  115.         }

  116.         if (!errors.isEmpty()) {
  117.             saveErrors(request, errors);
  118.         }
  119.         return mapping.findForward("error");
  120.     }

  121. }