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.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  /**        logger.info("EDIT VERSION FORM");
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 }