KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > efs > openreports > actions > QueryReportAction


1 /*
2  * Copyright (C) 2004 Erik Swenson - erik@oreports.com
3  *
4  * This program is free software; you can redistribute it and/or modify it under
5  * the terms of the GNU General Public License as published by the Free Software
6  * Foundation; either version 2 of the License, or (at your option) any later
7  * version.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12  * details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16  * Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  */

19
20 package org.efs.openreports.actions;
21
22 import java.util.Date JavaDoc;
23 import java.util.HashMap JavaDoc;
24 import java.util.Map JavaDoc;
25
26 import org.apache.log4j.Logger;
27 import org.efs.openreports.ORStatics;
28 import org.efs.openreports.engine.JFreeReportEngine;
29 import org.efs.openreports.engine.QueryReportEngine;
30 import org.efs.openreports.engine.input.ReportEngineInput;
31 import org.efs.openreports.engine.output.QueryEngineOutput;
32 import org.efs.openreports.engine.output.ReportEngineOutput;
33 import org.efs.openreports.objects.Report;
34 import org.efs.openreports.objects.ReportLog;
35 import org.efs.openreports.objects.ReportUser;
36 import org.efs.openreports.providers.DataSourceProvider;
37 import org.efs.openreports.providers.DataSourceProviderAware;
38 import org.efs.openreports.providers.DirectoryProvider;
39 import org.efs.openreports.providers.DirectoryProviderAware;
40 import org.efs.openreports.providers.PropertiesProvider;
41 import org.efs.openreports.providers.PropertiesProviderAware;
42 import org.efs.openreports.providers.ReportLogProvider;
43 import org.efs.openreports.providers.ReportLogProviderAware;
44
45 import com.opensymphony.xwork.ActionContext;
46 import com.opensymphony.xwork.ActionSupport;
47
48 public class QueryReportAction extends ActionSupport
49         implements
50             ReportLogProviderAware,
51             DataSourceProviderAware,
52             PropertiesProviderAware, DirectoryProviderAware
53 {
54     protected static Logger log = Logger.getLogger(QueryReportAction.class);
55
56     protected DataSourceProvider dataSourceProvider;
57     protected ReportLogProvider reportLogProvider;
58     protected PropertiesProvider propertiesProvider;
59     protected DirectoryProvider directoryProvider;
60     
61     protected Report report;
62     
63     private String JavaDoc html;
64
65     public String JavaDoc execute()
66     {
67         //remove results of any previous query report from session
68
ActionContext.getContext().getSession().remove(ORStatics.QUERY_REPORT_RESULTS);
69         ActionContext.getContext().getSession().remove(ORStatics.QUERY_REPORT_PROPERTIES);
70         
71         ReportUser user = (ReportUser) ActionContext.getContext().getSession().get(
72                 ORStatics.REPORT_USER);
73
74         report = (Report) ActionContext.getContext().getSession().get(ORStatics.REPORT);
75
76         Map JavaDoc reportParameters = getReportParameterMap(user);
77
78         ReportLog reportLog = new ReportLog(user, report, new Date JavaDoc());
79
80         try
81         {
82             log.debug("Starting Query Report: " + report.getName());
83             log.debug("Query: " + report.getQuery());
84
85             reportLogProvider.insertReportLog(reportLog);
86             
87             ReportEngineInput input = new ReportEngineInput(report, reportParameters);
88             
89             if (report.isJFreeReport())
90             {
91                 JFreeReportEngine jfreeReportEngine = new JFreeReportEngine(
92                         dataSourceProvider, directoryProvider, propertiesProvider);
93                 
94                 ReportEngineOutput output = jfreeReportEngine.generateReport(input);
95                 
96                 html = new String JavaDoc(output.getContent());
97             }
98             else
99             {
100                 QueryReportEngine queryReportEngine = new QueryReportEngine(
101                         dataSourceProvider, directoryProvider, propertiesProvider);
102                 
103                 QueryEngineOutput output = (QueryEngineOutput) queryReportEngine.generateReport(input);
104                 
105                 ActionContext.getContext().getSession().put(
106                         ORStatics.QUERY_REPORT_RESULTS, output.getResults());
107                 
108                 ActionContext.getContext().getSession().put(
109                         ORStatics.QUERY_REPORT_PROPERTIES,
110                         output.getProperties());
111             }
112
113             reportLog.setEndTime(new Date JavaDoc());
114             reportLog.setStatus(ReportLog.STATUS_SUCCESS);
115             reportLogProvider.updateReportLog(reportLog);
116
117             log.debug("Finished Query Report: " + report.getName());
118         }
119         catch (Exception JavaDoc e)
120         {
121
122             addActionError(e.getMessage());
123
124             log.error(e.getMessage());
125
126             reportLog.setMessage(e.getMessage());
127             reportLog.setStatus(ReportLog.STATUS_FAILURE);
128
129             reportLog.setEndTime(new Date JavaDoc());
130
131             try
132             {
133                 reportLogProvider.updateReportLog(reportLog);
134             }
135             catch (Exception JavaDoc ex)
136             {
137                 log.error("Unable to create ReportLog: " + ex.getMessage());
138             }
139
140             return ERROR;
141         }
142         
143         if (report.isJFreeReport()) return ORStatics.JFREEREPORT_RESULT;
144         
145         return SUCCESS;
146     }
147
148     protected Map JavaDoc getReportParameterMap(ReportUser user)
149     {
150         Map JavaDoc reportParameters = new HashMap JavaDoc();
151
152         if (ActionContext.getContext().getSession().get(ORStatics.REPORT_PARAMETERS) != null)
153         {
154             reportParameters = (Map JavaDoc) ActionContext.getContext().getSession().get(
155                     ORStatics.REPORT_PARAMETERS);
156         }
157
158         // add standard report parameters
159
reportParameters.put(ORStatics.USER_ID, user.getId());
160         reportParameters.put(ORStatics.EXTERNAL_ID, user.getExternalId());
161         reportParameters.put(ORStatics.USER_NAME, user.getName());
162
163         return reportParameters;
164     }
165
166     public void setReportLogProvider(ReportLogProvider reportLogProvider)
167     {
168         this.reportLogProvider = reportLogProvider;
169     }
170
171     public void setDataSourceProvider(DataSourceProvider dataSourceProvider)
172     {
173         this.dataSourceProvider = dataSourceProvider;
174     }
175
176     public void setPropertiesProvider(PropertiesProvider propertiesProvider)
177     {
178         this.propertiesProvider = propertiesProvider;
179     }
180     
181     public void setDirectoryProvider(DirectoryProvider directoryProvider)
182     {
183         this.directoryProvider = directoryProvider;
184     }
185
186     public String JavaDoc getHtml()
187     {
188         return html;
189     }
190     
191     public Report getReport()
192     {
193         return report;
194     }
195 }
Popular Tags