package hydrograph.engine.testing.utils;
import hydrograph.engine.transformation.userfunctions.base.ReusableRow;
import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
/**
* The Class TestReusableRow.
*
* @author Bitwise
*/
public class TestReusableRow extends ReusableRow implements Serializable, Cloneable{
private Object[] inputRow;
private Map<String,Integer> fieldMap;
public TestReusableRow(LinkedHashSet<String> fields) {
super(fields);
fieldMap=new HashMap<>();
int index=0;
for(String field:fields){
fieldMap.put(field, index++);
}
}
public TestReusableRow (TestReusableRow testReusableRow) {
super(new LinkedHashSet<String>(testReusableRow.getFieldNames()));
int index=0;
fieldMap=new HashMap<>();
for(String field:testReusableRow.getFieldNames()){
fieldMap.put(field, index++);
}
inputRow = new Object[testReusableRow.inputRow.length];
for(int i=0; i< testReusableRow.inputRow.length; i++) {
inputRow[i] = testReusableRow.inputRow[i];
}
}
public void setRow(Object[] row){
inputRow=row;
}
@Override
protected Comparable getFieldInternal(int index) {
return (Comparable) inputRow[index];
}
@Override
protected Comparable getFieldInternal(String fieldName) {
return (Comparable) inputRow[fieldMap.get(fieldName)];
}
@Override
protected void setFieldInternal(int index, Comparable value) {
inputRow[index]=value;
}
@Override
protected void setFieldInternal(String fieldName, Comparable value) {
inputRow[fieldMap.get(fieldName)]=value;
}
@Override
public Object clone() {
try {
return super.clone();
} catch (Exception e) {
// either handle the exception or throw it
return null;
}
}
}