package eu.play_project.dcep.api.measurement; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class LoadTimeSeries extends MeasurementResult implements Collection<Double>, List<Double>, Comparable<LoadTimeSeries>{ /** * */ private static final long serialVersionUID = 100L; private List<Double> datastructure; private String name; private int possitonInDatascructure; private int numberOfElementsInLoadTimeSeries =0; public LoadTimeSeries(String name, int numberOfElementsInLoadTieSeries){ datastructure = new ArrayList<Double>(); this.setName(name); this.numberOfElementsInLoadTimeSeries = numberOfElementsInLoadTieSeries; possitonInDatascructure = 0; //Init datastructure. for (int i = 0; i < numberOfElementsInLoadTieSeries; i++) { datastructure.add(0.0); } } @Override public int size() { return datastructure.size(); } @Override public boolean isEmpty() { return datastructure.isEmpty(); } @Override public boolean contains(Object o) { return datastructure.contains(o); } @Override public Iterator<Double> iterator() { return datastructure.iterator(); } @Override public Object[] toArray() { return datastructure.toArray(); } @Override public <T> T[] toArray(T[] a) { return datastructure.toArray(a); } @Override public boolean add(Double e) { datastructure.set(possitonInDatascructure, e); possitonInDatascructure++; // Only a fixed number of elements is possible. possitonInDatascructure = possitonInDatascructure%numberOfElementsInLoadTimeSeries; return true; } @Override public boolean remove(Object o) { return datastructure.remove(o); } @Override public boolean containsAll(Collection<?> c) { return datastructure.containsAll(c); } @Override public boolean addAll(Collection<? extends Double> c) { return datastructure.addAll(c); } @Override public boolean removeAll(Collection<?> c) { return datastructure.removeAll(c); } @Override public boolean retainAll(Collection<?> c) { return datastructure.retainAll(c); } @Override public void clear() { datastructure.clear(); } @Override public boolean addAll(int index, Collection<? extends Double> c) { return datastructure.addAll(c); } @Override public Double get(int index) { return datastructure.get(index); } @Override public Double set(int index, Double element) { return datastructure.set(index, element); } @Override public void add(int index, Double element) { datastructure.add(index, element); } @Override public Double remove(int index) { return datastructure.remove(index); } @Override public int indexOf(Object o) { return datastructure.indexOf(o); } @Override public int lastIndexOf(Object o) { return datastructure.lastIndexOf(o); } @Override public ListIterator<Double> listIterator() { return datastructure.listIterator(); } @Override public ListIterator<Double> listIterator(int index) { return datastructure.listIterator(index); } @Override public List<Double> subList(int fromIndex, int toIndex) { return subList(fromIndex, toIndex); } /** * @return the patternName */ @Override public String getName() { return name; } /** * @param patternName the patternName to set */ @Override public void setName(String name) { this.name = name; } @Override public int compareTo(LoadTimeSeries o) { if(this.calcualteAverageValue(this) < this.calcualteAverageValue(o)){ return -1; }else if(this.calcualteAverageValue(this) == this.calcualteAverageValue(o)){ return 0; }else{ return 1; } } /** * Calc average load. * @param o Load time series. * @return average load. */ private double calcualteAverageValue(LoadTimeSeries o){ double average = 0; for (Double load : o) { average += load; } average = average/o.size(); return average; } public int getNumberOfElementsInLoadTimeSeries() { return numberOfElementsInLoadTimeSeries; } }