use of org.pentaho.platform.web.servlet.HttpMimeTypeListener in project pentaho-platform by pentaho.
the class XactionUtil method executeScheduleUi.
/**
* This method executes an xaction with forcePrompt=true and outputPreference=PARAMETERS, allowing for the xaction to
* render the secure filter appropriately when being executed in the background or while being scheduled.
*
* @param file the location of the xaction
* @param httpServletRequest the request object
* @param httpServletResponse the response object
* @param userSession the user session
* @return potential response message
* @throws Exception
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static String executeScheduleUi(RepositoryFile file, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, IPentahoSession userSession, IMimeTypeListener mimeTypeListener) throws Exception {
IParameterProvider requestParams = new HttpRequestParameterProvider(httpServletRequest);
IRuntimeContext runtime = null;
try {
HttpSessionParameterProvider sessionParameters = new HttpSessionParameterProvider(userSession);
HttpRequestParameterProvider requestParameters = new HttpRequestParameterProvider(httpServletRequest);
// $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
boolean doMessages = "true".equalsIgnoreCase(requestParams.getStringParameter("debug", "false"));
// $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
boolean doWrapper = "true".equalsIgnoreCase(requestParams.getStringParameter("wrapper", "true"));
IOutputHandler outputHandler = createOutputHandler(httpServletResponse, getOutputStream(httpServletResponse, doMessages));
if (mimeTypeListener == null) {
mimeTypeListener = new HttpMimeTypeListener(httpServletRequest, httpServletResponse, null);
}
outputHandler.setMimeTypeListener(mimeTypeListener);
outputHandler.setSession(userSession);
Map parameterProviders = new HashMap();
// $NON-NLS-1$
parameterProviders.put("request", requestParameters);
// $NON-NLS-1$
parameterProviders.put("session", sessionParameters);
createOutputFileName(file, outputHandler);
int outputPreference = IOutputHandler.OUTPUT_TYPE_PARAMETERS;
outputHandler.setOutputPreference(outputPreference);
List messages = new ArrayList();
// forcePrompt=true when displaying the scheduling UI
runtime = executeInternal(file, requestParams, httpServletRequest, outputHandler, parameterProviders, userSession, true, messages);
String str = postExecute(runtime, doMessages, doWrapper, outputHandler, parameterProviders, httpServletRequest, httpServletResponse, messages, false);
return str;
} catch (Exception e) {
// $NON-NLS-1$
logger.error(Messages.getInstance().getString("XactionUtil.ERROR_EXECUTING_ACTION_SEQUENCE", file.getName()), e);
throw e;
} finally {
if (runtime != null) {
runtime.dispose();
}
}
}
use of org.pentaho.platform.web.servlet.HttpMimeTypeListener in project pentaho-platform by pentaho.
the class XactionUtil method executeHtml.
@SuppressWarnings({ "unchecked", "rawtypes" })
public static String executeHtml(RepositoryFile file, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, IPentahoSession userSession, IMimeTypeListener mimeTypeListener) throws Exception {
IParameterProvider requestParams = new HttpRequestParameterProvider(httpServletRequest);
IRuntimeContext runtime = null;
try {
HttpSessionParameterProvider sessionParameters = new HttpSessionParameterProvider(userSession);
HttpRequestParameterProvider requestParameters = new HttpRequestParameterProvider(httpServletRequest);
// $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
boolean doMessages = "true".equalsIgnoreCase(requestParams.getStringParameter("debug", "false"));
// $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
boolean doWrapper = "true".equalsIgnoreCase(requestParams.getStringParameter("wrapper", "true"));
IOutputHandler outputHandler = createOutputHandler(httpServletResponse, getOutputStream(httpServletResponse, doMessages));
// disposition is set on the response header
if (mimeTypeListener == null) {
mimeTypeListener = new HttpMimeTypeListener(httpServletRequest, httpServletResponse, null);
}
outputHandler.setMimeTypeListener(mimeTypeListener);
outputHandler.setSession(userSession);
Map parameterProviders = new HashMap();
// $NON-NLS-1$
parameterProviders.put("request", requestParameters);
// $NON-NLS-1$
parameterProviders.put("session", sessionParameters);
createOutputFileName(file, outputHandler);
int outputPreference = IOutputHandler.OUTPUT_TYPE_DEFAULT;
outputHandler.setOutputPreference(outputPreference);
// $NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
boolean forcePrompt = "true".equalsIgnoreCase(requestParams.getStringParameter("prompt", "false"));
List messages = new ArrayList();
runtime = executeInternal(file, requestParams, httpServletRequest, outputHandler, parameterProviders, userSession, forcePrompt, messages);
String str = postExecute(runtime, doMessages, doWrapper, outputHandler, parameterProviders, httpServletRequest, httpServletResponse, messages, true);
return str;
} catch (Exception e) {
// $NON-NLS-1$
logger.error(Messages.getInstance().getString("XactionUtil.ERROR_EXECUTING_ACTION_SEQUENCE", file.getName()), e);
throw e;
} finally {
if (runtime != null) {
runtime.dispose();
}
}
}
use of org.pentaho.platform.web.servlet.HttpMimeTypeListener in project pentaho-platform by pentaho.
the class GeneratorStreamingOutput method generateContent.
protected void generateContent(OutputStream outputStream, final MimeTypeCallback callback) throws Exception {
try {
httpServletResponse.setCharacterEncoding(LocaleHelper.getSystemEncoding());
} catch (Throwable t) {
// $NON-NLS-1$
logger.warn("could not set encoding, servlet-api is likely too old. are we in a unit test?");
}
IOutputHandler outputHandler = new HttpOutputHandler(httpServletResponse, outputStream, true);
outputHandler.setMimeTypeListener(new HttpMimeTypeListener(httpServletRequest, httpServletResponse) {
/*
* This content generator is setting the mimeType
*/
@Override
public void setMimeType(String mimeType) {
try {
if (!MIMETYPE_MUTABLE && GeneratorStreamingOutput.this.getMimeType() != null) {
mimeTrace(// $NON-NLS-1$
"Content generator is trying to set response mime type to [{0}], but mime type [{1}] has already been imposed. Content generator request to change mime type will be ignored.", mimeType, GeneratorStreamingOutput.this.getMimeType());
return;
} else {
// $NON-NLS-1$
mimeTrace("Content generator is setting response mime type to [{0}]", mimeType);
if (callback != null) {
callback.setMimeType(mimeType);
}
GeneratorStreamingOutput.this.setMimeType(mimeType);
}
} catch (Throwable th) {
mimeTrace("Failed to set mime type: {0}", th.getMessage());
// $NON-NLS-1$
logger.error(MessageFormat.format("Failed to set mime type: {0}", th.getMessage()));
}
super.setMimeType(mimeType);
}
});
Map<String, IParameterProvider> parameterProviders = new HashMap<String, IParameterProvider>();
parameterProviders.put(IParameterProvider.SCOPE_REQUEST, createRequestParamProvider());
parameterProviders.put(IParameterProvider.SCOPE_SESSION, createSessionParameterProvider());
// $NON-NLS-1$
parameterProviders.put("headers", createHeaderParamProvider());
// $NON-NLS-1$
parameterProviders.put("path", createPathParamProvider());
String pluginId = contentGeneratorDescriptor.getPluginId();
IPentahoUrlFactory urlFactory = new SimpleUrlFactory(PentahoRequestContextHolder.getRequestContext().getContextPath() + "api/repos/" + pluginId + "/" + contentGeneratorID + // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
"?");
// set the classloader of the current thread to the class loader of
// the plugin so that it can load its libraries
// Note: we cannot ask the contentGenerator class for it's classloader,
// since the cg may
// actually be a proxy object loaded by main the WebAppClassloader
ClassLoader origContextClassloader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(pluginMgr.getClassLoader(pluginId));
try {
contentGenerator.setOutputHandler(outputHandler);
contentGenerator.setMessagesList(new ArrayList<String>());
contentGenerator.setParameterProviders(parameterProviders);
contentGenerator.setSession(PentahoSessionHolder.getSession());
if (urlFactory != null) {
contentGenerator.setUrlFactory(urlFactory);
}
contentGenerator.createContent();
} finally {
Thread.currentThread().setContextClassLoader(origContextClassloader);
}
}
use of org.pentaho.platform.web.servlet.HttpMimeTypeListener in project pentaho-platform by pentaho.
the class HttpMimeTypeListenerIT method testDoGet.
public void testDoGet() throws ServletException, IOException {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpSession session = new MockHttpSession();
request.setSession(session);
// $NON-NLS-1$//$NON-NLS-2$
request.setupAddParameter("solution", "samples");
// $NON-NLS-1$ //$NON-NLS-2$
request.setupAddParameter("path", "steel-wheels/reports");
// $NON-NLS-1$ //$NON-NLS-2$
request.setupAddParameter("action", "Inventory List.xaction");
// $NON-NLS-1$ //$NON-NLS-2$
request.setupAddParameter("details", "all");
MockHttpServletResponse response = new MockHttpServletResponse();
// $NON-NLS-1$
HttpMimeTypeListener listener = new HttpMimeTypeListener(request, response, "MyOwnReport");
// $NON-NLS-1$
listener.setMimeType("text/html");
}
Aggregations