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.configuration;
20  
21  import java.io.IOException;
22  import java.util.List;
23  
24  import javax.servlet.ServletException;
25  import javax.servlet.http.HttpServletRequest;
26  import javax.servlet.http.HttpServletResponse;
27  import javax.servlet.http.HttpSession;
28  
29  import org.apache.commons.beanutils.PropertyUtils;
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.core.resources.ITrackerResources;
37  import org.itracker.model.Configuration;
38  import org.itracker.model.Issue;
39  import org.itracker.model.User;
40  import org.itracker.services.ConfigurationService;
41  import org.itracker.services.IssueService;
42  import org.itracker.services.exceptions.SystemConfigurationException;
43  import org.itracker.services.util.IssueUtilities;
44  import org.itracker.services.util.SystemConfigurationUtilities;
45  import org.itracker.services.util.UserUtilities;
46  import org.itracker.web.actions.base.ItrackerBaseAction;
47  import org.itracker.web.util.Constants;
48  
49  //TODO: Action Cleanup
50  public class RemoveConfigurationItemAction extends ItrackerBaseAction {
51  	private static final Logger log = Logger.getLogger(RemoveConfigurationItemAction.class);
52  	
53  
54      public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
55          ActionMessages errors = new ActionMessages();
56  
57  
58          if(! hasPermission(UserUtilities.PERMISSION_USER_ADMIN, request, response)) {
59              return mapping.findForward("unauthorized");
60          }
61  
62          try {
63              ConfigurationService configurationService = getITrackerServices().getConfigurationService();
64  
65              Integer configId = (Integer) PropertyUtils.getSimpleProperty(form, "id");
66              if(configId == null || configId.intValue() <= 0) {
67                  throw new SystemConfigurationException("Invalid configuration id.");
68              }
69  
70              Configuration configItem = configurationService.getConfigurationItem(configId);
71              if(configItem == null) {
72                  throw new SystemConfigurationException("Invalid configuration id.");
73              }
74  
75              String key = null;
76              if(configItem.getType() == SystemConfigurationUtilities.TYPE_SEVERITY) {
77                  key = ITrackerResources.KEY_BASE_SEVERITY + configItem.getValue();
78  
79                  // Need to promote all issues with the deleted severity.  The safest thing to do is
80                  // promote them to the next higher severity.
81                  try {
82                      String currConfigValue = configItem.getValue();
83                      String newConfigValue = null;
84  
85                      List<Configuration> configItems = configurationService.getConfigurationItemsByType(SystemConfigurationUtilities.TYPE_SEVERITY);
86                      for(int i = 0; i < configItems.size(); i++) {
87                          if(configItems.get(i) != null && configId.equals(configItems.get(i).getId())) {
88                              if(i == 0 && (i + 1) < configItems.size()) {
89                                  newConfigValue = configItems.get(i+1).getValue();
90                                  break;
91                              } else if(i > 0) {
92                                  newConfigValue = configItems.get(i-1).getValue();
93                                  break;
94                              }
95                          }
96                      }
97  
98                      int currSeverity = Integer.parseInt(currConfigValue);
99                      int newSeverity = Integer.parseInt(newConfigValue);
100                     log.debug("Promoting issues in severity " + IssueUtilities.getSeverityName(currSeverity) + " to " + IssueUtilities.getSeverityName(newSeverity));
101 
102                     HttpSession session = request.getSession(true);
103                     User currUser = (User) session.getAttribute(Constants.USER_KEY);
104                     Integer currUserId = (currUser == null ? -1 : currUser.getId());
105 
106                     IssueService issueService = getITrackerServices().getIssueService();
107                     List<Issue> issues = issueService.getIssuesWithSeverity(currSeverity);
108                     for(int i = 0; i < issues.size(); i++) {
109                         if(issues.get(i) != null) {
110                             issues.get(i).setSeverity(newSeverity);
111 
112                             issues.add(issueService.systemUpdateIssue(issues.get(i), currUserId));
113                         }
114                     }
115                 } catch(Exception e) {
116                     log.debug("Exception while promoting issues with severity " + configItem.getValue(), e);
117                 }
118             } else if(configItem.getType() == SystemConfigurationUtilities.TYPE_STATUS) {
119                 key = ITrackerResources.KEY_BASE_STATUS + configItem.getValue();
120 
121                 // Need to demote all issues with the deleted severity.  The safest thing to do is
122                 // move them down one status to make sure they don't skip something important in any
123                 // workflow.
124 
125                 try {
126                     String currConfigValue = configItem.getValue();
127                     String newConfigValue = null;
128 
129                     List<Configuration> configItems = configurationService.getConfigurationItemsByType(SystemConfigurationUtilities.TYPE_STATUS);
130                     for(int i = 0; i < configItems.size(); i++) {
131                         if(configItems.get(i) != null && configId.equals(configItems.get(i).getId())) {
132                             if(i == 0 && (i + 1) < configItems.size()) {
133                                 newConfigValue = configItems.get(i+1).getValue();
134                                 break;
135                             } else if(i > 0) {
136                                 newConfigValue = configItems.get(i-1).getValue();
137                                 break;
138                             }
139                         }
140                     }
141 
142                     int currStatus = Integer.parseInt(currConfigValue);
143                     int newStatus = Integer.parseInt(newConfigValue);
144                     log.debug("Promoting issues in status " + IssueUtilities.getStatusName(currStatus) + " to " + IssueUtilities.getStatusName(newStatus));
145 
146                     HttpSession session = request.getSession(true);
147                     User currUser = (User) session.getAttribute(Constants.USER_KEY);
148                     Integer currUserId = (currUser == null ? -1 : currUser.getId());
149 
150                     IssueService issueService = getITrackerServices().getIssueService();
151                     List<Issue> issues = issueService.getIssuesWithStatus(currStatus);
152                     for(int i = 0; i < issues.size(); i++) {
153                         if(issues.get(i) != null) {
154                             issues.get(i).setStatus(newStatus);
155                             
156 //                            IssueActivity activity = new IssueActivity();
157 //                            activity.setActivityType(IssueActivityType.SYSTEM_UPDATE);
158 //                            activity.setDescription(ITrackerResources.getString("itracker.activity.system.status"));
159 //                            ArrayList<IssueActivity> activities = new ArrayList<IssueActivity>();
160 //                            activities.add(activity);
161                             issues.add(issueService.systemUpdateIssue(issues.get(i), currUserId));
162                         }
163                     }
164                 } catch(Exception e) {
165                     log.debug("Exception while promoting issues with status " + configItem.getValue(), e);
166                 }
167             } else if(configItem.getType() == SystemConfigurationUtilities.TYPE_RESOLUTION) {
168                 key = ITrackerResources.KEY_BASE_RESOLUTION + configItem.getValue();
169 
170                 // No need to edit any issues since the resolutions are stored as text in the issue
171             } else {
172                 throw new SystemConfigurationException("Unsupported configuration item type " + configItem.getType() + " found.");
173             }
174 
175             configurationService.removeConfigurationItem(configItem.getId());
176             if(key != null) {
177                 configurationService.removeLanguageKey(key);
178                 ITrackerResources.clearKeyFromBundles(key, false);
179             }
180 
181             return mapping.findForward("listconfiguration");
182         } catch(SystemConfigurationException sce) {
183             log.debug(sce.getMessage(), sce);
184             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidconfiguration"));
185         } catch(NumberFormatException nfe) {
186         	errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidconfiguration"));
187             log.debug("Invalid configuration item id " + request.getParameter("id") + " specified.");
188         } catch(Exception e) {
189         	errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
190             log.error("System Error.", e);
191         }
192         if(! errors.isEmpty()) {
193             saveErrors(request, errors);
194         }
195         return mapping.findForward("error");
196     }
197 
198 }
199