package org.apache.ode.runtime.core.work;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
import org.apache.ode.spi.work.ExecutionUnit.BufferInput;
import org.apache.ode.spi.work.ExecutionUnit.InBuffer;
public class InBufferStage extends Stage implements BufferInput<InBuffer> {
protected InBuffer bufferObject;
public InBufferStage(InBuffer bufferObject) {
super(new Object[bufferLength(bufferObject)], null);
this.bufferObject = bufferObject;
}
public static int bufferLength(Object bufferObject) {
return bufferObject.getClass().getFields().length;
}
public static void write(Object[] input, Object bufferObject) throws Throwable {
if (input != null && bufferObject != null) {
Field[] fields = bufferObject.getClass().getFields();
for (int i = 0; i < fields.length; i++) {
MethodHandle mh = MethodHandles.lookup().unreflectSetter(fields[i]);
mh.invoke(bufferObject, input[i]);
}
}
}
@Override
protected void postInput() throws StageException {
try {
write(input, bufferObject);
} catch (Throwable e) {
throw new StageException(e);
}
}
@Override
public InBuffer buffer() {
return bufferObject;
}
}