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.lang.reflect.InvocationTargetException;
23  import java.util.HashMap;
24  import java.util.Iterator;
25  import java.util.List;
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.commons.beanutils.PropertyUtils;
33  import org.apache.log4j.Logger;
34  import org.apache.struts.action.ActionForm;
35  import org.apache.struts.action.ActionForward;
36  import org.apache.struts.action.ActionMapping;
37  import org.apache.struts.action.ActionMessage;
38  import org.apache.struts.action.ActionMessages;
39  import org.itracker.model.Project;
40  import org.itracker.model.ProjectScript;
41  import org.itracker.model.WorkflowScript;
42  import org.itracker.services.ConfigurationService;
43  import org.itracker.services.ProjectService;
44  import org.itracker.services.util.ProjectUtilities;
45  import org.itracker.services.util.UserUtilities;
46  import org.itracker.web.actions.base.ItrackerBaseAction;
47  import org.itracker.web.forms.ProjectScriptForm;
48  import org.itracker.web.util.Constants;
49  
50  
51  
52  public class EditProjectScriptFormAction extends ItrackerBaseAction {
53  	private static final Logger log = Logger.getLogger(EditProjectScriptFormAction.class);
54  	
55      public EditProjectScriptFormAction() {
56      }
57      
58      public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
59  
60      	ActionMessages errors = new ActionMessages();
61      	
62          if(! hasPermission(UserUtilities.PERMISSION_USER_ADMIN, request, response)) {
63              return mapping.findForward("unauthorized");
64          }
65          boolean isUpdate = false;
66          String pageTitleKey = "";
67          String pageTitleArg = "";
68          String action = "";
69          Project project = null;
70          
71          try {
72              ProjectScriptForm projectScriptForm = (ProjectScriptForm) form;
73              final ProjectService projectService = getITrackerServices().getProjectService();
74              final ConfigurationService configurationService = getITrackerServices().getConfigurationService();
75              
76              if(projectScriptForm == null) {
77                  projectScriptForm = new ProjectScriptForm();
78              }
79              final List<ProjectScript> projectScripts;
80              final List<WorkflowScript> workflowScripts = configurationService.getWorkflowScripts();
81              
82              
83              action = request.getParameter("action");
84              if ( action == null )
85                  action = (String) PropertyUtils.getSimpleProperty(projectScriptForm, "action");
86              projectScriptForm.setAction(action);
87              
88              Integer projectId = (Integer) PropertyUtils.getSimpleProperty(projectScriptForm, "projectId");
89              projectScriptForm.setProjectId(projectId);
90              project = projectService.getProject(projectId);
91              projectScripts = project.getScripts();
92              
93  //            if(action != null && action.equals("update")) {
94  //                isUpdate = true;
95  //                pageTitleKey = "itracker.web.admin.editprojectscript.title.update";
96                  
97  //            } else {
98                  pageTitleKey = "itracker.web.admin.editprojectscript.title.create";
99  //            }
100             HashMap<String,String> scriptDescs = new HashMap<String,String>();
101             HashMap<String,String> scriptItems = new HashMap<String,String>();
102             HashMap<String,String> ids = new HashMap<String,String>();
103             HashMap<String,String> fieldIds = new HashMap<String,String>();
104             HashMap<String,String> priorities = new HashMap<String,String>();
105 //            Integer[] Ids = new Integer[workflowScripts.size()];
106 //            Integer[] fieldIds = new Integer[workflowScripts.size()];
107 //            Integer[] priorities = new Integer[workflowScripts.size()];
108             int i = 0;
109 //            if ("update".equals(action)) {
110             for ( Iterator<WorkflowScript> wfsIterator = workflowScripts.iterator(); wfsIterator.hasNext(); i++) {
111                 WorkflowScript workflowScript = (WorkflowScript) wfsIterator.next();
112                 scriptDescs.put(String.valueOf(workflowScript.getId()), workflowScript.getName());
113                 String idstr = "0";
114                 String sdstr = "";
115                 String fidstr = "";
116                 String pristr = "";
117                 for ( Iterator<ProjectScript> psIterator = projectScripts.iterator(); psIterator.hasNext(); ) {
118                     ProjectScript chkprojectScript = psIterator.next();
119                     if ( workflowScript.getId().equals(chkprojectScript.getScript()) ) {
120                         idstr = String.valueOf(chkprojectScript.getId());
121                         fidstr = String.valueOf(chkprojectScript.getFieldId());
122                         pristr = String.valueOf(chkprojectScript.getPriority());
123                         sdstr = "on";
124                     }
125                 }
126                 scriptItems.put(String.valueOf(workflowScript.getId()), sdstr);
127                 ids.put(String.valueOf(workflowScript.getId()), idstr);
128                 fieldIds.put(String.valueOf(workflowScript.getId()), fidstr);
129                 priorities.put(String.valueOf(workflowScript.getId()), pristr);
130             }
131 /*            } else {
132                 for ( Iterator<WorkflowScript> wfsIterator = workflowScripts.iterator(); wfsIterator.hasNext(); i++) {
133                     WorkflowScript workflowScript = (WorkflowScript) wfsIterator.next();
134                     scriptItems.put(String.valueOf(workflowScript.getId()), "");
135                     scriptDescs.put(String.valueOf(workflowScript.getId()), workflowScript.getName());
136                     ids.put(String.valueOf(workflowScript.getId()), "0");
137                     fieldIds.put(String.valueOf(workflowScript.getId()), "");
138                     priorities.put(String.valueOf(workflowScript.getId()), "");
139                 }
140             }
141  **/
142             projectScriptForm.setScriptDescs(scriptDescs);
143             projectScriptForm.setScriptItems(scriptItems);
144             projectScriptForm.setId(ids);
145             projectScriptForm.setFieldId(fieldIds);
146             projectScriptForm.setPriority(priorities);
147             
148             projectScriptForm.setCustomFields(configurationService.getCustomFields());
149             String prioritySizeStr = ProjectUtilities.getScriptPrioritySize();
150             int prioritySize = Integer.parseInt(prioritySizeStr);
151             
152             HashMap<String,String> priorityList = new HashMap<String,String>();
153             for ( int j = 1; j <= prioritySize; j++ ) {
154                 priorityList.put(String.valueOf(j), ProjectUtilities.getScriptPriorityLabelKey(j));
155             }
156             projectScriptForm.setPriorityList(priorityList);
157             
158             if(errors.isEmpty()) {
159                 HttpSession session = request.getSession(true);
160                 request.setAttribute("projectScriptForm", projectScriptForm);
161                 session.setAttribute(Constants.PROJECT_SCRIPT_KEY, project);
162                 request.setAttribute("action",action);
163                 saveToken(request);
164                 request.setAttribute("pageTitleKey",pageTitleKey);
165                 request.setAttribute("pageTitleArg",pageTitleArg);
166                 return mapping.getInputForward();
167             }
168         } catch(RuntimeException e) {
169             log.error("Exception while the "+ action + " of ProjectScript form.", e);
170             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
171         } catch (IllegalAccessException e) {
172             log.error("Exception while the "+ action + " of ProjectScript form.", e);
173             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
174 		} catch (InvocationTargetException e) {
175             log.error("Exception while the "+ action + " of ProjectScript form.", e);
176             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
177 		} catch (NoSuchMethodException e) {
178             log.error("Exception while the "+ action + " of ProjectScript form.", e);
179             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
180 		}
181         
182         if(! errors.isEmpty()) {
183         	saveErrors(request, errors);
184         }
185         request.setAttribute("pageTitleKey",pageTitleKey);
186         request.setAttribute("pageTitleArg",pageTitleArg);
187         request.setAttribute("isUpdate",isUpdate);
188         return mapping.findForward("error");
189     }
190     
191 }