package hydrograph.engine.testing.utils;
import hydrograph.engine.transformation.userfunctions.base.TransformBase;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Properties;
/**
* The Class TestTransformOperationWrapper.
*
* @author Bitwise
*/
public class TestTransformOperationWrapper {
public static Object[][] callTransformOperation(TransformBase trans, Properties props,
ArrayList<String> inputFieldsName, ArrayList<String> outputFieldsName, Object[][] inputData) {
List<TestReusableRow> inputReusableRowList = new ArrayList<>();
for(Object[] data:inputData){
TestReusableRow reusableRow=new TestReusableRow(new LinkedHashSet<>(inputFieldsName));
reusableRow.setRow(data);
inputReusableRowList.add(reusableRow);
}
List<TestReusableRow> outputReusableRowList = new ArrayList<>();
for(int i=0;i<inputData.length;i++){
TestReusableRow reusableRow=new TestReusableRow(new LinkedHashSet<>(outputFieldsName));
reusableRow.setRow(new Object[outputFieldsName.size()]);
outputReusableRowList.add(reusableRow);
}
trans.prepare(props, inputFieldsName, outputFieldsName);
transform(trans, inputReusableRowList, outputReusableRowList);
trans.cleanup();
Object[][] outputData=new Object[outputReusableRowList.size()][outputFieldsName.size()];
for(int j=0; j<outputReusableRowList.size();j++ )
for(int i=0;i<outputFieldsName.size();i++){
outputData[j][i]=outputReusableRowList.get(j).getField(i);
}
return outputData;
}
private static void transform(TransformBase trans, List<TestReusableRow> inputReusableRowList,
List<TestReusableRow> outputReusableRowList) {
for(int i=0;i<inputReusableRowList.size();i++){
trans.transform(inputReusableRowList.get(i), outputReusableRowList.get(i));
}
}
}