package tinygsn.model.vsensor;
import org.epfl.locationprivacy.util.Utils;
import java.io.Serializable;
import java.util.ArrayList;
import tinygsn.beans.DataField;
import tinygsn.beans.DataTypes;
import tinygsn.beans.StaticData;
import tinygsn.beans.StreamElement;
import static android.os.Debug.startMethodTracing;
import static android.os.Debug.stopMethodTracing;
public class ExposureVirtualSensor extends AbstractVirtualSensor {
private static final long serialVersionUID = -3819903462891465980L;
private ArrayList<StreamElement> buffer = new ArrayList<StreamElement>();
private DataField[] outputStructure = new DataField[]{new DataField("exposure",DataTypes.DOUBLE),new DataField("start",DataTypes.BIGINT),new DataField("end",DataTypes.BIGINT)};
private String LOGTAG = "ExposureVirtualSensor";
@Override
public boolean initialize() {
return true;
}
@Override
public void dispose() {
}
@Override
public DataField[] getOutputStructure(DataField[] in){
return outputStructure;
}
@Override
public void dataAvailable(String inputStreamName, StreamElement streamElement) {
if ((boolean) Utils.getBuildConfigValue(StaticData.globalContext, "PERFORMANCE")) {
startMethodTracing("Android/data/tinygsn.gui.android/" + LOGTAG + "_" + inputStreamName + "_" + System.currentTimeMillis());
}
log("dataAvailable_" + LOGTAG + "_" + inputStreamName, "===========================================");
log("dataAvailable_" + LOGTAG + "_" + inputStreamName, "Starting to process data in dataAvailable");
long startLogTime = System.currentTimeMillis();
streamElement = super.anonymizeData(inputStreamName, streamElement);
if(inputStreamName.endsWith("MET")){
double va = (Double)streamElement.getData("VA");
long s = ((Double)streamElement.getData("start")).longValue();
long e = ((Double)streamElement.getData("end")).longValue();
double sum = 0.0;
for (StreamElement se:buffer){
sum += ((Double)se.getData("o3"))/1000.0;
}
if (buffer.size()>0)
sum /= 1.0*buffer.size();
double exposure = va * sum * (e-s)/60000.0;
long endLogTime = System.currentTimeMillis();
log("dataAvailable_" + LOGTAG + "_" + inputStreamName, "Total Time to process data in dataAvailable() (without dataProduced()) : " + (endLogTime - startLogTime) + " ms.");
dataProduced(new StreamElement(outputStructure, new Serializable[]{exposure,s,e}, streamElement.getTimeStamp()));
buffer.clear();
}else{
buffer.add(streamElement);
}
if ((boolean) Utils.getBuildConfigValue(StaticData.globalContext, "PERFORMANCE") || (boolean) Utils.getBuildConfigValue(StaticData.globalContext, "GPSPERFORMANCE")) {
stopMethodTracing();
}
}
}