001: /*
002: * Copyright 2006 Pentaho Corporation. All rights reserved.
003: * This software was developed by Pentaho Corporation and is provided under the terms
004: * of the Mozilla Public License, Version 1.1, or any later version. You may not use
005: * this file except in compliance with the license. If you need a copy of the license,
006: * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
007: * BI Platform. The Initial Developer is Pentaho Corporation.
008: *
009: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
010: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
011: * the license for the specific language governing your rights and limitations.
012: *
013: * @created Aug 24, 2005
014: * @author James Dixon
015: */
016:
017: package org.pentaho.ui.portlet.charting;
018:
019: import java.io.IOException;
020: import java.util.ArrayList;
021: import java.util.StringTokenizer;
022:
023: import javax.portlet.ActionRequest;
024: import javax.portlet.ActionResponse;
025: import javax.portlet.PortletException;
026: import javax.portlet.PortletPreferences;
027: import javax.portlet.RenderRequest;
028: import javax.portlet.RenderResponse;
029:
030: import org.apache.commons.logging.Log;
031: import org.apache.commons.logging.LogFactory;
032: import org.pentaho.core.solution.HttpRequestParameterProvider;
033: import org.pentaho.core.solution.HttpSessionParameterProvider;
034: import org.pentaho.core.ui.IPentahoUrlFactory;
035: import org.pentaho.core.util.UIUtil;
036: import org.pentaho.messages.Messages;
037: import org.pentaho.ui.component.charting.AbstractJFreeChartComponent;
038: import org.pentaho.ui.portlet.PentahoPortletSession;
039: import org.pentaho.ui.portlet.PortletPreferencesParameterProvider;
040: import org.pentaho.ui.portlet.PortletRequestParameterProvider;
041: import org.pentaho.ui.portlet.PortletSessionParameterProvider;
042: import org.pentaho.ui.portlet.PortletUrlFactory;
043: import org.pentaho.ui.portlet.ViewPortlet;
044:
045: public abstract class AbstractDatasetChartPortlet extends ViewPortlet {
046:
047: private static final String CHART = "chart"; //$NON-NLS-1$
048:
049: private static final Log portletLogger = LogFactory
050: .getLog(AbstractDatasetChartPortlet.class);
051:
052: public Log getLogger() {
053: return portletLogger;
054: }
055:
056: public void processPortletAction(ActionRequest request,
057: ActionResponse response, PentahoPortletSession userSession)
058: throws PortletException, IOException {
059:
060: }
061:
062: public void doPortletView(RenderRequest request,
063: RenderResponse response, PentahoPortletSession userSession)
064: throws PortletException, IOException {
065: response.setContentType("text/html"); //$NON-NLS-1$
066:
067: PortletUrlFactory urlFactory = new PortletUrlFactory(response,
068: request.getWindowState(), request.getPortletMode());
069:
070: PortletRequestParameterProvider requestParameters = new PortletRequestParameterProvider(
071: request);
072: PortletSessionParameterProvider sessionParameters = new PortletSessionParameterProvider(
073: userSession);
074: PortletPreferences prefs = request.getPreferences();
075: PortletPreferencesParameterProvider portletPrefsParameters = new PortletPreferencesParameterProvider(
076: prefs);
077:
078: String chartDefinitionStr = getSetting(CHART, null, request,
079: requestParameters);
080:
081: if (chartDefinitionStr == null) {
082: response
083: .getWriter()
084: .print(
085: Messages
086: .getString("AbstractDatasetChartPortlet.ERROR_0001.NO_CHART_DEF")); //$NON-NLS-1$
087: return;
088: }
089:
090: ArrayList messages = new ArrayList();
091: AbstractJFreeChartComponent chartComponent = null;
092: String urlDrillTemplate = getSetting(
093: "drill-url", null, request, null); //$NON-NLS-1$
094: String outerParams = getSetting(
095: "outer-params", null, request, null); //$NON-NLS-1$
096: String innerParam = getSetting(
097: "inner-param", null, request, null); //$NON-NLS-1$
098:
099: try {
100: chartComponent = getNewChartComponent(chartDefinitionStr,
101: urlFactory, messages);
102: chartComponent.validate(userSession, null);
103: chartComponent.setUrlTemplate(urlDrillTemplate);
104: if (outerParams != null) {
105: StringTokenizer tokenizer = new StringTokenizer(
106: outerParams, ";"); //$NON-NLS-1$
107: while (tokenizer.hasMoreTokens()) {
108: chartComponent.addOuterParamName(tokenizer
109: .nextToken());
110: }
111: }
112: chartComponent.setParamName(innerParam);
113:
114: chartComponent.setDataAction(chartDefinitionStr);
115:
116: chartComponent.setParameterProvider(
117: HttpRequestParameterProvider.SCOPE_REQUEST,
118: requestParameters);
119: chartComponent.setParameterProvider(
120: HttpSessionParameterProvider.SCOPE_SESSION,
121: sessionParameters);
122: chartComponent
123: .setParameterProvider(
124: PortletPreferencesParameterProvider.SCOPE_PORTLET_PREFERENCES,
125: portletPrefsParameters);
126:
127: String content = chartComponent.getContent("text/html"); //$NON-NLS-1$
128:
129: if (content == null || content.equals("")) { //$NON-NLS-1$
130: content = " "; //$NON-NLS-1$
131: }
132: response.getWriter().print(content);
133:
134: if (content == null) {
135: StringBuffer buffer = new StringBuffer();
136: UIUtil
137: .formatErrorMessage(
138: "text/html", Messages.getString("AbstractDatasetChartPortlet.ERROR_0002.COULD_NOT_CREATE"), messages, buffer); //$NON-NLS-1$ //$NON-NLS-2$
139: content = buffer.toString();
140: }
141: } finally {
142: if (chartComponent != null)
143: chartComponent.dispose();
144: }
145: }
146:
147: protected abstract AbstractJFreeChartComponent getNewChartComponent(
148: String definitionPath, IPentahoUrlFactory urlFactory,
149: ArrayList messages);
150: }
|