package net.iponweb.disthene.reader.graph; import net.iponweb.disthene.reader.beans.TimeSeries; import net.iponweb.disthene.reader.beans.TimeSeriesOption; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * @author Andrei Ivanov */ public class GraphUtils { public static Double safeMin(DecoratedTimeSeries ts) { double result = Double.POSITIVE_INFINITY; for (Double value : ts.getValues()) { if (value != null && !value.equals(Double.POSITIVE_INFINITY)) { result = value < result ? value : result; } } return result; } public static Double safeMax(DecoratedTimeSeries ts) { double result = Double.NEGATIVE_INFINITY; for (Double value : ts.getValues()) { if (value != null && !value.equals(Double.POSITIVE_INFINITY)) { result = value > result ? value : result; } } return result; } public static Double safeMax(List<DecoratedTimeSeries> timeSeriesList) { double result = Double.NEGATIVE_INFINITY; for(DecoratedTimeSeries ts : timeSeriesList) { double single = safeMax(ts); if (single > result) result = single; } return result; } public static Double maxSum(List<DecoratedTimeSeries> timeSeriesList) { if (timeSeriesList.size() == 0) return 0.; int length = timeSeriesList.get(0).getValues().length; if (length == 0) return 0.; double[] sums = new double[length]; for(int i = 0; i < length; i++) { for(DecoratedTimeSeries ts : timeSeriesList) { if (!ts.hasOption(TimeSeriesOption.DRAW_AS_INFINITE)) { sums[i] += (ts.getValues()[i] != null ? ts.getValues()[i] : 0); } } } double result = Double.NEGATIVE_INFINITY; for(int i = 0; i < length; i++) { if (sums[i] > result) result = sums[i]; } return result; } public static double closest(double number, double[] neighbors) { double distance = Double.POSITIVE_INFINITY; double closestNeighbor = neighbors[0]; for(double neighbor : neighbors) { double d = Math.abs(neighbor - number); if (d < distance) { distance = d; closestNeighbor = neighbor; } } return closestNeighbor; } }