Package org.pentaho.platform.engine.services.solution

Source Code of org.pentaho.platform.engine.services.solution.SolutionHelper

/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*
* Copyright 2006 - 2013 Pentaho Corporation.  All rights reserved.
*/

package org.pentaho.platform.engine.services.solution;

import org.pentaho.platform.api.engine.IExecutionListener;
import org.pentaho.platform.api.engine.ILogger;
import org.pentaho.platform.api.engine.IOutputHandler;
import org.pentaho.platform.api.engine.IParameterProvider;
import org.pentaho.platform.api.engine.IPentahoRequestContext;
import org.pentaho.platform.api.engine.IPentahoSession;
import org.pentaho.platform.api.engine.IPentahoUrlFactory;
import org.pentaho.platform.api.engine.IRuntimeContext;
import org.pentaho.platform.api.engine.ISolutionEngine;
import org.pentaho.platform.engine.core.output.SimpleOutputHandler;
import org.pentaho.platform.engine.core.solution.SimpleParameterProvider;
import org.pentaho.platform.engine.core.system.PentahoRequestContextHolder;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.engine.core.system.StandaloneSession;
import org.pentaho.platform.engine.services.BaseRequestHandler;
import org.pentaho.platform.util.web.SimpleUrlFactory;

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// TODO sbarkdull, ton's of opportunity here for some refactoring to get rid of european reuse

public class SolutionHelper {

  /**
   *
   *
   * Runs an action sequence. This method uses the base URL set by the Application Context
   *
   * @param description
   *          An identifier for this process. This is used for auditing and logging purposes only.
   * @param userId
   *          The user (or user agent) that is requesting this execution. This is used for auditing and logging and
   *          also can be used in action sequences (for example to filter data)
   * @param actionSequence
   *          Path to the action sequence file
   * @param parameters
   *          Parameters to be passed to the action sequence
   * @param outputStream
   *          The output stream for content generated by the action sequence. Can be null.
   * @return
   */
  public static ISolutionEngine execute( final String description, final String userId, final String actionSequence,
      final Map parameters, final OutputStream outputStream ) {
    StandaloneSession session = new StandaloneSession( userId );
    return SolutionHelper.execute( description, session, actionSequence, parameters, outputStream, null, true );
  }

  /**
   *
   *
   * Runs an action sequence. This method uses the base URL set by the Application Context
   *
   * @param description
   *          An identifier for this process. This is used for auditing and logging purposes only.
   * @param session
   *          The user session that is requesting this execution. This is used for auditing and logging and also
   *          can be used in action sequences (for example to filter data)
   * @param actionSequence
   *          Path to the action sequence file
   * @param parameters
   *          Parameters to be passed to the action sequence
   * @param outputStream
   *          The output stream for content generated by the action sequence. Can be null.
   * @return
   */
  public static ISolutionEngine execute( final String description, final IPentahoSession session,
      final String actionSequence, final Map parameters, final OutputStream outputStream ) {
    return SolutionHelper.execute( description, session, actionSequence, parameters, outputStream, null, true );
  }

  /**
   *
   *
   * Runs an action sequence. This method uses the base URL set by the Application Context
   *
   * @param description
   *          An identifier for this process. This is used for auditing and logging purposes only.
   * @param session
   *          The user session that is requesting this execution. This is used for auditing and logging and also
   *          can be used in action sequences (for example to filter data)
   * @param actionSequence
   *          Path to the action sequence file
   * @param parameters
   *          Parameters to be passed to the action sequence
   * @param outputStream
   *          The output stream for content generated by the action sequence. Can be null.
   * @param collateMessages
   *          Collate a messages list or not. Chose false for very large processes
   * @return
   */
  public static ISolutionEngine
  execute( final String description, final IPentahoSession session, final String actionSequence,
        final Map parameters, final OutputStream outputStream, final boolean collateMessages ) {
    return SolutionHelper.execute( description, session, actionSequence, parameters, outputStream, null,
        collateMessages );
  }

  private static ISolutionEngine execute( final String description, final IPentahoSession session,
      final String actionSequence, final Map parameters, final OutputStream outputStream,
      final IExecutionListener execListener, final boolean collateMessages ) {
    return SolutionHelper.execute( description, session, actionSequence, parameters, outputStream, execListener,
        collateMessages, true );
  }

  /**
   *
   *
   * Runs an action sequence. This method uses the base URL set by the Application Context
   *
   * @param description
   *          An identifier for this process. This is used for auditing and logging purposes only.
   * @param session
   *          The user session that is requesting this execution. This is used for auditing and logging and also
   *          can be used in action sequences (for example to filter data)
   * @param actionSequence
   *          Path to the action sequence file
   * @param parameters
   *          Parameters to be passed to the action sequence
   * @param outputStream
   *          The output stream for content generated by the action sequence. Can be null.
   * @param execListener
   *          An execution listener for feedback during execution. Can be null.
   * @return
   */

