1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
105 }
106 } else {
107
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
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