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.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   * Action for edit a version.
47   * 
48   * @author ranks
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 //							version.setLastModifiedDate(new Date());
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 }