View Javadoc

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  
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   * This class populates an IssueForm object for display by the edit issue page.
54   */
55  public class EditIssueFormAction extends ItrackerBaseAction {
56  	private static final Logger log = Logger.getLogger(EditIssueFormAction.class);
57  
58  	/* (non-Javadoc)
59  	 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
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  				// (Locale) session
100 				// .getAttribute(Constants.LOCALE_KEY);
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 				// TODO: Sort attachments
132 				// Collections.sort(attachments,
133 				// IssueAttachment.CREATE_DATE_COMPARATOR);
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 }