package com.llamacorp.equate.unit; import java.util.ArrayList; import java.util.Locale; public class UnitHistCurrency extends Unit { private static String GENERIC_PREFIX = "Historical "; private static String GENERIC_SUFFIX = " (CPI)"; private String mNamePrefix; private String mLongNamePrefix; private int mYearIndex = 0; //used when we want to convert from this unit to this unit again (different year) private int mPreviousYearIndex = 0; private int mStartYearOffset; private ArrayList<Double> mHistoricalValueArray; public UnitHistCurrency(String name, String longName, ArrayList<Double> values, int indexStartYear, int defaultStartYear) { mNamePrefix = name; mLongNamePrefix = longName; mHistoricalValueArray = values; mStartYearOffset = indexStartYear; if (defaultStartYear - indexStartYear < values.size()) mYearIndex = defaultStartYear - indexStartYear; setYearIndex(mYearIndex); } @Override public String convertTo(Unit toUnit, String expressionToConv) { double toUnitValue; if (this == toUnit) toUnitValue = getPreviousUnitValue(); else toUnitValue = getValue(); return expressionToConv + "*" + toUnit.getValue() + "/" + toUnitValue; } /** * Index value 0 corresponds to 2014, 1 to 2013 etc */ public void setYearIndexReversed(int reversedIndex) { setYearIndex(mHistoricalValueArray.size() - 1 - reversedIndex); } private void setYearIndex(int index) { mPreviousYearIndex = mYearIndex; mYearIndex = index; setValue(mHistoricalValueArray.get(mYearIndex)); refreshNames(); } /** * Used when conversion is being performed from one historical * year to another. This function retrieves the first historical * currency value selection */ private double getPreviousUnitValue() { return mHistoricalValueArray.get(mPreviousYearIndex); } /** * @return an array of all years in decrementing order * (2014, 2013,... etc) */ public CharSequence[] getPossibleYearsReversed() { int arraySize = mHistoricalValueArray.size(); CharSequence[] cs = new CharSequence[arraySize]; for (int i = 0; i < arraySize; i++) cs[i] = String.valueOf(mStartYearOffset + arraySize - 1 - i); return cs; } public String getGenericLongName() { return GENERIC_PREFIX + mLongNamePrefix + GENERIC_SUFFIX; } public String getLowercaseGenericLongName() { String temp = GENERIC_PREFIX + mLongNamePrefix; return temp.toLowerCase(Locale.US) + GENERIC_SUFFIX; } public String getPreviousLowercaseLongName() { return getLongName(mPreviousYearIndex).toLowerCase(Locale.US); } public String getPreviousShortName() { return getShortName(mPreviousYearIndex); } private void refreshNames() { setAbbreviation(getShortName(mYearIndex)); setLongName(getLongName(mYearIndex)); } private String getLongName(int index) { return mLongNamePrefix + " in " + getSelectedYear(index); } private String getShortName(int index) { return mNamePrefix + " [" + getSelectedYear(index) + "]"; } private int getSelectedYear(int index) { return index + mStartYearOffset; } public int getReversedYearIndex() { return mHistoricalValueArray.size() - 1 - mYearIndex; } }