  public static ISolutionEngine execute( final String description, final IPentahoSession session,
      final String actionSequence, final Map parameters, OutputStream outputStream,
      final IExecutionListener execListener, final boolean collateMessages, final boolean manageHibernate ) {

    if ( manageHibernate ) {
      PentahoSystem.systemEntryPoint();
    }
    ISolutionEngine solutionEngine = null;
    try {

      solutionEngine = PentahoSystem.get( ISolutionEngine.class, session );
      solutionEngine.init( session );
      solutionEngine.setlistener( execListener );

      SimpleParameterProvider parameterProvider = new SimpleParameterProvider( parameters );
      IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
      String url = requestContext.getContextPath();
      // Modifications by Ezequiel Cuellar
      // Old code.
      // String baseUrl = PentahoSystem.getApplicationContext().getBaseUrl();
      // New code. Since the SubActionComponent is being instantiated below to return feedback
      // it is necesary to configure the baseUrl to include the ViewAction.
      Object actionUrlComponent = parameters.get( StandardSettings.ACTION_URL_COMPONENT );
      if ( ( actionUrlComponent != null ) && ( actionUrlComponent.toString().length() > 0 ) ) {
        url += actionUrlComponent.toString();
      } else {
        url += "ViewAction?"; //$NON-NLS-1$
      }

      HashMap<String, IParameterProvider> parameterProviderMap = new HashMap<String, IParameterProvider>();
      parameterProviderMap.put( IParameterProvider.SCOPE_REQUEST, parameterProvider );

      IPentahoUrlFactory urlFactory = new SimpleUrlFactory( url );

      String processName = description;
      boolean persisted = false;
      // for now, the messages list needs to be untyped since we may put exceptions as well as strings in it
      List<?> messages = null;

      if ( collateMessages ) {
        messages = new ArrayList();
      }

      if ( outputStream == null ) {
        outputStream = new ByteArrayOutputStream( 0 );
      }
      SimpleOutputHandler outputHandler = null;
      if ( outputStream != null ) {

        // Modifications by Ezequiel Cuellar
        // Old code.
        // outputHandler = new SimpleOutputHandler(outputStream, false);
        // New code. Without setting the allowFeedback parameter to true it is assumed that SubActionComponent
        // instances
        // are never capable of returning feedback which may not always be the case.
        outputHandler = new SimpleOutputHandler( outputStream, true );
        outputHandler.setOutputPreference( IOutputHandler.OUTPUT_TYPE_DEFAULT );
      }
      solutionEngine.execute( actionSequence, processName, false, true, null, persisted, parameterProviderMap,
          outputHandler, null, urlFactory, messages );

    } finally {
      if ( manageHibernate ) {
        PentahoSystem.systemExitPoint();
      }
    }
    return solutionEngine;

  }

  /**
   * doAction executes an action within the bi platform and returns true if successful.
   *
   * Snagged from ChartHelper
   *
   * @param solutionName
   *          the solution name
   * @param actionPath
   *          the action path
   * @param actionName
   *          the action name
   * @param processId
   *          the process id
   * @param parameterProvider
   *          the collection of parameters to customize the chart
   * @param outputStream
   *          the output object
   * @param userSession
   *          the user session object
   * @param messages
   *          a collection to store error and logging messages
   * @param logger
   *          logging object
   *
   * @return the runtime context
   */
  public static boolean doAction( String actionPath, final String processId,
      final IParameterProvider parameterProvider, final OutputStream outputStream, final IPentahoSession userSession,
      final ArrayList messages, final ILogger logger ) {
    int status = IRuntimeContext.RUNTIME_STATUS_FAILURE;
    IRuntimeContext runtime = null;
    try {
      runtime =
          SolutionHelper.doActionInternal( actionPath, processId, parameterProvider, outputStream, userSession,
              messages, logger );
      if ( runtime != null ) {
        status = runtime.getStatus();
      }
    } finally {
      if ( runtime != null ) {
        runtime.dispose();
      }
    }
    return status == IRuntimeContext.RUNTIME_STATUS_SUCCESS;
  }

  /**
   * doAction executes an action within the bi platform and returns the runtime context.
   *
   * Snagged from ChartHelper
   *
   * @param solutionName
   *          the solution name
   * @param actionPath
   *          the action path
   * @param actionName
   *          the action name
   * @param processId
   *          the process id
   * @param parameterProvider
   *          the collection of parameters to customize the chart
   * @param userSession
   *          the user session object
   * @param messages
   *          a collection to store error and logging messages
   * @param logger
   *          logging object
   *
   * @return the runtime context
   */
  public static IRuntimeContext doAction( final String actionPath, final String processId,
      final IParameterProvider parameterProvider, final IPentahoSession userSession, final ArrayList messages,
      final ILogger logger ) {
    return doActionInternal( actionPath, processId, parameterProvider, null, userSession, messages, logger );
  }

  private static IRuntimeContext doActionInternal( final String actionPath, final String processId,
      final IParameterProvider parameterProvider, final OutputStream outputStream, final IPentahoSession userSession,
      final ArrayList messages, final ILogger logger ) {
    SimpleOutputHandler outputHandler = new SimpleOutputHandler( outputStream, false );
    BaseRequestHandler requestHandler =
        new BaseRequestHandler( userSession, null, outputHandler, parameterProvider, null );

    requestHandler.setProcessId( processId );
    requestHandler.setActionPath( actionPath );

    return requestHandler.handleActionRequest( 0, 0 );
  }
}
TOP

Related Classes of org.pentaho.platform.engine.services.solution.SolutionHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.