1 package org.itracker.web.actions.admin.report;
2
3 import java.io.IOException;
4 import java.lang.reflect.InvocationTargetException;
5 import java.util.Map;
6 import java.util.Set;
7
8 import javax.servlet.ServletException;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12
13 import org.apache.commons.beanutils.PropertyUtils;
14 import org.apache.log4j.Logger;
15 import org.apache.struts.action.ActionForm;
16 import org.apache.struts.action.ActionForward;
17 import org.apache.struts.action.ActionMapping;
18 import org.apache.struts.action.ActionMessage;
19 import org.apache.struts.action.ActionMessages;
20 import org.itracker.model.PermissionType;
21 import org.itracker.model.Report;
22 import org.itracker.services.ReportService;
23 import org.itracker.services.util.UserUtilities;
24 import org.itracker.web.actions.base.ItrackerBaseAction;
25 import org.itracker.web.forms.ReportForm;
26 import org.itracker.web.util.Constants;
27
28
29
30 public class EditReportFormAction extends ItrackerBaseAction {
31 private static final Logger log = Logger.getLogger(EditReportFormAction.class);
32
33 public EditReportFormAction() {
34 }
35
36 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
37 ActionMessages errors = new ActionMessages();
38
39 try {
40 ReportService reportService = getITrackerServices().getReportService();
41
42 HttpSession session = request.getSession(true);
43 String action = (String) request.getParameter("action");
44 Map<Integer, Set<PermissionType>> userPermissionsMap = getUserPermissions(session);
45
46
47
48 if(! UserUtilities.hasPermission(userPermissionsMap, UserUtilities.PERMISSION_USER_ADMIN)) {
49 return mapping.findForward("unauthorized");
50 }
51 Report report = (Report) session.getAttribute(Constants.REPORT_KEY);
52 String pageTitleKey = "";
53 String pageTitleArg = "";
54 if(action != null && action.equals("update")) {
55 pageTitleKey = "itracker.web.admin.editreport.title.update";
56
57 } else {
58 pageTitleKey = "itracker.web.admin.editreport.title.create";
59 }
60 request.setAttribute("pageTitleKey",pageTitleKey);
61 request.setAttribute("pageTitleArg",pageTitleArg);
62
63 report = null;
64
65 ReportForm reportForm = (ReportForm) form;
66 if(reportForm == null) {
67 reportForm = new ReportForm();
68 }
69
70
71 if("create".equals(action)) {
72 report = new Report();
73 report.setId(-1);
74 reportForm.setAction("create");
75 reportForm.setId(report.getId());
76 } else if ("update".equals(action)) {
77 Integer reportId = (Integer) PropertyUtils.getSimpleProperty(form, "id");
78 report = reportService.getReportDAO().findByPrimaryKey(reportId);
79 if(report == null) {
80 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidreport"));
81 } else {
82 reportForm.setAction("update");
83 reportForm.setId(report.getId());
84 reportForm.setName(report.getName());
85 reportForm.setNameKey(report.getNameKey());
86 reportForm.setDescription(report.getDescription());
87 reportForm.setReportType(report.getReportType());
88 reportForm.setDataType(report.getDataType());
89 reportForm.setClassName(report.getClassName());
90
91 }
92 } else {
93 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidaction"));
94 }
95
96 if(errors.isEmpty()) {
97 request.setAttribute("reportForm", reportForm);
98 session.setAttribute(Constants.REPORT_KEY, report);
99 saveToken(request);
100 return mapping.getInputForward();
101 }
102 } catch(RuntimeException e) {
103 log.error("Exception while creating edit report form.", e);
104 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
105 } catch (IllegalAccessException e) {
106 log.error("Exception while creating edit report form.", e);
107 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
108 } catch (InvocationTargetException e) {
109 log.error("Exception while creating edit report form.", e);
110 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
111 } catch (NoSuchMethodException e) {
112 log.error("Exception while creating edit report form.", e);
113 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
114 }
115
116 if(! errors.isEmpty()) {
117 saveErrors(request, errors);
118 }
119
120 return mapping.findForward("error");
121 }
122
123 }
124