ViewAction.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
org.pentaho.ui.servlet |
![]() |
![]() |
Pentaho |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/*
* Copyright 2006 Pentaho Corporation. All rights reserved.
* This software was developed by Pentaho Corporation and is provided under the terms
* of the Mozilla Public License, Version 1.1, or any later version. You may not use
* this file except in compliance with the license. If you need a copy of the license,
* please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
* BI Platform. The Initial Developer is Pentaho Corporation.
*
* Software distributed under the Mozilla Public License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
* the license for the specific language governing your rights and limitations.
*
* @created Jul 12, 2005
* @author James Dixon
*
*/
package org.pentaho.ui.servlet;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.core.repository.IContentItem;
import org.pentaho.core.repository.ISolutionRepository;
import org.pentaho.core.runtime.IBackgroundExecution;
import org.pentaho.core.runtime.IRuntimeContext;
import org.pentaho.ui.servlet.HttpServletRequestHandler;
import org.pentaho.core.session.IPentahoSession;
import org.pentaho.core.solution.HttpOutputHandler;
import org.pentaho.core.solution.HttpRequestParameterProvider;
import org.pentaho.core.solution.HttpSessionParameterProvider;
import org.pentaho.core.solution.IActionDefinition;
import org.pentaho.core.solution.IOutputHandler;
import org.pentaho.core.solution.IParameterProvider;
import org.pentaho.core.subscribe.SubscriptionHelper;
import org.pentaho.core.solution.IActionSequence;
import org.pentaho.core.system.ISystemSettings;
import org.pentaho.core.system.PentahoSystem;
import org.pentaho.core.ui.SimpleUrlFactory;
import org.pentaho.core.util.IUITemplater;
import org.pentaho.core.util.UIUtil;
import org.pentaho.messages.Messages;
import org.pentaho.messages.util.LocaleHelper;
/**
* Servlet Class
*
* web.servlet name="ViewAction" display-name="Name for ViewAction" description="Description for ViewAction" web.servlet-mapping url-pattern="/ViewAction"
* web.servlet-init-param name="A parameter" value="A value"
*/
public class ViewAction extends ServletBase {
private static final long serialVersionUID = 4680027723733552639L;
private static final Log logger = LogFactory.getLog(ViewAction.class);
public Log getLogger() {
return logger;
}
/**
*
*/
public ViewAction() {
super();
}
protected void setupSession(IPentahoSession userSession) {
PentahoSystem.sessionStartup(userSession);
}
protected void removeUserSession(IPentahoSession userSession) {
userSession.destroy();
}
protected boolean doBackgroundExecution(HttpServletRequest request, HttpServletResponse response,
IPentahoSession userSession) throws ServletException, IOException {
if( "true".equals( request.getParameter( "background" ) ) ) { //$NON-NLS-1$ //$NON-NLS-2$
IBackgroundExecution backgroundExecutionHandler = PentahoSystem.getBackgroundExecutionHandler(userSession);
if (backgroundExecutionHandler != null) {
HttpRequestParameterProvider parameterProvider = new HttpRequestParameterProvider(request);
String backgroundResponse = backgroundExecutionHandler.backgroundExecuteAction(userSession, parameterProvider);
String intro = ""; //$NON-NLS-1$
String footer = ""; //$NON-NLS-1$
IUITemplater templater = PentahoSystem.getUITemplater( userSession );
if( templater != null ) {
String sections[] = templater.breakTemplate( "template-dialog.html", "", userSession ); //$NON-NLS-1$ //$NON-NLS-2$
if( sections != null && sections.length > 0 ) {
intro = sections[0];
}
if( sections != null && sections.length > 1 ) {
footer = sections[1];
}
} else {
intro = Messages.getString( "UI.ERROR_0002_BAD_TEMPLATE_OBJECT" ); //$NON-NLS-1$
}
response.getWriter().print(intro);
response.getWriter().print(backgroundResponse);
response.getWriter().print(footer);
return true;
} else {
error(Messages.getErrorString("BackgroundExecuteHelper.ERROR_0001_BACKGROUND_EXECUTE_NOT_SUPPORTED")); //$NON-NLS-1$
}
}
return false;
}
protected OutputStream getOutputStream(HttpServletResponse response, boolean doMessages) throws ServletException,
IOException {
OutputStream outputStream = null;
if (doMessages) {
outputStream = new ByteArrayOutputStream();
} else {
outputStream = response.getOutputStream();
}
return outputStream;
}
protected boolean doMessages(HttpServletRequest request) {
return "true".equalsIgnoreCase(request.getParameter("debug")); //$NON-NLS-1$ //$NON-NLS-2$
}
protected void handleActionRequest(HttpServletRequest request, HttpServletResponse response,
HttpOutputHandler outputHandler, HttpServletRequestHandler requestHandler, OutputStream outputStream,
IContentItem contentItem) throws ServletException, IOException {
IRuntimeContext runtime = null;
try {
runtime = requestHandler.handleActionRequest(0, 0);
// see if we need to provide feedback to the caller
if (!outputHandler.contentDone() || doMessages(request)) {
outputHandler.getOutputContent().setMimeType( "text/html" );//$NON-NLS-1$
outputStream = outputHandler.getOutputContent().getOutputStream( null );
response.setContentType("text/html"); //$NON-NLS-1$
StringBuffer buffer = new StringBuffer();
if ((runtime != null) && (runtime.getStatus() == IRuntimeContext.RUNTIME_STATUS_SUCCESS)) {
boolean doWrapper = !("false".equals(request.getParameter("wrapper"))); //$NON-NLS-1$ //$NON-NLS-2$
UIUtil.formatSuccessMessage("text/html", runtime, buffer, doMessages(request), doWrapper); //$NON-NLS-1$
} else {
// we need an error message...
UIUtil.formatFailureMessage("text/html", runtime, buffer, requestHandler.getMessages()); //$NON-NLS-1$
}
outputStream.write(buffer.toString().getBytes(LocaleHelper.getSystemEncoding()));
outputHandler.getOutputContent().closeOutputStream();
}
} finally {
if (runtime != null) {
runtime.dispose();
}
}
if( contentItem != null ) {
contentItem.closeOutputStream();
}
}
protected void setupRequestHandler(HttpServletRequest request, HttpServletRequestHandler requestHandler) {
String prompt = request.getParameter("prompt"); //$NON-NLS-1$
String solutionName = request.getParameter("solution"); //$NON-NLS-1$
String actionPath = request.getParameter("path"); //$NON-NLS-1$
String actionName = request.getParameter("action"); //$NON-NLS-1$
String processId = this.getClass().getName();
String instanceId = request.getParameter("instance-id"); //$NON-NLS-1$
requestHandler.setInstanceId(instanceId);
requestHandler.setProcessId(processId);
requestHandler.setAction(actionPath, actionName);
requestHandler.setSolutionName(solutionName);
requestHandler.setForcePrompt(prompt != null && prompt.equalsIgnoreCase("yes")); //$NON-NLS-1$
}
protected void setupOutputHandler(HttpOutputHandler outputHandler, IParameterProvider requestParameters) {
int outputPreference = IOutputHandler.OUTPUT_TYPE_DEFAULT;
if (doSubscribe(requestParameters)) {
outputPreference = IOutputHandler.OUTPUT_TYPE_PARAMETERS;
}
outputHandler.setOutputPreference(outputPreference);
}
protected HttpServletRequestHandler getRequestHandler(HttpServletRequest request, HttpServletResponse response,
IPentahoSession userSession, IParameterProvider requestParameters, OutputStream outputStream,
HttpOutputHandler outputHandler, SimpleUrlFactory urlFactory) throws ServletException, IOException {
HttpServletRequestHandler requestHandler = new HttpServletRequestHandler(userSession, null, request, outputHandler,
urlFactory);
setupRequestHandler(request, requestHandler, requestParameters, userSession);
return requestHandler;
}
protected HttpOutputHandler createOutputHandler( HttpServletResponse response, OutputStream outputStream ) {
return new HttpOutputHandler(response, outputStream, true);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PentahoSystem.systemEntryPoint();
IContentItem contentItem = null;
try {
IPentahoSession userSession = getPentahoSession(request);
if (!doBackgroundExecution(request, response, userSession)) {
OutputStream outputStream = getOutputStream(response, doMessages(request));
ISolutionRepository repository = PentahoSystem.getSolutionRepository( userSession );
String solutionName = request.getParameter("solution"); //$NON-NLS-1$
String actionPath = request.getParameter("path"); //$NON-NLS-1$
String actionName = request.getParameter("action"); //$NON-NLS-1$
IActionSequence actionSequence = repository.getActionSequence(solutionName, actionPath, actionName,
PentahoSystem.loggingLevel, ISolutionRepository.ACTION_EXECUTE);
String fileName = null;
if( actionSequence != null ) {
String title = actionSequence.getTitle();
if (title != null && title.length() > 0) {
fileName = title;
} else {
String sequenceName = actionSequence.getSequenceName();
if (sequenceName != null && sequenceName.length() > 0) {
fileName = sequenceName;
} else {
List actionDefinitionsList = actionSequence.getActionDefinitionsAndSequences();
int i = 0;
boolean done = false;
while(actionDefinitionsList.size() > i && !done) {
IActionDefinition actionDefinition = (IActionDefinition) actionDefinitionsList.get(i);
String componentName = actionDefinition.getComponentName();
if (componentName != null && componentName.length() > 0) {
fileName = componentName;
done = true;
} else {
i++;
}
}
}
}
}
HttpOutputHandler outputHandler = createOutputHandler(response, outputStream);
outputHandler.setSession( userSession );
if( contentItem != null && fileName != null ) {
outputHandler.setOutputContent( contentItem );
}
HttpMimeTypeListener listener = new HttpMimeTypeListener( request, response, fileName );
outputHandler.setMimeTypeListener( listener );
SimpleUrlFactory urlFactory = new SimpleUrlFactory(PentahoSystem.getApplicationContext().getBaseUrl()
+ "ViewAction?"); //$NON-NLS-1$
IParameterProvider requestParameters = new HttpRequestParameterProvider(request);
setupOutputHandler(outputHandler, requestParameters);
if (!handleSubscriptions(request, response, userSession, requestParameters, outputStream, urlFactory)) {
HttpServletRequestHandler requestHandler = getRequestHandler(request, response, userSession,
requestParameters, outputStream, outputHandler, urlFactory);
handleActionRequest(request, response, outputHandler, requestHandler, outputStream, contentItem);
}
}
} finally {
PentahoSystem.systemExitPoint();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
///////////////////// Merge
protected boolean doSubscribe(IParameterProvider requestParameters) {
return requestParameters.getStringParameter("subscribepage", "no").equalsIgnoreCase("yes"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
protected boolean handleSubscriptions(HttpServletRequest request, HttpServletResponse response,
IPentahoSession userSession, IParameterProvider requestParameters, OutputStream outputStream,
SimpleUrlFactory urlFactory) throws ServletException, IOException {
// see if we have any subscription information to process
String subscribeAction = request.getParameter("subscribe"); //$NON-NLS-1$
if ("run".equals(subscribeAction)) { //$NON-NLS-1$
String name = requestParameters.getStringParameter("subscribe-name", null); //$NON-NLS-1$
HttpSessionParameterProvider sessionParameters = new HttpSessionParameterProvider(userSession);
HttpOutputHandler outputHandler = new HttpOutputHandler(response, outputStream, true);
SubscriptionHelper.runSubscription(name, userSession, sessionParameters, urlFactory, outputHandler);
return true;
} else if ("archived".equals(subscribeAction)) { //$NON-NLS-1$
String name = requestParameters.getStringParameter("subscribe-name", null); //$NON-NLS-1$
int pos = name.lastIndexOf(':');
if (pos != -1) {
String fileId = name.substring(pos + 1);
name = name.substring(0, pos);
HttpOutputHandler outputHandler = new HttpOutputHandler(response, outputStream, true);
SubscriptionHelper.getArchived(name, fileId, userSession, outputHandler);
}
return true;
} else if ("archive".equals(subscribeAction)) { //$NON-NLS-1$
String name = requestParameters.getStringParameter("subscribe-name", null); //$NON-NLS-1$
HttpSessionParameterProvider sessionParameters = new HttpSessionParameterProvider(userSession);
String resp = SubscriptionHelper.createSubscriptionArchive(name, userSession, null, sessionParameters);
HttpOutputHandler outputHandler = new HttpOutputHandler(response, outputStream, true);
IContentItem contentItem = outputHandler.getOutputContentItem(IOutputHandler.RESPONSE, IOutputHandler.CONTENT,
null, null, "text/html"); //$NON-NLS-1$
outputStream = contentItem.getOutputStream(name);
outputStream.write(resp.getBytes());
contentItem.closeOutputStream();
return true;
} else if ("save".equals(subscribeAction)) { //$NON-NLS-1$
String solutionName = requestParameters.getStringParameter("solution", null); //$NON-NLS-1$
String actionPath = requestParameters.getStringParameter("path", null); //$NON-NLS-1$
String actionName = requestParameters.getStringParameter("action", null); //$NON-NLS-1$
String actionReference = solutionName + "/" + actionPath + "/" + actionName; //$NON-NLS-1$ //$NON-NLS-2$
// HttpSessionParameterProvider sessionParameters = new
// HttpSessionParameterProvider( userSession );
String result = SubscriptionHelper.saveSubscription(requestParameters, actionReference, userSession);
outputStream.write(result.getBytes());
return true;
} else if ("edit".equals(subscribeAction)) { //$NON-NLS-1$
// TODO
// get the action information from the subscription
String name = requestParameters.getStringParameter("subscribe-name", null); //$NON-NLS-1$
SubscriptionHelper.editSubscription(name, userSession, urlFactory, outputStream);
/*
*
* SimpleParameterSetter parameters = new SimpleParameterSetter(); String result = SubscriptionHelper.getSubscriptionParameters( name, parameters,
* userSession ); outputPreference = IOutputHandler.OUTPUT_TYPE_PARAMETERS; requestParameters = parameters; SubscriptionHelper.editSubscription if( result !=
* null ) { outputStream.write(result.getBytes()); return; }
*/
return true;
} else if ("delete".equals(subscribeAction)) { //$NON-NLS-1$
String name = requestParameters.getStringParameter("subscribe-name", null); //$NON-NLS-1$
String result = SubscriptionHelper.deleteSubscription(name, userSession);
outputStream.write(result.getBytes());
return true;
} else if ("delete-archived".equals(subscribeAction)) { //$NON-NLS-1$
String name = requestParameters.getStringParameter("subscribe-name", null); //$NON-NLS-1$
int pos = name.lastIndexOf(':');
if (pos != -1) {
String fileId = name.substring(pos + 1);
name = name.substring(0, pos);
String result = SubscriptionHelper.deleteSubscriptionArchive(name, fileId, userSession);
outputStream.write(result.getBytes());
return true;
}
}
return false;
}
protected void setupRequestHandler(HttpServletRequest request, HttpServletRequestHandler requestHandler,
IParameterProvider requestParameters, IPentahoSession userSession) {
this.setupRequestHandler(request, requestHandler);
// first take a secondary action
String actionName = requestParameters.getStringParameter("action2", null); //$NON-NLS-1$
if (actionName == null) {
// now look for a primary action
actionName = requestParameters.getStringParameter("action", null); //$NON-NLS-1$
}
/*
// TODO: DM test code
if (ISolutionEngine.RUNTIME_SOLUTION_NAME.equals(requestHandler.getSolutionName()) && "preview.xaction".equalsIgnoreCase(actionName)) {
requestHandler.setActionPath(getActionSequence(userSession));
}
*/
//Proposed fix for bug BISERVER-97 by Ezequiel Cuellar
//Changed to set parameterXsl from the value specified specified in the Pentaho.xml tag "default-parameter-xsl"
//Proposed fix for bug BISERVER-238 by Ezequiel Cuellar
//Code refactoring. DefaultParameterForm.xsl was always getting set so I just refactored the code
//by adding a default value of DefaultParameterForm.xsl when getting the value of default-parameter-xsl
ISystemSettings systemSettings = PentahoSystem.getSystemSettings();
String defaultParameterXsl = systemSettings.getSystemSetting("default-parameter-xsl", "DefaultParameterForm.xsl"); //$NON-NLS-1$ //$NON-NLS-2$
requestHandler.setParameterXsl(defaultParameterXsl);
if (doSubscribe(requestParameters)) {
requestHandler.setForcePrompt(true);
requestHandler.setParameterProvider("PRO_EDIT_SUBSCRIPTION", requestParameters); //$NON-NLS-1$
}
}
/*
// TODO: Test Code Only!!! DM - returns an actionsequence as a string
private String getActionSequence(IPentahoSession session) {
try {
return (PentahoSystem.getSolutionRepository(session).getResourceAsString("test/metadata/EmbeddedReport.xaction")); //$NON-NLS-1$
} catch (Throwable t) {
}
return (""); //$NON-NLS-1$
// File f = new File( "test/metadata/EmbeddedReport.xaction" );
// return( FileHelper.getStringFromFile(f) );
}
*/
}
The table below shows all metrics for ViewAction.java.




