KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pentaho > ui > ChartHelper


1 /*
2  * Copyright 2006 Pentaho Corporation. All rights reserved.
3  * This software was developed by Pentaho Corporation and is provided under the terms
4  * of the Mozilla Public License, Version 1.1, or any later version. You may not use
5  * this file except in compliance with the license. If you need a copy of the license,
6  * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
7  * BI Platform. The Initial Developer is Pentaho Corporation.
8  *
9  * Software distributed under the Mozilla Public License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
11  * the license for the specific language governing your rights and limitations.
12  *
13  * @created Apr 17, 2006
14  * @author James Dixon
15  */

16
17 package org.pentaho.ui;
18
19 import java.io.File JavaDoc;
20 import java.io.OutputStream JavaDoc;
21 import java.util.ArrayList JavaDoc;
22 import java.util.StringTokenizer JavaDoc;
23
24 import org.pentaho.core.connection.IPentahoConnection;
25 import org.pentaho.core.connection.IPentahoResultSet;
26 import org.pentaho.core.runtime.IRuntimeContext;
27 import org.pentaho.core.services.BaseRequestHandler;
28 import org.pentaho.core.session.IPentahoSession;
29 import org.pentaho.core.solution.IParameterProvider;
30 import org.pentaho.core.solution.SimpleOutputHandler;
31 import org.pentaho.core.system.PentahoSystem;
32 import org.pentaho.core.ui.SimpleUrlFactory;
33 import org.pentaho.core.util.TemplateUtil;
34 import org.pentaho.core.util.UIUtil;
35 import org.pentaho.data.connection.sql.SQLConnection;
36 import org.pentaho.messages.Messages;
37 import org.pentaho.plugin.jfreechart.CategoryDatasetChartDefinition;
38 import org.pentaho.ui.component.DashboardWidgetComponent;
39 import org.pentaho.ui.component.charting.CategoryDatasetChartComponent;
40 import org.pentaho.ui.component.charting.PieDatasetChartComponent;
41 import org.pentaho.util.logging.ILogger;
42
43 public class ChartHelper {
44
45     public static boolean doAction(String JavaDoc solutionName, String JavaDoc actionPath, String JavaDoc actionName, String JavaDoc processId, IParameterProvider parameterProvider, OutputStream JavaDoc outputStream, IPentahoSession userSession, ArrayList JavaDoc messages, ILogger logger) {
46
47         SimpleOutputHandler outputHandler = new SimpleOutputHandler(outputStream, false);
48             BaseRequestHandler requestHandler = new BaseRequestHandler(userSession, null, outputHandler, parameterProvider, null);
49
50             requestHandler.setProcessId( processId );
51         requestHandler.setAction(actionPath, actionName);
52         requestHandler.setSolutionName(solutionName);
53
54         IRuntimeContext runtime = null;
55         int status = IRuntimeContext.RUNTIME_STATUS_FAILURE;
56         try {
57             runtime = requestHandler.handleActionRequest(0, 0);
58             if( runtime != null ) {
59                 status = runtime.getStatus();
60             }
61         } finally {
62             if (runtime != null) {
63                 runtime.dispose();
64             }
65         }
66         return status == IRuntimeContext.RUNTIME_STATUS_SUCCESS;
67     }
68
69     public static IRuntimeContext doAction(String JavaDoc solutionName, String JavaDoc actionPath, String JavaDoc actionName, String JavaDoc processId, IParameterProvider parameterProvider, IPentahoSession userSession, ArrayList JavaDoc messages, ILogger logger) {
70
71         SimpleOutputHandler outputHandler = new SimpleOutputHandler(null, false);
72             BaseRequestHandler requestHandler = new BaseRequestHandler(userSession, null, outputHandler, parameterProvider, null);
73
74             requestHandler.setProcessId( processId );
75         requestHandler.setAction(actionPath, actionName);
76         requestHandler.setSolutionName(solutionName);
77
78         IRuntimeContext runtime = null;
79         try {
80             runtime = requestHandler.handleActionRequest(0, 0);
81         } catch (Throwable JavaDoc t) {
82         }
83         return runtime;
84     }
85
86     public static boolean doPieChart(String JavaDoc solutionName, String JavaDoc actionPath, String JavaDoc actionName, IParameterProvider parameterProvider, StringBuffer JavaDoc outputStream, IPentahoSession userSession, ArrayList JavaDoc messages, ILogger logger) {
87
88         boolean result = true;
89         String JavaDoc outerParams = parameterProvider.getStringParameter("outer-params", null); //$NON-NLS-1$
90
String JavaDoc innerParam = parameterProvider.getStringParameter("inner-param", null); //$NON-NLS-1$
91

92         String JavaDoc urlDrillTemplate = parameterProvider.getStringParameter("drill-url", null); //$NON-NLS-1$
93
String JavaDoc imageUrl = parameterProvider.getStringParameter("image-url", null); //$NON-NLS-1$
94
if (imageUrl == null) {
95             imageUrl = PentahoSystem.getApplicationContext().getBaseUrl();
96         }
97
98         if (urlDrillTemplate == null) {
99             urlDrillTemplate = ""; //$NON-NLS-1$
100
}
101
102         SimpleUrlFactory urlFactory = new SimpleUrlFactory(urlDrillTemplate);
103
104         PieDatasetChartComponent chartComponent = null;
105         try {
106             String JavaDoc chartDefinitionStr = solutionName + File.separator + actionPath + File.separator + actionName;
107             chartComponent = new PieDatasetChartComponent(chartDefinitionStr, urlFactory, messages);
108             if( logger != null ) {
109                 chartComponent.setLoggingLevel( logger.getLoggingLevel() );
110             }
111             chartComponent.validate(userSession, null);
112             chartComponent.setUrlTemplate(urlDrillTemplate);
113             if (outerParams != null) {
114                 StringTokenizer JavaDoc tokenizer = new StringTokenizer JavaDoc(outerParams, ";"); //$NON-NLS-1$
115
while (tokenizer.hasMoreTokens()) {
116                     chartComponent.addOuterParamName(tokenizer.nextToken());
117                 }
118             }
119             chartComponent.setParamName(innerParam);
120
121             chartComponent.setDataAction(chartDefinitionStr);
122
123             chartComponent.setParameterProvider("request", parameterProvider); //$NON-NLS-1$
124

125             String JavaDoc content = chartComponent.getContent("text/html"); //$NON-NLS-1$
126

127             if (content == null || content.equals("")) { //$NON-NLS-1$
128
content = " "; //$NON-NLS-1$
129
}
130             if (content == null) {
131                 StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
132                 UIUtil.formatErrorMessage("text/html", Messages.getString("Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET"), messages, buffer); //$NON-NLS-1$ //$NON-NLS-2$
133
content = buffer.toString();
134                 result = false;
135             }
136
137             outputStream.append(content);
138                 
139         } finally {
140             if (chartComponent != null)
141                 chartComponent.dispose();
142         }
143         return result;
144
145     }
146
147     public static boolean doDial(String JavaDoc solutionName, String JavaDoc actionPath, String JavaDoc actionName, IParameterProvider parameterProvider, StringBuffer JavaDoc outputStream, IPentahoSession userSession, ArrayList JavaDoc messages, ILogger logger) {
148
149         boolean result = true;
150         String JavaDoc linkUrl = parameterProvider.getStringParameter("drill-url", null); //$NON-NLS-1$
151
String JavaDoc imageUrl = parameterProvider.getStringParameter("image-url", null); //$NON-NLS-1$
152
if (imageUrl == null) {
153             imageUrl = PentahoSystem.getApplicationContext().getBaseUrl();
154         }
155
156         if (linkUrl == null) {
157             linkUrl = ""; //$NON-NLS-1$
158
}
159
160         int width = (int) parameterProvider.getLongParameter("image-width", 150); //$NON-NLS-1$
161
int height = (int) parameterProvider.getLongParameter("image-height", 150); //$NON-NLS-1$
162

163         SimpleUrlFactory urlFactory = new SimpleUrlFactory(linkUrl);
164
165         DashboardWidgetComponent widget = null;
166         try {
167             widget = new DashboardWidgetComponent(DashboardWidgetComponent.TYPE_DIAL, solutionName + File.separator + actionPath + File.separator + actionName, width, height, urlFactory, messages);
168             if( logger != null ) {
169                 widget.setLoggingLevel( logger.getLoggingLevel() );
170             }
171             widget.validate(userSession, null);
172
173             widget.setParameterProvider("request", parameterProvider); //$NON-NLS-1$
174

175             double value = Double.parseDouble(parameterProvider.getStringParameter("value", "0")); //$NON-NLS-1$ //$NON-NLS-2$
176
widget.setValue(value);
177
178             String JavaDoc title = parameterProvider.getStringParameter("title", ""); //$NON-NLS-1$ //$NON-NLS-2$
179
widget.setTitle(title);
180
181             String JavaDoc content = widget.getContent("text/html"); //$NON-NLS-1$
182

183             if (content == null) {
184                 StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
185                 UIUtil.formatErrorMessage("text/html", Messages.getString("Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET"), messages, buffer); //$NON-NLS-1$ //$NON-NLS-2$
186
content = buffer.toString();
187                 result = false;
188             }
189
190             if (content == null || content.equals("")) { //$NON-NLS-1$
191
content = " "; //$NON-NLS-1$
192
}
193             outputStream.append(content);
194             
195         } finally {
196             if (widget != null)
197                 widget.dispose();
198         }
199         return result;
200
201     }
202     
203     public static boolean doChart(String JavaDoc solutionName, String JavaDoc actionPath, String JavaDoc actionName, IParameterProvider parameterProvider, StringBuffer JavaDoc outputStream, IPentahoSession userSession, ArrayList JavaDoc messages, ILogger logger) {
204
205         boolean result = true;
206         String JavaDoc outerParams = parameterProvider.getStringParameter("outer-params", null); //$NON-NLS-1$
207
String JavaDoc innerParam = parameterProvider.getStringParameter("inner-param", null); //$NON-NLS-1$
208

209         String JavaDoc urlDrillTemplate = parameterProvider.getStringParameter("drill-url", null); //$NON-NLS-1$
210
String JavaDoc imageUrl = parameterProvider.getStringParameter("image-url", null); //$NON-NLS-1$
211
if (imageUrl == null) {
212             imageUrl = PentahoSystem.getApplicationContext().getBaseUrl();
213         }
214
215         if (urlDrillTemplate == null) {
216             urlDrillTemplate = ""; //$NON-NLS-1$
217
}
218
219         int width = (int) parameterProvider.getLongParameter("image-width", 150); //$NON-NLS-1$
220
int height = (int) parameterProvider.getLongParameter("image-height", 150); //$NON-NLS-1$
221

222         SimpleUrlFactory urlFactory = new SimpleUrlFactory(urlDrillTemplate);
223
224         CategoryDatasetChartComponent chartComponent = null;
225         try {
226             String JavaDoc content = null;
227             try {
228                 String JavaDoc chartDefinitionStr = solutionName + File.separator + actionPath + File.separator + actionName;
229                 String JavaDoc chartTypeStr = parameterProvider.getStringParameter("chart-type", null); //$NON-NLS-1$
230
int chartType = CategoryDatasetChartDefinition.getChartType(chartTypeStr);
231                 chartComponent = new CategoryDatasetChartComponent(chartType, chartDefinitionStr, width, height, urlFactory, messages);
232                 if( logger != null ) {
233                     chartComponent.setLoggingLevel( logger.getLoggingLevel() );
234                 }
235                 chartComponent.validate(userSession, null);
236                 chartComponent.setDataAction(chartDefinitionStr);
237                 chartComponent.setUrlTemplate(urlDrillTemplate);
238
239                 String JavaDoc connectionName = parameterProvider.getStringParameter("connection", null); //$NON-NLS-1$
240
String JavaDoc query = parameterProvider.getStringParameter("query", null); //$NON-NLS-1$
241
String JavaDoc dataAction = parameterProvider.getStringParameter("data-process", null); //$NON-NLS-1$
242
String JavaDoc seriesName = parameterProvider.getStringParameter("series-name", null); //$NON-NLS-1$
243
chartComponent.setSeriesName( seriesName );
244                 IPentahoConnection connection = null;
245                 try {
246                     chartComponent.setParamName(innerParam);
247                     chartComponent.setParameterProvider("request", parameterProvider); //$NON-NLS-1$
248
if (connectionName != null && query != null) {
249                         connection = new SQLConnection(connectionName, logger);
250                         try {
251                             query = TemplateUtil.applyTemplate(query, TemplateUtil.parametersToProperties(parameterProvider), null);
252                             IPentahoResultSet results = connection.executeQuery(query);
253                             chartComponent.setValues(results);
254                         } finally {
255                         }
256                         chartComponent.setUrlTemplate(urlDrillTemplate);
257                         if (outerParams != null) {
258                             StringTokenizer JavaDoc tokenizer = new StringTokenizer JavaDoc(outerParams, ";"); //$NON-NLS-1$
259
while (tokenizer.hasMoreTokens()) {
260                                 chartComponent.addOuterParamName(tokenizer.nextToken());
261                             }
262                         }
263                     } else if (dataAction != null) {
264                         String JavaDoc actionInfo[] = PentahoSystem.parseActionString(dataAction);
265                         if (actionInfo != null && actionInfo.length == 3) {
266                             chartComponent.setDataAction(actionInfo[0], actionInfo[1], actionInfo[2], "rule-result"); //$NON-NLS-1$
267
}
268                     } else {
269 // logger.error(Messages.getErrorString("Widget.ERROR_0003_QUERY_CONNECTION_NOT_SPECIFIED")); //$NON-NLS-1$
270
}
271                     content = chartComponent.getContent("text/html"); //$NON-NLS-1$
272

273                 } finally {
274                     if (connection != null) {
275                         connection.close();
276                     }
277                 }
278
279
280             } catch (Exception JavaDoc e) {
281                 // not much we can do here...
282
}
283             try {
284                 if (content == null) {
285                     StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
286                     UIUtil.formatErrorMessage("text/html", Messages.getErrorString("Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET"), messages, buffer); //$NON-NLS-1$ //$NON-NLS-2$
287
content = buffer.toString();
288                     result = false;
289                 }
290                 outputStream.append(content);
291             } catch (Exception JavaDoc e) {
292
293             }
294         } finally {
295             if (chartComponent != null)
296                 chartComponent.dispose();
297         }
298         return result;
299
300     }
301     
302 }
303
Popular Tags