/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
package org.pentaho.di.trans.steps.sapinput.mock;
import java.util.Collection;
import java.util.Vector;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.trans.steps.sapinput.sap.SAPConnection;
import org.pentaho.di.trans.steps.sapinput.sap.SAPConnectionParams;
import org.pentaho.di.trans.steps.sapinput.sap.SAPException;
import org.pentaho.di.trans.steps.sapinput.sap.SAPField;
import org.pentaho.di.trans.steps.sapinput.sap.SAPFunction;
import org.pentaho.di.trans.steps.sapinput.sap.SAPFunctionSignature;
import org.pentaho.di.trans.steps.sapinput.sap.SAPResultSet;
import org.pentaho.di.trans.steps.sapinput.sap.SAPRow;
import org.pentaho.di.trans.steps.sapinput.sap.impl.SAPRowIterator;
public class SAPConnectionMock implements SAPConnection {
private Collection<SAPFunction> sfc = new Vector<SAPFunction>();
public SAPConnectionMock() {
sfc.add( new SAPFunction( "SearchCustomer", "SAP Testfunction with senseful params", "Group A", "", "" ) );
sfc.add( new SAPFunction( "SAPFunction0", "SAP Testfunction 0", "Group A", "", "" ) );
sfc.add( new SAPFunction( "SAPFunction1", "SAP Testfunction 1", "Group A", "", "" ) );
sfc.add( new SAPFunction( "SAPFunction2", "SAP Testfunction 2", "Group A", "", "" ) );
sfc.add( new SAPFunction( "SAPFunction3", "SAP Testfunction 3", "Group B", "C", "" ) );
sfc.add( new SAPFunction( "SAPFunction4", "SAP Testfunction 4", "Group B", "C", "" ) );
sfc.add( new SAPFunction( "SAPFunction5", "SAP Testfunction 5", "Group C", "C", "" ) );
sfc.add( new SAPFunction( "SAPFunction6", "SAP Testfunction 6", "Group C", "C", "" ) );
sfc.add( new SAPFunction( "SAPFunction7", "SAP Testfunction 7", "Group C", "", "" ) );
sfc.add( new SAPFunction( "SAPFunction8", "SAP Testfunction 8", "Group C", "", "" ) );
sfc.add( new SAPFunction( "SAPFunction9", "SAP Testfunction 9", "Group C", "", "" ) );
}
public void open( DatabaseMeta sapConnection ) throws SAPException {
// TODO Auto-generated method stub
}
public void open( SAPConnectionParams params ) throws SAPException {
// TODO Auto-generated method stub
}
public void close() {
// TODO Auto-generated method stub
}
public Collection<SAPFunction> getFunctions( String query ) throws SAPException {
Collection<SAPFunction> sfc = new Vector<SAPFunction>();
for ( SAPFunction sapFunction : this.sfc ) {
// This emulates a longer wait time, showing a wait cursor to notify the user
//
try {
Thread.sleep( 250 );
} catch ( InterruptedException e ) { /* Ignore */
}
if ( sapFunction.getName().contains( query ) ) {
sfc.add( sapFunction );
}
}
return sfc;
}
public SAPFunction getFunction( String name ) throws SAPException {
for ( SAPFunction sapFunction : this.sfc ) {
if ( sapFunction.getName().equals( name ) ) {
return sapFunction;
}
}
return null;
}
public SAPFunctionSignature getFunctionSignature( SAPFunction function ) throws SAPException {
SAPFunctionSignature sfs = new SAPFunctionSignature();
if ( function.getName().equalsIgnoreCase( "SearchCustomer" ) ) {
sfs.addInput( new SAPField( "Name", "", "input_single" ) );
sfs.addInput( new SAPField( "Zipcode", "", "input_single" ) );
sfs.addOutput( new SAPField( "Name", "", "output_single" ) );
sfs.addOutput( new SAPField( "Firstname", "", "output_single" ) );
sfs.addOutput( new SAPField( "Adress", "", "output_single" ) );
sfs.addOutput( new SAPField( "Zipcode", "", "output_single" ) );
sfs.addOutput( new SAPField( "CustomerGroup", "", "output_single" ) );
} else {
sfs.addInput( new SAPField( "Field1", "", "input_single" ) );
sfs.addInput( new SAPField( "Field2", "", "input_single" ) );
sfs.addInput( new SAPField( "Field3", "", "input_single" ) );
sfs.addOutput( new SAPField( "Field4", "", "output_single" ) );
sfs.addOutput( new SAPField( "Field5", "", "output_single" ) );
sfs.addOutput( new SAPField( "Field6", "", "output_single" ) );
}
// Simulate a longer wait by sleeping a bit...
// This tests the wait cursor in the UI...
//
try {
Thread.sleep( 1500 );
} catch ( InterruptedException e ) { /* Ignore */
}
return sfs;
}
public SAPResultSet executeFunctionUncursored( SAPFunction function, Collection<SAPField> input,
Collection<SAPField> output ) throws SAPException {
SAPResultSet srs = new SAPResultSet();
if ( function.getName().equalsIgnoreCase( "SearchCustomer" ) ) {
for ( int i = 1; i <= 9; i++ ) {
SAPRow sr = new SAPRow();
sr.addField( new SAPField( "Name", "", "String", "Casters" + i ) );
sr.addField( new SAPField( "Firstname", "", "String", "Matt" + i ) );
sr.addField( new SAPField( "Adress", "", "String", "Pentahoway 77" ) );
sr.addField( new SAPField( "Zipcode", "", "Number", 12345 + ( i * 10000 ) ) );
sr.addField( new SAPField( "CustomerGroup", "", "String", "ABC" + i ) );
srs.addRow( sr );
}
} else {
for ( int i = 1; i <= 9; i++ ) {
SAPRow sr = new SAPRow();
sr.addField( new SAPField( "Field4", "", "String", "Testvalue" + i ) );
sr.addField( new SAPField( "Field5", "", "Number", 12345 + ( i * 10000 ) ) );
sr.addField( new SAPField( "Field6", "", "Decimal", 77.88 + ( i * 10 ) ) );
srs.addRow( sr );
}
}
return srs;
}
// this method cannot be mocked
// for testcases use the executeFunctionUncursored
public SAPRowIterator executeFunctionCursored( SAPFunction function, Collection<SAPField> input,
Collection<SAPField> output ) throws SAPException {
return null;
}
}