package com.code44.finance.graphs.line;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LineGraphData {
private final List<LineGraphValue> values;
private final double maxValue;
private final double minValue;
private final int color;
private final float lineWidth;
private final Drawable dividerDrawable;
private final boolean isSmooth;
private final boolean useGlobalMinMax;
private LineGraphData(List<LineGraphValue> values, double maxValue, double minValue, int color, float lineWidth, Drawable dividerDrawable, boolean isSmooth, boolean useGlobalMinMax) {
this.values = values;
this.maxValue = maxValue;
this.minValue = minValue;
this.color = color;
this.lineWidth = lineWidth;
this.dividerDrawable = dividerDrawable;
this.isSmooth = isSmooth;
this.useGlobalMinMax = useGlobalMinMax;
}
public List<LineGraphValue> getValues() {
return values;
}
public LineGraphValue getValue(int position) {
return values.get(position);
}
public int size() {
return values.size();
}
public double getMaxValue() {
return maxValue;
}
public double getMinValue() {
return minValue;
}
public int getColor() {
return color;
}
public float getLineWidth() {
return lineWidth;
}
public Drawable getDividerDrawable() {
return dividerDrawable;
}
public boolean isSmooth() {
return isSmooth;
}
public boolean isUsingGlobalMinMax() {
return useGlobalMinMax;
}
public static class Builder {
private List<LineGraphValue> values;
private double maxValue;
private double minValue;
private int color;
private float lineWidth;
private Drawable dividerDrawable;
private boolean isSmooth = true;
private boolean useGlobalMinMax = true;
public Builder setValues(List<LineGraphValue> values) {
this.values = values;
return this;
}
public Builder addValues(List<LineGraphValue> values) {
if (values == null) {
return this;
}
if (this.values == null) {
this.values = new ArrayList<>();
}
this.values.addAll(values);
return this;
}
public Builder addValue(LineGraphValue value) {
if (this.values == null) {
this.values = new ArrayList<>();
}
this.values.add(value);
return this;
}
public Builder setColor(int color) {
this.color = color;
return this;
}
public Builder setLineWidth(float lineWidth) {
this.lineWidth = lineWidth;
return this;
}
public Builder setDividerDrawable(Drawable dividerDrawable) {
this.dividerDrawable = dividerDrawable;
return this;
}
public Builder setSmooth(boolean isSmooth) {
this.isSmooth = isSmooth;
return this;
}
public Builder setUseGlobalMinMax(boolean useGlobalMinMax) {
this.useGlobalMinMax = useGlobalMinMax;
return this;
}
public LineGraphData build() {
ensureSaneDefaults();
return new LineGraphData(values, maxValue, minValue, color, lineWidth, dividerDrawable, isSmooth, useGlobalMinMax);
}
private void ensureSaneDefaults() {
if (values == null) {
values = Collections.emptyList();
}
findMinMax();
if (color == 0) {
color = Color.BLACK;
}
}
private void findMinMax() {
if (values.size() > 0) {
minValue = Double.MAX_VALUE;
maxValue = Double.MIN_VALUE;
for (LineGraphValue value : values) {
if (value == null) {
continue;
}
if (Double.compare(value.getValue(), minValue) < 0) {
minValue = value.getValue();
}
if (Double.compare(value.getValue(), maxValue) > 0) {
maxValue = value.getValue();
}
}
} else {
minValue = 0;
maxValue = 0;
}
}
}
}