Search in sources :

Example 1 with HttpMimeTypeListener

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();
        }
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ServletException(javax.servlet.ServletException) ObjectFactoryException(org.pentaho.platform.api.engine.ObjectFactoryException) IOException(java.io.IOException) IOutputHandler(org.pentaho.platform.api.engine.IOutputHandler) IParameterProvider(org.pentaho.platform.api.engine.IParameterProvider) HttpMimeTypeListener(org.pentaho.platform.web.servlet.HttpMimeTypeListener) HttpSessionParameterProvider(org.pentaho.platform.web.http.session.HttpSessionParameterProvider) HttpRequestParameterProvider(org.pentaho.platform.web.http.request.HttpRequestParameterProvider) List(java.util.List) ArrayList(java.util.ArrayList) IRuntimeContext(org.pentaho.platform.api.engine.IRuntimeContext) Map(java.util.Map) HashMap(java.util.HashMap)

Example 2 with HttpMimeTypeListener

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();
        }
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ServletException(javax.servlet.ServletException) ObjectFactoryException(org.pentaho.platform.api.engine.ObjectFactoryException) IOException(java.io.IOException) IOutputHandler(org.pentaho.platform.api.engine.IOutputHandler) IParameterProvider(org.pentaho.platform.api.engine.IParameterProvider) HttpMimeTypeListener(org.pentaho.platform.web.servlet.HttpMimeTypeListener) HttpSessionParameterProvider(org.pentaho.platform.web.http.session.HttpSessionParameterProvider) HttpRequestParameterProvider(org.pentaho.platform.web.http.request.HttpRequestParameterProvider) List(java.util.List) ArrayList(java.util.ArrayList) IRuntimeContext(org.pentaho.platform.api.engine.IRuntimeContext) Map(java.util.Map) HashMap(java.util.HashMap)

Example 3 with HttpMimeTypeListener

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);
    }
}
Also used : IPentahoUrlFactory(org.pentaho.platform.api.engine.IPentahoUrlFactory) HashMap(java.util.HashMap) HttpOutputHandler(org.pentaho.platform.web.http.HttpOutputHandler) IOutputHandler(org.pentaho.platform.api.engine.IOutputHandler) HttpMimeTypeListener(org.pentaho.platform.web.servlet.HttpMimeTypeListener) IParameterProvider(org.pentaho.platform.api.engine.IParameterProvider) SimpleUrlFactory(org.pentaho.platform.util.web.SimpleUrlFactory)

Example 4 with HttpMimeTypeListener

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");
}
Also used : HttpMimeTypeListener(org.pentaho.platform.web.servlet.HttpMimeTypeListener) MockHttpServletRequest(com.mockrunner.mock.web.MockHttpServletRequest) MockHttpSession(com.mockrunner.mock.web.MockHttpSession) MockHttpServletResponse(com.mockrunner.mock.web.MockHttpServletResponse)

Aggregations

HttpMimeTypeListener (org.pentaho.platform.web.servlet.HttpMimeTypeListener)4 HashMap (java.util.HashMap)3 IOutputHandler (org.pentaho.platform.api.engine.IOutputHandler)3 IParameterProvider (org.pentaho.platform.api.engine.IParameterProvider)3 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 Map (java.util.Map)2 ServletException (javax.servlet.ServletException)2 IRuntimeContext (org.pentaho.platform.api.engine.IRuntimeContext)2 ObjectFactoryException (org.pentaho.platform.api.engine.ObjectFactoryException)2 HttpRequestParameterProvider (org.pentaho.platform.web.http.request.HttpRequestParameterProvider)2 HttpSessionParameterProvider (org.pentaho.platform.web.http.session.HttpSessionParameterProvider)2 MockHttpServletRequest (com.mockrunner.mock.web.MockHttpServletRequest)1 MockHttpServletResponse (com.mockrunner.mock.web.MockHttpServletResponse)1 MockHttpSession (com.mockrunner.mock.web.MockHttpSession)1 IPentahoUrlFactory (org.pentaho.platform.api.engine.IPentahoUrlFactory)1 SimpleUrlFactory (org.pentaho.platform.util.web.SimpleUrlFactory)1 HttpOutputHandler (org.pentaho.platform.web.http.HttpOutputHandler)1