Package org.pentaho.platform.plugin.action.datatransforms

Source Code of org.pentaho.platform.plugin.action.datatransforms.ResultSetCompareComponent

/*!
* 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 (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.platform.plugin.action.datatransforms;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.actionsequence.dom.ActionInputConstant;
import org.pentaho.actionsequence.dom.IActionOutput;
import org.pentaho.actionsequence.dom.actions.ResultSetCompareAction;
import org.pentaho.commons.connection.IPentahoResultSet;
import org.pentaho.platform.engine.services.solution.ComponentBase;
import org.pentaho.platform.plugin.action.messages.Messages;

public class ResultSetCompareComponent extends ComponentBase {

  private static final long serialVersionUID = -1449352563247459588L;

  private static final String COMPARE_RESULT_OK = "No Mismatches"; //$NON-NLS-1$

  @Override
  protected boolean validateAction() {

    boolean actionValidated = true;
    ResultSetCompareAction compareAction = null;

    // get report connection setting
    if ( getActionDefinition() instanceof ResultSetCompareAction ) {
      compareAction = (ResultSetCompareAction) getActionDefinition();
      if ( compareAction.getResultSet1() == ActionInputConstant.NULL_INPUT ) {
        actionValidated = false;
        error( Messages.getInstance().getErrorString( "ResultSetCompareComponent.ERROR_0001_INPUT_RS1_UNDEFINED" ) ); //$NON-NLS-1$
      }

      if ( actionValidated && ( compareAction.getResultSet2() == ActionInputConstant.NULL_INPUT ) ) {
        actionValidated = false;
        error( Messages.getInstance().getErrorString( "ResultSetCompareComponent.ERROR_0002_INPUT_RS2_UNDEFINED" ) ); //$NON-NLS-1$
      }

      if ( actionValidated && ( compareAction.getCompareColumnNum() == ActionInputConstant.NULL_INPUT ) ) {
        actionValidated = false;
        error( Messages.getInstance().getErrorString( "ResultSetCompareComponent.ERROR_0003_COLUMN_UNDEFINED" ) ); //$NON-NLS-1$       
      }
    } else {
      actionValidated = false;
      error( Messages.getInstance().getErrorString(
          "ComponentBase.ERROR_0001_UNKNOWN_ACTION_TYPE", getActionDefinition().getElement().asXML() ) ); //$NON-NLS-1$     
    }

    return actionValidated;
  }

  @Override
  protected boolean validateSystemSettings() {
    // No system settings
    return true;
  }

  @Override
  public void done() {
    // No cleanup necessary
  }

  @Override
  protected boolean executeAction() throws Throwable {
    ResultSetCompareAction compareAction = (ResultSetCompareAction) getActionDefinition();

    Object obj1 = compareAction.getResultSet1().getValue();
    if ( !( obj1 instanceof IPentahoResultSet ) ) {
      error( Messages.getInstance().getErrorString( "ResultSetCompareComponent.ERROR_0004_INPUT_RS1_NOT_RS" ) ); //$NON-NLS-1$
      return false;
    }

    Object obj2 = compareAction.getResultSet2().getValue();
    if ( !( obj2 instanceof IPentahoResultSet ) ) {
      error( Messages.getInstance().getErrorString( "ResultSetCompareComponent.ERROR_0005_INPUT_RS2_NOT_RS" ) ); //$NON-NLS-1$
      return false;
    }

    IPentahoResultSet rs1 = (IPentahoResultSet) compareAction.getResultSet1().getValue();
    IPentahoResultSet rs2 = (IPentahoResultSet) compareAction.getResultSet2().getValue();

    String tempOutputMismatches = compareAction.getOutputMismatches().getStringValue();
    boolean outputMismatches = false;
    if ( ( tempOutputMismatches != null ) && tempOutputMismatches.trim().toLowerCase().equals( "true" ) ) { //$NON-NLS-1$
      outputMismatches = true;
    }

    boolean stopOnError = false;
    String tempStopOnError = compareAction.getStopOnError().getStringValue();
    if ( ( tempStopOnError != null ) && tempStopOnError.trim().toLowerCase().equals( "true" ) ) { //$NON-NLS-1$
      stopOnError = true;
    }

    int compareCol = Integer.parseInt( compareAction.getCompareColumnNum().getStringValue() );

    return compareEquals( rs1, rs2, compareCol, outputMismatches, stopOnError );
  }

  private boolean compareEquals( final IPentahoResultSet rs1, final IPentahoResultSet rs2, final int compareCol,
      boolean outputMismatches, final boolean stopOnError ) {
    int sourceRowCount = rs1.getRowCount();
    int sourceColCount = rs1.getColumnCount();
    int compRowCount = rs2.getRowCount();
    int compColCount = rs2.getColumnCount();
    StringBuffer outputBuf = new StringBuffer();
    if ( !outputMismatches ) {
      if ( sourceRowCount != compRowCount ) {
        error( Messages.getInstance().getErrorString( "ResultSetCompareComponent.ERROR_0006_RESULTSETS_ROWCOUNT_WRONG" ) ); //$NON-NLS-1$
        return false;
      }
      if ( sourceColCount != compColCount ) {
        error( Messages.getInstance().getErrorString(
            "ResultSetCompareComponent.ERROR_0007_RESULTSETS_COLUMNCOUNT_WRONG" ) ); //$NON-NLS-1$
        return false;
      }
    }
    if ( compareCol > sourceColCount ) {
      error( Messages.getInstance().getErrorString( "ResultSetCompareComponent.ERROR_0008_COLUMN_NOT_FOUND" ) + compareCol ); //$NON-NLS-1$
      return false;
    }
    if ( compareCol > compColCount ) {
      error( Messages.getInstance().getErrorString( "ResultSetCompareComponent.ERROR_0009_COMPARISON_COLUMN_NOT_FOUND" ) + compareCol ); //$NON-NLS-1$
      return false;
    }
    boolean anyMismatches = false;
    boolean foundIt;
    Object srcValue = null, compValue = null;
    ResultSetCompareAction compareAction = (ResultSetCompareAction) getActionDefinition();
    IActionOutput output = compareAction.getOutputCompareResult();
    for ( int sourceRows = 0; sourceRows < sourceRowCount; sourceRows++ ) {
      foundIt = false;
      srcValue = rs1.getValueAt( sourceRows, compareCol );
      // n+1 traversal. This accommodates non-ordered input
      for ( int compRows = 0; compRows < compRowCount; compRows++ ) {
        compValue = rs2.getValueAt( compRows, compareCol );
        if ( compValue.equals( srcValue ) ) {
          foundIt = true;
          break;
        }
      }
      if ( !foundIt ) {
        if ( outputBuf.length() > 0 ) {
          outputBuf.append( "," ).append( srcValue.toString().trim() ); //$NON-NLS-1$
        } else {
          outputBuf.append( srcValue.toString().trim() );
        }
        if ( output != null ) {
          output.setValue( outputBuf.toString() );
        }
        if ( outputMismatches ) {
          error( Messages.getInstance().getErrorString(
              "ResultSetCompareComponent.ERROR_0010_MISMATCH_OUTPUT", srcValue.toString() ) ); //$NON-NLS-1$
          anyMismatches = true;
        } else {
          if ( stopOnError ) {
            return false;
          }
        }
      }
    }
    if ( !anyMismatches ) {
      if ( output != null ) {
        output.setValue( ResultSetCompareComponent.COMPARE_RESULT_OK );
      }
    }
    return stopOnError ? !anyMismatches : true;
  }

  @Override
  public boolean init() {
    // no initialization required
    return true;
  }

  @Override
  public Log getLogger() {
    return LogFactory.getLog( ResultSetCompareComponent.class );
  }

}
TOP

Related Classes of org.pentaho.platform.plugin.action.datatransforms.ResultSetCompareComponent

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.