package eu.choreos.vv.data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ReportData implements Serializable {
List<Number> parameters;
Map<String, List<Number>> measurements;
Date startTime, endTime;
public ReportData() {
super();
measurements = new HashMap<String, List<Number>>();
}
// public ReportData(List<Number> parameters, List<Number> measurements) {
// super();
// this.parameters = parameters;
// this.measurements = measurements;
// }
public List<Number> getParameters() {
return parameters;
}
public void setParameters(List<Number> parameters) {
this.parameters = parameters;
}
public List<Number> getMeasurements(String label) {
return measurements.get(label);
}
public void setMeasurements(String label, List<Number> measurements) {
this.measurements.put(label, measurements);
}
public void addMeasurements(String label, List<Number> measurements) {
List<Number> current = this.getMeasurements(label);
if (current == null)
this.setMeasurements(label, measurements);
else
current.addAll(measurements);
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public ReportData merge(ReportData that) {
ReportData merged = new ReportData();
//TODO: label the parameters and only merge reports with similiar parameters and values
merged.setParameters(this.getParameters());
merged.setStartTime(this.getStartTime().before(that.getStartTime())? this.getStartTime() : that.getStartTime());
merged.setEndTime(this.getEndTime().after(that.getEndTime())? this.getEndTime() : that.getEndTime());
//TODO add timestamp to the measurements and merge them ordered
for(String key: this.measurements.keySet()) {
merged.addMeasurements(key, new ArrayList<Number>(this.getMeasurements(key)));
}
for(String key: that.measurements.keySet()) {
merged.addMeasurements(key, new ArrayList<Number>(that.getMeasurements(key)));
}
return merged;
}
}