Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * This program is free software; you can redistribute it and/or modify it under the 
   * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software 
   * Foundation.
   *
   * You should have received a copy of the GNU Lesser General Public License along with this 
   * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.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 Lesser General Public License for more details.
  *
  * Copyright 2006 - 2009 Pentaho Corporation.  All rights reserved.
  *
  *
  * @created Jan 26, 2006 
  * @author James Dixon
  */
 
 package org.pentaho.platform.plugin.action.builtin;
 
 import java.io.File;
 import java.util.List;
 
 import  org.pentaho.platform.api.engine.IActionParameter;
 import  org.pentaho.platform.api.engine.IPentahoSession;
 import  org.pentaho.platform.api.engine.IRuntimeContext;
 import  org.pentaho.platform.api.engine.ISolutionEngine;
 import  org.pentaho.platform.engine.core.solution.PentahoSessionParameterProvider;
 import  org.pentaho.platform.engine.core.system.UserSession;
 import  org.pentaho.platform.engine.services.solution.ComponentBase;
 import  org.pentaho.platform.engine.services.solution.SolutionHelper;
 import  org.pentaho.platform.engine.services.solution.StandardSettings;
 import  org.pentaho.platform.util.messages.LocaleHelper;
 
 public class SubActionComponent extends ComponentBase {
 
   private static final long serialVersionUID = 3557732430102823611L;
 
   @Override
   public Log getLogger() {
     return LogFactory.getLog(SubActionComponent.class);
   }
 
   @Override
   protected boolean validateAction() {
     boolean value = false;
     SubActionAction subAction = null;
 
     if (getActionDefinition() instanceof SubActionAction) {
       subAction = (SubActionActiongetActionDefinition();
 
       if ((subAction.getAction() != .)
           && (subAction.getPath() != .)
           && (subAction.getSolution() != .)) {
         value = true;
       }
     } else {
       error(Messages.getErrorString(
           "ComponentBase.ERROR_0001_UNKNOWN_ACTION_TYPE"getActionDefinition().getElement().asXML())); //$NON-NLS-1$      
     }
 
     return value;
   }
 
   @Override
   protected boolean validateSystemSettings() {
     return true;
   }
 
   @Override
   public void done() {
   }
 
   @Override
   protected boolean executeAction() throws Throwable {
     List ignoreParameters = new ArrayList();
     String solution = subAction.getSolution().getStringValue();
     String path = subAction.getPath().getStringValue();
     String action = subAction.getAction().getStringValue();
     String actionPath;
     if ((path == null) || path.equals("")) { //$NON-NLS-1$
       actionPath = solution + . + action;
     } else {
       actionPath = solution + . + path + . + action;
     }
 
    // see if we are supposed to proxy the session
    IPentahoSession session = getSession();
    if (subAction.getSessionProxy() != .) {
      String sessionName = subAction.getSessionProxy().getStringValue();
      // TODO support user-by-user locales
      PentahoSessionParameterProvider params = new PentahoSessionParameterProvider(session);
      session = new UserSession(sessionName, LocaleHelper.getLocale(), params);
    }
    // create a parameter provider
    HashMap parameters = new HashMap();
    Iterator iterator = getInputNames().iterator();
    while (iterator.hasNext()) {
      String inputName = (Stringiterator.next();
      if (!StandardSettings.SOLUTION.equals(inputName) && !StandardSettings.PATH.equals(inputName)
          && !StandardSettings.ACTION.equals(inputName)) {
        Object value = getInputValue(inputName);
        ignoreParameters.add(value);
        parameters.put(inputNamevalue);
      }
    }
    parameters.put(StandardSettings.ACTION_URL_COMPONENT, getInputStringValue(StandardSettings.ACTION_URL_COMPONENT));
    // get the ouptut stream
    // TODO verify this with MB and JD 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); // getDefaultOutputStream();
    ISolutionEngine solutionEngine = null;
    try {
      solutionEngine = SolutionHelper.execute(getProcessId(), sessionactionPathparametersoutputStreamfalse);
      if (outputStream.size() > 0) {
        getDefaultOutputStream(null).write(outputStream.toByteArray());
      }
      int status = solutionEngine.getStatus();
      if (status == IRuntimeContext.RUNTIME_STATUS_SUCCESS) {
        // now pass any outputs back
        Iterator it = this.getOutputNames().iterator();
        while (it.hasNext()) {
          String outputName = (Stringit.next();
          IActionParameter param = solutionEngine.getExecutionContext().getOutputParameter(outputName);
          if (param != null) {
            setOutputValue(outputNameparam.getValue());
            ignoreParameters.add(param.getValue());
          }
        }
        return true;
      } else {
        return false;
      }
    } finally {
      solutionEngine.getExecutionContext().dispose(ignoreParameters);
    }
  }
  public boolean init() {
    return true;
  }
New to GrepCode? Check out our FAQ X