package com.totoro.incardisplay.simulations;
import java.util.*;
/**
* Single instance in time where data is collected.
*/
public class TimeSlice {
private List<Datum> dataList;
private Map<String, Double> map;
private static final double EPSILON_THRESHOLD = 1e-7;
public TimeSlice(List<Datum> dataListIn) {
dataList = new ArrayList<Datum>();
map = new HashMap<String, Double>();
for(Datum datum: dataListIn) {
map.put(datum.getLabel(), datum.getValue());
dataList.add(datum);
}
if(map.size() != dataListIn.size()) {
throw new IllegalArgumentException("For a single time interval, a given label may only appear once.");
}
}
public Set<String> getAllLabels() {
return map.keySet();
}
public List<Datum> getAllData() {
return dataList;
}
public double getValue(String label) {
if(!map.containsKey(label)) {
throw new IllegalArgumentException("That label does not exist.");
}
return map.get(label);
}
public String toString() {
StringBuilder ret = new StringBuilder();
for(Datum datum: dataList){
ret.append(datum.toString() + "\n");
}
return ret.toString().trim();
}
public boolean equals(Object o) {
if(this == null ^ o == null) {
return false;
}
if(this == null && o == null) {
return true;
}
if(!(o instanceof TimeSlice)) {
return false;
}
TimeSlice t = (TimeSlice)o;
if(map == null ^ t.map == null) {
return true;
}
if(map == null && t.map == null) {
return true;
}
if(map.size() != t.map.size()) {
return false;
}
for(String key: map.keySet()) {
if(!t.map.containsKey(key)) {
return false;
}
if(Math.abs(map.get(key)-t.map.get(key)) > EPSILON_THRESHOLD) {
return false;
}
}
return true;
}
}