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