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.commons.beanutils.PropertyUtils;
31 import org.apache.log4j.Logger;
32 import org.apache.struts.action.ActionForm;
33 import org.apache.struts.action.ActionForward;
34 import org.apache.struts.action.ActionMapping;
35 import org.apache.struts.action.ActionMessage;
36 import org.apache.struts.action.ActionMessages;
37 import org.itracker.model.PermissionType;
38 import org.itracker.model.Project;
39 import org.itracker.model.Version;
40 import org.itracker.services.ProjectService;
41 import org.itracker.services.util.UserUtilities;
42 import org.itracker.web.actions.base.ItrackerBaseAction;
43 import org.itracker.web.forms.VersionForm;
44 import org.itracker.web.util.Constants;
45
46
47
48
49 public class EditVersionFormAction extends ItrackerBaseAction {
50 private static final Logger log = Logger.getLogger(EditVersionFormAction.class);
51
52 @SuppressWarnings("unchecked")
53 public ActionForward execute(ActionMapping mapping,
54 ActionForm form,
55 HttpServletRequest request,
56 HttpServletResponse response)
57 throws ServletException, IOException {
58
59 ActionMessages errors = new ActionMessages();
60
61 String pageTitleKey = "";
62 String pageTitleArg = "";
63
64
65 try {
66 ProjectService projectService = getITrackerServices().getProjectService();
67
68 HttpSession session = request.getSession(true);
69 String action = (String) request.getParameter("action");
70 Map<Integer, Set<PermissionType>> userPermissions = (Map<Integer, Set<PermissionType>>) session.getAttribute(Constants.PERMISSIONS_KEY);
71
72 Version version = null;
73 version = (Version) session.getAttribute(Constants.VERSION_KEY);
74
75 Project project = null;
76
77 VersionForm versionForm = (VersionForm) form;
78 if(versionForm == null) {
79 versionForm = new VersionForm();
80 }
81
82 Integer projectId = (Integer) PropertyUtils.getSimpleProperty(form, "projectId");
83
84 if ("create".equals(action)) {
85
86 if(action != null && action.equals("create")) {
87 pageTitleKey = "itracker.web.admin.editversion.title.create";
88 }
89
90 if(projectId == null) {
91 errors.add(ActionMessages.GLOBAL_MESSAGE,
92 new ActionMessage("itracker.web.error.invalidproject"));
93 } else {
94 project = projectService.getProject(projectId);
95
96 if(project == null) {
97 errors.add(ActionMessages.GLOBAL_MESSAGE,
98 new ActionMessage("itracker.web.error.invalidproject"));
99 } else if(! UserUtilities.hasPermission(userPermissions,
100 project.getId(), UserUtilities.PERMISSION_PRODUCT_ADMIN)) {
101 return mapping.findForward("unauthorized");
102 } else {
103 version = new Version();
104 version.setProject(project);
105 versionForm.setAction("create");
106 versionForm.setDescription(versionForm.getDescription());
107 versionForm.setId(-1);
108 versionForm.setProjectId(version.getProject().getId());
109 }
110 }
111 } else if ("update".equals(action)) {
112 Integer versionId = (Integer) PropertyUtils.getSimpleProperty(form, "id");
113 version = projectService.getProjectVersion(versionId);
114 if(action != null && action.equals("update")) {
115 pageTitleKey = "itracker.web.admin.editversion.title.update";
116 pageTitleArg = version.getNumber();
117 }
118 if(version == null) {
119 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidversion"));
120 } else {
121 if(! UserUtilities.hasPermission(userPermissions, version.getProject().getId(), UserUtilities.PERMISSION_PRODUCT_ADMIN)) {
122 return mapping.findForward("unauthorized");
123 } else {
124 versionForm.setAction("update");
125 versionForm.setId(version.getId());
126 versionForm.setProjectId(version.getProject().getId());
127 versionForm.setNumber(version.getNumber());
128 versionForm.setDescription(version.getDescription());
129 }
130 }
131 } else {
132 errors.add(ActionMessages.GLOBAL_MESSAGE,
133 new ActionMessage("itracker.web.error.invalidaction"));
134 }
135
136 if(errors.isEmpty()) {
137 request.setAttribute("versionForm", versionForm);
138 session.setAttribute(Constants.VERSION_KEY, version);
139 saveToken(request);
140 request.setAttribute("pageTitleKey",pageTitleKey);
141 request.setAttribute("pageTitleArg",pageTitleArg);
142 ActionForward af = new EditVersionFormActionUtil().init(mapping, request);
143 if (af != null) return af;
144 return mapping.getInputForward();
145 }
146 } catch(Exception ex) {
147 pageTitleKey = "itracker.web.error.title";
148
149 request.setAttribute("pageTitleKey",pageTitleKey);
150 request.setAttribute("pageTitleArg",pageTitleArg);
151
152 log.error("Exception while creating edit version form.", ex);
153 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
154 }
155
156 if(! errors.isEmpty()) {
157 saveErrors(request, errors);
158
159 return mapping.findForward("error");
160 }
161 return mapping.getInputForward();
162 }
163
164 }