package nl.tno.sensorstorm.example;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import nl.tno.sensorstorm.api.annotation.OperationDeclaration;
import nl.tno.sensorstorm.api.particles.DataParticle;
import nl.tno.sensorstorm.api.particles.DataParticleBatch;
import nl.tno.sensorstorm.api.processing.OperationException;
import nl.tno.sensorstorm.api.processing.ParticleBatchOperation;
import nl.tno.storm.configuration.api.ExternalStormConfiguration;
@OperationDeclaration(inputs = SensorParticle.class, outputs = SensorParticle.class)
public class AverageOperation implements ParticleBatchOperation {
private static final long serialVersionUID = 5964184758382015244L;
@Override
public void init(String fieldGrouperValue, long startTimeStamp,
@SuppressWarnings("rawtypes") Map stormNativeConfig,
ExternalStormConfiguration zookeeperStormConfiguration)
throws OperationException {
}
@Override
public List<? extends DataParticle> execute(
DataParticleBatch inputParticleBatch) throws OperationException {
SensorParticle last = null;
double value;
double sum = 0;
int cnt = 0;
for (DataParticle p : inputParticleBatch) {
if (p instanceof SensorParticle) {
last = (SensorParticle) p;
sum += last.getMeasurement();
cnt++;
}
}
if (cnt == 0) {
value = 0;
} else {
value = sum / cnt;
}
if (last != null) {
SensorParticle particle = new SensorParticle(last.getTimestamp(),
last.getSensorId(), value);
return Collections.singletonList(particle);
} else {
return null;
}
}
}