1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.itracker.web.actions.admin.project;
20
21 import org.apache.log4j.Logger;
22 import org.apache.struts.action.*;
23 import org.itracker.model.PermissionType;
24 import org.itracker.model.Project;
25 import org.itracker.model.Version;
26 import org.itracker.services.ProjectService;
27 import org.itracker.model.util.UserUtilities;
28 import org.itracker.web.actions.base.ItrackerBaseAction;
29 import org.itracker.web.forms.VersionForm;
30 import org.itracker.web.util.Constants;
31
32 import javax.servlet.ServletException;
33 import javax.servlet.http.HttpServletRequest;
34 import javax.servlet.http.HttpServletResponse;
35 import javax.servlet.http.HttpSession;
36 import java.io.IOException;
37 import java.util.Map;
38 import java.util.Set;
39
40
41
42
43
44
45 public class EditVersionAction extends ItrackerBaseAction {
46 private static final Logger log = Logger.getLogger(EditVersionAction.class);
47
48 public EditVersionAction() {
49 }
50
51 public ActionForward execute(ActionMapping mapping, ActionForm form,
52 HttpServletRequest request, HttpServletResponse response)
53 throws ServletException, IOException {
54 ActionMessages errors = new ActionMessages();
55
56
57 if (!isTokenValid(request)) {
58 log.debug("Invalid request token while editing version.");
59 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
60 "itracker.web.error.transaction"));
61 saveErrors(request, errors);
62 return mapping.findForward("listprojectsadmin");
63 }
64 resetToken(request);
65
66 Version version;
67 Project project;
68
69 try {
70 VersionForm versionForm = (VersionForm) form;
71 ProjectService projectService = getITrackerServices()
72 .getProjectService();
73
74 HttpSession session = request.getSession(true);
75 Map<Integer, Set<PermissionType>> userPermissions = getUserPermissions(session);
76
77 Integer projectId = versionForm.getProjectId();
78
79 if (projectId == null) {
80 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
81 "itracker.web.error.invalidproject"));
82 } else {
83 project = projectService.getProject(projectId);
84
85 if (project == null) {
86 errors.add(ActionMessages.GLOBAL_MESSAGE,
87 new ActionMessage(
88 "itracker.web.error.invalidproject"));
89 } else {
90 boolean authorised = UserUtilities.hasPermission(
91 userPermissions, project.getId(),
92 UserUtilities.PERMISSION_PRODUCT_ADMIN);
93
94 if (!authorised) {
95 return mapping.findForward("unauthorised");
96 } else {
97
98 String action = (String) request.getParameter("action");
99
100 if ("create".equals(action)) {
101 version = new Version(project, versionForm
102 .getNumber());
103 version
104 .setDescription(versionForm
105 .getDescription());
106 version = projectService.addProjectVersion(project
107 .getId(), version);
108 } else if ("update".equals(action)) {
109 version = projectService
110 .getProjectVersion(versionForm.getId());
111 version.setNumber(versionForm.getNumber());
112 version.setProject(project);
113 version
114 .setDescription(versionForm
115 .getDescription());
116 version = projectService
117 .updateProjectVersion(version);
118 }
119 session.removeAttribute(Constants.VERSION_KEY);
120
121 return new ActionForward(mapping.findForward(
122 "editproject").getPath()
123 + "?id=" + project.getId() + "&action=update");
124 }
125 }
126 }
127 } catch (RuntimeException ex) {
128 log.error("Exception processing form data", ex);
129 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
130 "itracker.web.error.system"));
131 }
132
133 if (!errors.isEmpty()) {
134 saveErrors(request, errors);
135 }
136 return mapping.findForward("error");
137 }
138
139 }