package com.wildplot.android.rendering; import com.wildplot.android.rendering.graphics.wrapper.ColorWrap; import static java.lang.String.format; import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.when; final class PieChartTestParametersBuilder { private final double[] mValues; private final int mNumberOfValues; private final double mSum; private final double mFirstSectorAngle; private final double[] mStartAngles; private final double[] mArcLengths; private final ColorWrap[] mColors; PieChartTestParametersBuilder(double[] values, double firstSectorAngle) { if (values.length < 1) { throw new IllegalArgumentException("Empty array of values"); } mValues = values; mNumberOfValues = values.length; mSum = calcSum(values); if (mSum == 0) { throw new IllegalArgumentException( format("All %d values are zero", values.length)); } mFirstSectorAngle = firstSectorAngle; mStartAngles = new double[mNumberOfValues]; mArcLengths = new double[mNumberOfValues]; mColors = new ColorWrap[mNumberOfValues]; calcArcLengths(); calcStartAngles(); fillColors(); } private double calcSum(double[] values) { double sum = 0.; for (double v : values) { sum += v; } return sum; } private void calcArcLengths() { for (int i = 0; i < mNumberOfValues; i++) { mArcLengths[i] = 360.0 * mValues[i] / mSum; } } private void calcStartAngles() { mStartAngles[0] = mFirstSectorAngle; for (int i = 1; i < mNumberOfValues; i++) { mStartAngles[i] = mStartAngles[i - 1] + mArcLengths[i - 1]; } } private void fillColors() { for (int i = 0; i < mNumberOfValues; i++) { mColors[i] = createColorMock(i); } } private ColorWrap createColorMock(int i) { ColorWrap c = mock(ColorWrap.class); when(c.getColorValue()).thenReturn(i); return c; } double[] getStartAngles() { return mStartAngles; } double[] getArcLengths() { return mArcLengths; } ColorWrap[] getColors() { return mColors; } }