1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.itracker.web.actions.project;
20
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.Locale;
24 import java.util.Map;
25 import java.util.Set;
26
27 import javax.servlet.ServletException;
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30 import javax.servlet.http.HttpSession;
31
32 import org.apache.log4j.Logger;
33 import org.apache.struts.action.ActionForm;
34 import org.apache.struts.action.ActionForward;
35 import org.apache.struts.action.ActionMapping;
36 import org.apache.struts.action.ActionMessage;
37 import org.apache.struts.action.ActionMessages;
38 import org.itracker.model.Issue;
39 import org.itracker.model.NameValuePair;
40 import org.itracker.model.PermissionType;
41 import org.itracker.model.Project;
42 import org.itracker.model.Status;
43 import org.itracker.model.User;
44 import org.itracker.services.IssueService;
45 import org.itracker.services.UserService;
46 import org.itracker.services.util.IssueUtilities;
47 import org.itracker.services.util.UserUtilities;
48 import org.itracker.web.actions.base.ItrackerBaseAction;
49 import org.itracker.web.forms.IssueForm;
50 import org.itracker.web.util.Constants;
51
52
53
54
55 public class EditIssueFormAction extends ItrackerBaseAction {
56 private static final Logger log = Logger.getLogger(EditIssueFormAction.class);
57
58
59
60
61 @Override
62 public ActionForward execute(ActionMapping mapping, ActionForm form,
63 HttpServletRequest request, HttpServletResponse response)
64 throws ServletException, IOException {
65 if (log.isDebugEnabled()) {
66 log.debug("execute: called with mapping: " + mapping + ", form: "
67 + form + ", request: " + request + ", response: "
68 + response);
69 }
70 ActionMessages errors = new ActionMessages();
71
72 try {
73 IssueService issueService = getITrackerServices().getIssueService();
74 UserService userService = getITrackerServices().getUserService();
75 Integer issueId = new Integer(
76 (request.getParameter("id") == null ? "-1" : (request
77 .getParameter("id"))));
78
79 Issue issue = issueService.getIssue(issueId);
80 Project project = issueService.getIssueProject(issueId);
81
82 if (issue == null) {
83 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
84 "itracker.web.error.invalidissue"));
85 saveErrors(request, errors);
86 return mapping.findForward("error");
87 } else if (project == null) {
88 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
89 "itracker.web.error.invalidproject"));
90 } else if (project.getStatus() != Status.ACTIVE) {
91 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
92 "itracker.web.error.projectlocked"));
93 } else {
94 HttpSession session = request.getSession(true);
95 User currUser = (User) session.getAttribute(Constants.USER_KEY);
96 Map<Integer, Set<PermissionType>> userPermissions = getUserPermissions(session);
97
98 Locale locale = getLocale(request);
99
100
101
102 List<NameValuePair> ownersList = UserUtilities
103 .getAssignableIssueOwnersList(issue, project, currUser,
104 locale, userService, userPermissions);
105
106 if (!IssueUtilities.canEditIssue(issue, currUser.getId(),
107 userPermissions)) {
108 log
109 .debug("Unauthorized user requested access to edit issue for project "
110 + project.getId());
111 return mapping.findForward("unauthorized");
112 }
113
114 IssueForm issueForm = (IssueForm) form;
115 if (issueForm == null) {
116 issueForm = new IssueForm();
117 }
118 Map<Integer, List<NameValuePair>> listOptions = EditIssueActionUtil.getListOptions(
119 request, issue, ownersList, userPermissions, issue
120 .getProject(), currUser);
121
122 EditIssueActionUtil.setupIssueForm(issueForm, issue, listOptions, request, errors);
123
124 EditIssueActionUtil.setupJspEnv(mapping, issueForm, request,
125 issue, issueService, userService, userPermissions,
126 listOptions, errors);
127
128 log.debug("Forwarding to edit issue form for issue "
129 + issue.getId());
130
131
132
133
134
135 saveToken(request);
136 if(issue == null){
137 return mapping.findForward("error");
138 }
139 if (errors.isEmpty()) {
140 log.info("EditIssueFormAction: Forward: InputForward");
141 saveErrors(request, errors);
142 return mapping.getInputForward();
143 }
144 }
145 } catch (Exception e) {
146 log.error("Exception while creating edit issue form.", e);
147 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
148 "itracker.web.error.system"));
149 }
150
151 if (!errors.isEmpty()) {
152 saveErrors(request, errors);
153 }
154
155 log.info("EditIssueFormAction: Forward: Error");
156 return mapping.findForward("error");
157 }
158
159 }