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.report;
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.apache.struts.upload.FormFile;
37  import org.itracker.core.resources.ITrackerResources;
38  import org.itracker.model.Language;
39  import org.itracker.model.PermissionType;
40  import org.itracker.model.Report;
41  import org.itracker.services.ConfigurationService;
42  import org.itracker.services.ReportService;
43  import org.itracker.services.util.ReportUtilities;
44  import org.itracker.services.util.UserUtilities;
45  import org.itracker.web.actions.base.ItrackerBaseAction;
46  import org.itracker.web.forms.ReportForm;
47  import org.itracker.web.util.Constants;
48  
49  
50  public class EditReportAction extends ItrackerBaseAction {
51  	private static final Logger log = Logger.getLogger(EditReportAction.class);
52  	
53      public EditReportAction() {
54      }
55  
56  	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
57  
58  		ActionMessages errors = new ActionMessages();
59  		
60          if(! isTokenValid(request)) {
61              log.debug("Invalid request token while editing report.");
62  			errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
63  			"itracker.web.error.transaction"));
64  			saveErrors(request, errors);
65              return mapping.findForward("listreports");
66          }
67          resetToken(request);
68          
69          ReportForm reportForm = (ReportForm) form;
70          if ( reportForm == null )
71               return mapping.findForward("listreportsadmin");
72         
73          HttpSession session = request.getSession(true);
74          Report editreport = null;
75          try {
76              boolean errorFound = false;
77              ReportService reportService = getITrackerServices().getReportService();
78  
79              Map<Integer, Set<PermissionType>> userPermissionsMap = getUserPermissions(session);
80              if(! UserUtilities.hasPermission(userPermissionsMap, UserUtilities.PERMISSION_USER_ADMIN)) {
81                  return mapping.findForward("unauthorized");
82              }
83              
84              editreport = (Report) session.getAttribute(Constants.REPORT_KEY);
85  
86              editreport = new Report();
87              if( reportForm.getId() != -1 ) {
88                  editreport.setId(reportForm.getId());
89              }
90              editreport.setName(reportForm.getName());
91              editreport.setNameKey(reportForm.getNameKey());
92              editreport.setDescription(reportForm.getDescription());
93              editreport.setDataType((reportForm.getDataType() != null ? reportForm.getDataType() : ReportUtilities.DATATYPE_ISSUE));
94              editreport.setReportType((reportForm.getReportType() != null ? reportForm.getReportType() : ReportUtilities.REPORTTYPE_JFREE));
95              String fileData = reportForm.getFileData();
96              try {
97                  if ( fileData == null || fileData.length() == 0 ) {
98                      FormFile file = reportForm.getFileDataFile();  
99                      if(file.getFileData() == null ||
100                             file.getFileData().length == 0) {
101                         errorFound = true;
102                         errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.missingdatafile"));  
103                     } else {
104                         //editreport.setFileData(file.getFileData());
105                     }
106                 } else {
107                     //editreport.setFileData(fileData.getBytes());
108                 }
109             } catch(Exception e) {
110                 log.error("Exception while verifying import data.", e);
111                 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.missingdatafile"));
112             }
113 
114             editreport.setClassName((reportForm.getClassName() != null ? reportForm.getClassName() : ""));
115                 
116             String action = (String) request.getParameter("action");
117             if(!errorFound) {
118                 if("create".equals(action)) {
119                     editreport = reportService.createReport(editreport);
120                 } else if ("update".equals(action)) {
121                     Report existingreport = reportService.getReportDAO().findByPrimaryKey(editreport.getId());
122                     if ( existingreport != null ) {
123                         reportService.getReportDAO().saveOrUpdate(editreport);
124                     }
125                 }
126             }
127 
128             if(editreport == null && !errorFound) {
129                 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.save"));
130             } else if("create".equals(action) && editreport!=null) {
131                 // If it was a create, add a new language key in the base for it.
132                 ConfigurationService configurationService = getITrackerServices().getConfigurationService();
133 
134                 configurationService.updateLanguageItem(new Language(ITrackerResources.BASE_LOCALE, editreport.getNameKey(), editreport.getName()));
135                 ITrackerResources.clearKeyFromBundles(editreport.getNameKey(), true);
136             }
137         } catch(Exception e) {
138             log.error("Exception processing form data", e);
139             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.save"));
140         }
141 
142         if(! errors.isEmpty()) {
143         	saveErrors(request, errors);
144             saveToken(request);
145             return mapping.getInputForward();
146         }
147 
148         session.removeAttribute(Constants.REPORT_KEY);
149         return mapping.findForward("listreportsadmin");
150     }
151 
152 }
153