package com.llamacorp.equate.unit;
import java.util.ArrayList;
import java.util.LinkedHashMap;
class UnitInitializer {
private static class UnitInitializerError extends RuntimeException {
}
/**
* Method to generate a default unit type array in the form of a linked
* hash map using the keys supplied as a parameter.
* @param keys for the returned Unit Type Hash map
* @param tabNames list of names for Unit Type tabs
* @return a linked hash map of Unit Types
* @throws UnitInitializerError if the supplied keys parameter is not of the
* same length as the default unit type array.
*/
public static LinkedHashMap<String, UnitType> getUnitTypeMap(ArrayList<String> keys,
ArrayList<String> tabNames)
throws UnitInitializerError {
LinkedHashMap<String, UnitType> unitTypeArray = new LinkedHashMap<>();
ArrayList<UnitType> units = getDefaultUnitArray(tabNames);
if (units.size() != keys.size())
throw new UnitInitializerError();
else {
for (int i = 0; i < keys.size(); i++) {
unitTypeArray.put(keys.get(i), units.get(i));
}
return unitTypeArray;
}
}
private static ArrayList<UnitType> getDefaultUnitArray(ArrayList<String> tabNames) {
ArrayList<UnitType> unitTypeArray = new ArrayList<>();
int nameInd = 0;
unitTypeArray.add(getCurrUnitType(tabNames.get(nameInd++)));
UnitType unitsOfTemp = new UnitType(tabNames.get(nameInd++));
unitsOfTemp.addUnit(new UnitTemperature());
unitsOfTemp.addUnit(new UnitTemperature());
unitsOfTemp.addUnit(new UnitTemperature());
unitsOfTemp.addUnit(new UnitTemperature());
unitsOfTemp.addUnit(new UnitTemperature("\u00B0F", "Fahrenheit", UnitTemperature.FAHRENHEIT));
unitsOfTemp.addUnit(new UnitTemperature());
unitsOfTemp.addUnit(new UnitTemperature());
unitsOfTemp.addUnit(new UnitTemperature());
unitsOfTemp.addUnit(new UnitTemperature("K", "Kelvin", UnitTemperature.KELVIN));
unitsOfTemp.addUnit(new UnitTemperature("\u00B0C", "Celsius", UnitTemperature.CELSIUS));
unitTypeArray.add(unitsOfTemp);
UnitType unitsOfWeight = new UnitType(tabNames.get(nameInd++));
unitsOfWeight.addUnit(new UnitScalar("oz", "Ounces", 1 / 0.028349523125)); //exact
unitsOfWeight.addUnit(new UnitScalar("lb", "Pounds", 1 / 0.45359237)); //exact
unitsOfWeight.addUnit(new UnitScalar("ton US", "Short Tons", 1 / 907.18474)); //exact
unitsOfWeight.addUnit(new UnitScalar("ton UK", "Long Tons", 1 / 1016.0469088)); //exact
unitsOfWeight.addUnit(new UnitScalar("st", "Stones", 1 / 6.35029318)); //exact
unitsOfWeight.addUnit(new UnitScalar("\u00B5g", "Micrograms", 1 / 1e-9));
unitsOfWeight.addUnit(new UnitScalar("mg", "Milligrams", 1 / 1e-6));
unitsOfWeight.addUnit(new UnitScalar("g", "Grams", 1 / 0.001));
unitsOfWeight.addUnit(new UnitScalar("kg", "Kilograms", 1));
unitsOfWeight.addUnit(new UnitScalar("ton", "Metric Tons", 1 / 1e3));
unitsOfWeight.addUnit(new UnitScalar("oz t", "Troy Ounces", 1 / 0.0311034768)); //exact
unitsOfWeight.addUnit(new UnitScalar("gr", "Grains", 1 / 6.479891E-5)); //exact
unitsOfWeight.addUnit(new UnitScalar("dwt", "Pennyweights", 20 / 0.0311034768)); //exact, 1/20 troy oz
unitsOfWeight.addUnit(new UnitScalar("CD", "Carats", 5000)); // =200mg
unitsOfWeight.addUnit(new UnitScalar("llama", "Avg Llama Weight", 1 / 165.0)); //avg of 130 and 200kg
unitTypeArray.add(unitsOfWeight);
UnitType unitsOfLength = new UnitType(tabNames.get(nameInd++));
unitsOfLength.addUnit(new UnitScalar("in", "Inches", 1 / 0.0254));//exact
unitsOfLength.addUnit(new UnitScalar("ft", "Feet", 1 / 0.3048));//exact: in*12
unitsOfLength.addUnit(new UnitScalar("yd", "Yards", 1 / 0.9144));//exact: in*12*3
unitsOfLength.addUnit(new UnitScalar("mi", "Miles", 1 / 1609.344));//exact: in*12*5280
unitsOfLength.addUnit(new UnitScalar("km", "Kilometers", 1 / 1000.0));
unitsOfLength.addUnit(new UnitScalar("\u00B5m", "Micrometers", 1E6));
unitsOfLength.addUnit(new UnitScalar("mm", "Millimeters", 1000));
unitsOfLength.addUnit(new UnitScalar("cm", "Centimeters", 100));
unitsOfLength.addUnit(new UnitScalar("m", "Meters", 1));
unitsOfLength.addUnit(new UnitScalar("nm", "Nanometers", 1E9));
unitsOfLength.addUnit(new UnitScalar("pm", "Picometers", 1E12));
unitsOfLength.addUnit(new UnitScalar("\u212B", "\u212Bngstr\u00F6ms", 1E10));
unitsOfLength.addUnit(new UnitScalar("mil", "Thousandths of an Inch", 1 / 2.54E-5));
unitsOfLength.addUnit(new UnitScalar("fur", "Furlongs", 0.00497096954));
unitsOfLength.addUnit(new UnitScalar("pc", "Parsecs", 3.24078E-17));
unitsOfLength.addUnit(new UnitScalar("nmi", "Nautical Miles", 1 / 1852.0));
unitsOfLength.addUnit(new UnitScalar("ly", "Light Years", 1 / 9.4607E15));
unitsOfLength.addUnit(new UnitScalar("au", "Astronomical Units", 1 / 1.495978707E11)); //exact
unitsOfLength.addUnit(new UnitScalar("llama", "Avg Llama Height", 1 / 1.75));
unitTypeArray.add(unitsOfLength);
UnitType unitsOfArea = new UnitType(tabNames.get(nameInd++));
unitsOfArea.addUnit(new UnitScalar("in\u00B2", "Square Inches", 1 / 0.00064516));//exact: 0.0254^2
unitsOfArea.addUnit(new UnitScalar("ft\u00B2", "Square Feet", 1 / 0.09290304));//0.3048^2
unitsOfArea.addUnit(new UnitScalar("yd\u00B2", "Square Yards", 1 / 0.83612736));//0.3048^2*9
unitsOfArea.addUnit(new UnitScalar("acre", "Acres", 1 / 4046.8564224));//0.3048^2*9*4840
unitsOfArea.addUnit(new UnitScalar("mi\u00B2", "Square Miles", 1 / 2589988.110336));//1609.344^2
unitsOfArea.addUnit(new UnitScalar("mm\u00B2", "Square Millimeters", 1 / 0.000001));
unitsOfArea.addUnit(new UnitScalar("cm\u00B2", "Square Centimeters", 1 / 0.0001));
unitsOfArea.addUnit(new UnitScalar("m\u00B2", "Square Meters", 1));
unitsOfArea.addUnit(new UnitScalar("km\u00B2", "Square Kilometers", 1 / 1000000.0));
unitsOfArea.addUnit(new UnitScalar("ha", "Hectares", 1 / 10000.0));
unitsOfArea.addUnit(new UnitScalar("a", "Ares", 0.01));
unitsOfArea.addUnit(new UnitScalar("cir mil", "Circular Mils", 1 / 5.067E-10));
unitTypeArray.add(unitsOfArea);
UnitType unitsOfVolume = new UnitType(tabNames.get(nameInd++));
unitsOfVolume.addUnit(new UnitScalar("tbsp", "Tablespoons", 1 / 0.00001478676478125));//exact: gal/256
unitsOfVolume.addUnit(new UnitScalar("cup", "Cups", 1 / 0.0002365882365));//exact: gal/16
unitsOfVolume.addUnit(new UnitScalar("pt", "Pints (US)", 1 / 0.000473176473));//exact: gal/8
unitsOfVolume.addUnit(new UnitScalar("qt", "Quarts (US)", 1 / 0.000946352946));//exact: gal/4
unitsOfVolume.addUnit(new UnitScalar("gal", "Gallons (US)", 1 / 0.003785411784));//exact: according to wiki
unitsOfVolume.addUnit(new UnitScalar("tsp", "Teaspoons", 1 / 0.00000492892159375));//exact: gal/768
unitsOfVolume.addUnit(new UnitScalar("fl oz", "Fluid Ounces (US)", 1 / 0.0000295735295625));//exact: gal/128
unitsOfVolume.addUnit(new UnitScalar("mL", "Milliliters", 1E6));
unitsOfVolume.addUnit(new UnitScalar("L", "Liters", 1000));
unitsOfVolume.addUnit(new UnitScalar("cL", "Centiliters", 1E5));
unitsOfVolume.addUnit(new UnitScalar("dL", "Deciliters", 1E4));
unitsOfVolume.addUnit(new UnitScalar("gal UK", "Gallons (UK)", 1000 / 4.54609));//exact: 4.54609L/gal uk
unitsOfVolume.addUnit(new UnitScalar("qt UK", "Quarts (UK)", 1000 / 1.1365225));//exact: gal uk/4
unitsOfVolume.addUnit(new UnitScalar("pt UK", "Pints (UK)", 1000 / 0.56826125));//exact: gal uk/8
unitsOfVolume.addUnit(new UnitScalar("fl oz UK", "Fluid Ounces (UK)", 1000 / 0.0284130625));//exact: gal uk/160
unitsOfVolume.addUnit(new UnitScalar("shot", "Shots (US)", 1 / 0.00004436029434375));//exact for 1.5 fl oz
unitsOfVolume.addUnit(new UnitScalar("m\u00B3", "Cubic Meters", 1));
unitsOfVolume.addUnit(new UnitScalar("in\u00B3", "Cubic Inches", 1 / 0.000016387064));//exact: gal/231
unitsOfVolume.addUnit(new UnitScalar("ft\u00B3", "Cubic Feet", 1 / 0.028316846592));//exact: gal/231*12^3
unitsOfVolume.addUnit(new UnitScalar("yd\u00B3", "Cubic Yards", 1 / 0.764554857984));//exact: 3^3 ft^3
unitsOfVolume.addUnit(new UnitScalar("cm\u00B3", "Cubic Centimeters", 1E6));
unitsOfVolume.addUnit(new UnitScalar("cm\u00B3", "Cubic Millimeters", 1E9));
unitTypeArray.add(unitsOfVolume);
UnitType unitsOfSpeed = new UnitType(tabNames.get(nameInd++));
unitsOfSpeed.addUnit(new UnitScalar("mi/min", "Miles per minute", 1 / 26.8224));
unitsOfSpeed.addUnit(new UnitScalar("min/mi", "Minute miles", 1 / 26.8224, true));
unitsOfSpeed.addUnit(new UnitScalar("ft/s", "Feet per Second", 1 / 0.3048));
unitsOfSpeed.addUnit(new UnitScalar("mph", "Miles per Hour", 1 / 0.44704));
unitsOfSpeed.addUnit(new UnitScalar("knot", "Knots", 1 / 0.514444));
unitsOfSpeed.addUnit(new UnitScalar());
unitsOfSpeed.addUnit(new UnitScalar());
unitsOfSpeed.addUnit(new UnitScalar());
unitsOfSpeed.addUnit(new UnitScalar("m/s", "Meters per Second", 1));
unitsOfSpeed.addUnit(new UnitScalar("kph", "Kilometers per Hour", 3.6));
unitTypeArray.add(unitsOfSpeed);
UnitType unitsOfTime = new UnitType(tabNames.get(nameInd++));
unitsOfTime.addUnit(new UnitScalar("sec", "Seconds", 1));
unitsOfTime.addUnit(new UnitScalar("min", "Minutes", 1 / 60.0));
unitsOfTime.addUnit(new UnitScalar("hour", "Hours", 1 / 3600.0));
unitsOfTime.addUnit(new UnitScalar("day", "Days", 1 / 86400.0));
unitsOfTime.addUnit(new UnitScalar("week", "Weeks", 1 / 604800.0));
unitsOfTime.addUnit(new UnitScalar("mo", "Months", 1 / 2629743.84)); //Exact - average month -- below divided by 12
unitsOfTime.addUnit(new UnitScalar("year", "Years", 1 / 31556926.08)); //Exact - Nasa says 365.2422 days per year avg
unitsOfTime.addUnit(new UnitScalar("ms", "Milliseconds", 1000));
unitsOfTime.addUnit(new UnitScalar("\u00B5s", "Microseconds", 1E6));
unitsOfTime.addUnit(new UnitScalar("ns", "Nanoseconds", 1E9));
unitTypeArray.add(unitsOfTime);
UnitType unitsOfFuel = new UnitType(tabNames.get(nameInd++));
unitsOfFuel.addUnit(new UnitScalar());
unitsOfFuel.addUnit(new UnitScalar());
unitsOfFuel.addUnit(new UnitScalar());
unitsOfFuel.addUnit(new UnitScalar("mpg US", "Miles per Gallon (US)", 3.785411784 / 1.609344)); //exact
unitsOfFuel.addUnit(new UnitScalar("mpg UK", "Miles per Gallon (UK)", 4.54609 / 1.609344)); //exact
unitsOfFuel.addUnit(new UnitScalar());
unitsOfFuel.addUnit(new UnitScalar());
unitsOfFuel.addUnit(new UnitScalar("L/100km", "Liter per 100 Kilometers", .01, true));
unitsOfFuel.addUnit(new UnitScalar("km/L", "Meters per Liter", 1));
unitsOfFuel.addUnit(new UnitScalar("mi/L", "Miles per Liter", 1 / 1.609344)); //exact
unitTypeArray.add(unitsOfFuel);
UnitType unitsOfPower = new UnitType(tabNames.get(nameInd++));
unitsOfPower.addUnit(new UnitScalar("MW", "Megawatts", 1E-6));
unitsOfPower.addUnit(new UnitScalar("kW", "Kilowatts", 1E-3));
unitsOfPower.addUnit(new UnitScalar("W", "Watts", 1));
unitsOfPower.addUnit(new UnitScalar("hp", "Imperial Horsepower", 0.00134102208959503)); //exact, see below
unitsOfPower.addUnit(new UnitScalar("PS", "Metric Horsepower", 1 / 735.49875)); //exact from wiki?
unitsOfPower.addUnit(new UnitScalar());
unitsOfPower.addUnit(new UnitScalar("Btu/hr", "Btus/Hour", 3.412141632)); //approx
unitsOfPower.addUnit(new UnitScalar("Btu/min", "Btus/Minute", 0.0568690272)); //approx
unitsOfPower.addUnit(new UnitScalar("ft-lb/min", "Foot-Pounds/Minute", 0.737562149277265 * 60)); //exact, see below
unitsOfPower.addUnit(new UnitScalar("ft-lb/sec", "Foot-Pounds/Second", 0.737562149277265)); //exact, see below
unitTypeArray.add(unitsOfPower);
UnitType unitsOfEnergy = new UnitType(tabNames.get(nameInd++));
unitsOfEnergy.addUnit(new UnitScalar("cal", "Calories", 0.239005736)); //approx
unitsOfEnergy.addUnit(new UnitScalar("kCal", "Kilocalories", 0.239005736 / 1E3)); //approx, but exact comp to cal
unitsOfEnergy.addUnit(new UnitScalar("BTU", "British Thermal Units", 0.00094781712)); //approx
unitsOfEnergy.addUnit(new UnitScalar("ft-lb", "Foot-pounds", 0.737562149277265)); //exact - assumes g=9.80665m^2/s
unitsOfEnergy.addUnit(new UnitScalar("in-lb", "Inch-pounds", 12 / 0.737562149277265)); //exact from ft-lb
unitsOfEnergy.addUnit(new UnitScalar("kJ", "Kilojoules", 0.001));
unitsOfEnergy.addUnit(new UnitScalar("J", "Joules", 1));
unitsOfEnergy.addUnit(new UnitScalar("Wh", "Watt-Hours", 1 / 3.6E3)); //exact
unitsOfEnergy.addUnit(new UnitScalar("kWh", "Kilowatt-Hours", 1 / 3.6E6)); //exact
unitsOfEnergy.addUnit(new UnitScalar("Nm", "Newton-Meters", 1));
unitsOfEnergy.addUnit(new UnitScalar("MJ", "Megajoules", 1E-6));
unitsOfEnergy.addUnit(new UnitScalar("eV", "Electronvolts", 6.241509E18));
unitsOfEnergy.addUnit(new UnitScalar("Ha", "Hartrees", 2.29371044869059200E17));
unitTypeArray.add(unitsOfEnergy);
UnitType unitsOfForce = new UnitType(tabNames.get(nameInd++));
unitsOfForce.addUnit(new UnitScalar());
unitsOfForce.addUnit(new UnitScalar());
unitsOfForce.addUnit(new UnitScalar("dyn", "Dynes", 1E5));
unitsOfForce.addUnit(new UnitScalar("kgf", "Kilogram-Force", 1 / 9.80665)); //exact
unitsOfForce.addUnit(new UnitScalar("N", "Newtons", 1));
unitsOfForce.addUnit(new UnitScalar());
unitsOfForce.addUnit(new UnitScalar());
unitsOfForce.addUnit(new UnitScalar("pdl", "Poundals", 1 / 0.138254954376)); //exact
unitsOfForce.addUnit(new UnitScalar("lbf", "Pound-Force", 1 / 4.4482216152605)); //exact
unitsOfForce.addUnit(new UnitScalar("ozf", "Ounce-Force", 16 / 4.4482216152605)); //exact
unitTypeArray.add(unitsOfForce);
UnitType unitsOfTorque = new UnitType(tabNames.get(nameInd++));
unitsOfTorque.addUnit(new UnitScalar("Nm", "Newton Meters", 1));
unitsOfTorque.addUnit(new UnitScalar("Ncm", "Newton Centimeters", 100));
unitsOfTorque.addUnit(new UnitScalar("kgf m", "Kilogram-Force Meters", 1 / 9.80665)); //exact
unitsOfTorque.addUnit(new UnitScalar("kgf cm", "Kilogram-Force Centimeters", 100 / 9.80665)); //exact
unitsOfTorque.addUnit(new UnitScalar("dyn m", "Dyne Meters", 1E5));
unitsOfTorque.addUnit(new UnitScalar("lbf in", "Pound-Force Inches", 12 / 1.3558179483314004)); //exact
unitsOfTorque.addUnit(new UnitScalar("lbf ft", "Pound-Force Feet", 1 / 1.3558179483314004)); //exact
unitsOfTorque.addUnit(new UnitScalar("ozf in", "Ounce-Force Inches", 192 / 1.3558179483314004)); //exact
unitsOfTorque.addUnit(new UnitScalar("ozf ft", "Ounce-Force Feet", 16 / 1.3558179483314004)); //exact
unitsOfTorque.addUnit(new UnitScalar("dyn cm", "Dyne Centimeters", 1));
unitTypeArray.add(unitsOfTorque);
UnitType unitsOfPressure = new UnitType(tabNames.get(nameInd++));
unitsOfPressure.addUnit(new UnitScalar("N/m\u00B2", "Newton/Square Meter", 1));
unitsOfPressure.addUnit(new UnitScalar("lb/ft\u00B2", "Pounds/Square Foot", 144 / 6894.757293168)); //approx
unitsOfPressure.addUnit(new UnitScalar("psi", "Pounds/Square Inch", 1 / 6894.757293168)); //approx
unitsOfPressure.addUnit(new UnitScalar("atm", "Atmospheres", 1 / 101325.0)); //exact
unitsOfPressure.addUnit(new UnitScalar("bar", "Bars", 0.00001)); //exact
unitsOfPressure.addUnit(new UnitScalar("kg/m\u00B2", "Kilogram/Square Meter", 1 / 9.80665)); //approx?
unitsOfPressure.addUnit(new UnitScalar("kPa", "Kilopascals", 0.001)); //exact
unitsOfPressure.addUnit(new UnitScalar("Pa", "Pascals", 1)); //exact
unitsOfPressure.addUnit(new UnitScalar("inHg", "Inches of Mercury", 1 / 3386.388640341)); //exact using cmHg - 1/(1333.22387415*2.54)
unitsOfPressure.addUnit(new UnitScalar("cmHg", "Centimeters of Mercury", 1 / 1333.22387415)); //exact
unitsOfPressure.addUnit(new UnitScalar("cmH\u2082O", "Centimeters of Water", 1 / 98.0665)); //exact
unitsOfPressure.addUnit(new UnitScalar("mmHg", "Millimeters of Mercury", 1 / 133.322387415)); //exact
unitsOfPressure.addUnit(new UnitScalar("N/cm\u00B2", "Newton/Square Centimeters", 1E-4));
unitsOfPressure.addUnit(new UnitScalar("N/mm\u00B2", "Newton/Square Millimeters", 1E-6));
unitsOfPressure.addUnit(new UnitScalar("kg/cm\u00B2", "Kilogram/Square Centimeter", 1 / 98066.5)); //approx?
unitsOfPressure.addUnit(new UnitScalar("Torr", "Torr", 760 / 101325.0)); //exact
unitsOfPressure.addUnit(new UnitScalar("mTorr", "Millitorr", 760 / 101.325)); //exact
unitTypeArray.add(unitsOfPressure);
UnitType unitsOfDigital = new UnitType(tabNames.get(nameInd++));
unitsOfDigital.addUnit(new UnitScalar("byte", "Bytes", 1. / 8));
unitsOfDigital.addUnit(new UnitScalar("kB", "Kilobytes", 1. / (8. * Math.pow(2, 10)))); //approx
unitsOfDigital.addUnit(new UnitScalar("MB", "Megabytes", 1. / (8. * Math.pow(2, 20)))); //exact
unitsOfDigital.addUnit(new UnitScalar("GB", "Gigabytes", 1. / (8. * Math.pow(2, 30)))); //exact
unitsOfDigital.addUnit(new UnitScalar("TB", "Terabytes", 1. / (8. * Math.pow(2, 40)))); //exact
unitsOfDigital.addUnit(new UnitScalar("bit", "Bits", 1));
unitsOfDigital.addUnit(new UnitScalar("kbit", "Kilobits", 1. / Math.pow(2, 10))); //approx
unitsOfDigital.addUnit(new UnitScalar("Mbit", "Megabits", 1. / Math.pow(2, 20))); //exact
unitsOfDigital.addUnit(new UnitScalar("Gbit", "Gigabits", 1. / Math.pow(2, 30))); //exact
unitsOfDigital.addUnit(new UnitScalar("nibble", "Nibbles", 1. / 4.)); //exact
unitsOfDigital.addUnit(new UnitScalar("Tbit", "Terabits", 1. / Math.pow(2, 40))); //exact
unitsOfDigital.addUnit(new UnitScalar("PB", "Petabytes", 1. / (8. * Math.pow(2, 50)))); //approx
unitsOfDigital.addUnit(new UnitScalar("EB", "Exabytes", 1. / (8. * Math.pow(2, 60)))); //approx
unitsOfDigital.addUnit(new UnitScalar("ZB", "Zettabytes", 1. / (8. * Math.pow(2, 70)))); //exact
unitsOfDigital.addUnit(new UnitScalar("YB", "Yottabytes", 1. / (8. * Math.pow(2, 80)))); //exact
unitsOfDigital.addUnit(new UnitScalar("Pbit", "Petabits", 1. / Math.pow(2, 50))); //approx
unitsOfDigital.addUnit(new UnitScalar("Ebit", "Exabits", 1. / Math.pow(2, 60))); //exact
unitsOfDigital.addUnit(new UnitScalar("Zbit", "Zettabits", 1. / Math.pow(2, 70))); //exact
unitsOfDigital.addUnit(new UnitScalar("Ybit", "Yottabits", 1. / Math.pow(2, 80))); //exact
unitTypeArray.add(unitsOfDigital);
return unitTypeArray;
}
/**
* Helper method for getDefaultUnitArray, just keeps the file a little
* more organized
*
* @return UnitArray of default unitCurrency
*/
private static UnitType getCurrUnitType(String name) {
//array of values from 1914 $10 bill; starts with 1913; uses the CPI index
//data can be found: http://data.bls.gov/timeseries/CUUR0000SA0
double[] cpiTable = {9.9, 10, 10.1, 10.9, 12.8, 15.1, 17.3, 20, 17.9, 16.8,
17.1, 17.1, 17.5, 17.7, 17.4, 17.1, 17.1, 16.7, 15.2, 13.7, 13, 13.4,
13.7, 13.9, 14.4, 14.1, 13.9, 14, 14.7, 16.3, 17.3, 17.6, 18, 19.5,
22.3, 24.1, 23.8, 24.1, 26, 26.5, 26.7, 26.9, 26.8, 27.2, 28.1, 28.9,
29.1, 29.6, 29.9, 30.2, 30.6, 31, 31.5, 32.4, 33.4, 34.8, 36.7, 38.8,
40.5, 41.8, 44.4, 49.3, 53.8, 56.9, 60.6, 65.2, 72.6, 82.4, 90.9, 96.5,
99.6, 103.9, 107.6, 109.6, 113.6, 118.3, 124, 130.7, 136.2, 140.3,
144.5, 148.2, 152.4, 156.9, 160.5, 163, 166.6, 172.2, 177.1, 179.9,
184, 188.9, 195.3, 201.6, 207.342, 215.303, 214.537, 218.056, 224.939,
229.594, 232.957, 236.911};
ArrayList<Double> al = new ArrayList<>();
for (double val : cpiTable) {
//convert values such that 1 is current 2014 dollar
double normalizedValue = val / cpiTable[cpiTable.length - 1];
al.add(normalizedValue);
}
UnitType uc = new UnitType(name,
"https://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote");
uc.addUnit(new UnitCurrency("USD", "Dollars", 1));
uc.addUnit(new UnitCurrency("EUR", "Euros", 0.929));
uc.addUnit(new UnitCurrency("CAD", "Canadian Dollars", 1.26));
uc.addUnit(new UnitCurrency("GBP", "British Pounds", 0.67));
uc.addUnit(new UnitCurrency("BTC", "Bitcoins", 0.004,
"https://blockchain.info/tobtc?currency=USD&value=1"));
uc.addUnit(new UnitHistCurrency("USD", "Dollars", al, 1913, 1975));
uc.addUnit(new UnitCurrency("CHF", "Swiss Francs", 0.967));
uc.addUnit(new UnitCurrency("JPY", "Japanese Yen", 119.7));
uc.addUnit(new UnitCurrency("HKD", "Hong Kong Dollars", 7.75));
uc.addUnit(new UnitCurrency("AUD", "Australian Dollars", 1.390144));
uc.addUnit(new UnitCurrency("CNY", "Chinese Yuans", 6.198));
uc.addUnit(new UnitCurrency("RUB", "Russian Rubles", 66.499496));
uc.addUnit(new UnitCurrency("AFN", "Afghan Afghani", 64.349998));
uc.addUnit(new UnitCurrency("ALL", "Albanian Lek", 122.059502));
uc.addUnit(new UnitCurrency("DZD", "Algerian Dinar", 105.470001));
uc.addUnit(new UnitCurrency("AOA", "Angolan Kwanza", 135.294998));
uc.addUnit(new UnitCurrency("ARS", "Argentine Peso", 9.3998));
uc.addUnit(new UnitCurrency("AMD", "Armenian Dram", 481.73999));
uc.addUnit(new UnitCurrency("AWG", "Aruban Florin", 1.79));
uc.addUnit(new UnitCurrency("AZN", "Azerbaijani Manat", 1.0568));
uc.addUnit(new UnitCurrency("BSD", "Bahamian Dollars", 1));
uc.addUnit(new UnitCurrency("BHD", "Bahraini Dinar", 0.3774));
uc.addUnit(new UnitCurrency("BDT", "Bangladeshi Taka", 77.822952));
uc.addUnit(new UnitCurrency("BBD", "Barbados Dollars", 2));
uc.addUnit(new UnitCurrency("BYR", "Belarusian Ruble", 17495));
uc.addUnit(new UnitCurrency("BZD", "Belize Dollars", 1.995));
uc.addUnit(new UnitCurrency("BMD", "Bermudian Dollars", 1));
uc.addUnit(new UnitCurrency("BTN", "Bhutanese Ngultrum", 65.764999));
uc.addUnit(new UnitCurrency("BOB", "Bolivian Boliviano", 6.9));
uc.addUnit(new UnitCurrency("BAM", "Bosnia-Herzegovina Convertible Mark", 1.7315));
uc.addUnit(new UnitCurrency("BWP", "Botswana Pula", 10.24795));
uc.addUnit(new UnitCurrency("BRL", "Brazilian Real", 3.9415));
uc.addUnit(new UnitCurrency("BND", "Brunei Dollars", 1.40215));
uc.addUnit(new UnitCurrency("BGN", "Bulgarian Lev", 1.7321));
uc.addUnit(new UnitCurrency("BIF", "Burundian Francs", 1549));
uc.addUnit(new UnitCurrency("KHR", "Cambodian Riel", 4094.949951));
uc.addUnit(new UnitCurrency("CVE", "Cape Verde Escudo", 97.0495));
uc.addUnit(new UnitCurrency("KYD", "Cayman Islands Dollars", 0.82));
uc.addUnit(new UnitCurrency("XAF", "Central African CFA", 580.724243));
uc.addUnit(new UnitCurrency("XPF", "CFP Francs", 105.645401));
uc.addUnit(new UnitCurrency("CLP", "Chilean Peso", 678.554993));
uc.addUnit(new UnitCurrency("CLF", "Chilean Unidad de Fomento", 0.0246));
uc.addUnit(new UnitCurrency("CNH", "Chinese Offshore Yuans", 6.38755));
uc.addUnit(new UnitCurrency("COP", "Colombian Peso", 2984.830078));
uc.addUnit(new UnitCurrency("KMF", "Comorian Francs", 435.543213));
uc.addUnit(new UnitCurrency("CDF", "Congolese Francs", 927.5));
uc.addUnit(new UnitCurrency("XCP", "Copper (lb)", 0.419463));
uc.addUnit(new UnitCurrency("CRC", "Costa Rican Colon", 532.299988));
uc.addUnit(new UnitCurrency("HRK", "Croatian Kuna", 6.75905));
uc.addUnit(new UnitCurrency("CUP", "Cuban Peso", 1));
uc.addUnit(new UnitCurrency("CYP", "Cypriot Pound", 0.51955));
uc.addUnit(new UnitCurrency("CZK", "Czech Koruna", 23.975));
uc.addUnit(new UnitCurrency("DKK", "Danish Krone", 6.60755));
uc.addUnit(new UnitCurrency("DEM", "Deutsche Mark (obsolete)", 1.71745));
uc.addUnit(new UnitCurrency("DJF", "Djiboutian Francs", 176.994995));
uc.addUnit(new UnitCurrency("DOP", "Dominican Peso", 45.209999));
uc.addUnit(new UnitCurrency("XCD", "East Caribbean Dollars", 2.7));
uc.addUnit(new UnitCurrency("ECS", "Ecuadorian Sucre (obsolete)", 25000));
uc.addUnit(new UnitCurrency("EGP", "Egyptian Pound", 7.8305));
uc.addUnit(new UnitCurrency("SVC", "El Salvador Colon (obsolete)", 8.7325));
uc.addUnit(new UnitCurrency("ERN", "Eritrean Nakfa", 15.28));
uc.addUnit(new UnitCurrency("ETB", "Ethiopian Birr", 20.898001));
uc.addUnit(new UnitCurrency("FKP", "Falkland Islands Pound", 0.6485));
uc.addUnit(new UnitCurrency("FJD", "Fiji Dollars", 2.15795));
uc.addUnit(new UnitCurrency("FRF", "French Franc (obsolete)", 5.7601));
uc.addUnit(new UnitCurrency("GMD", "Gambian Dalasi", 38.93));
uc.addUnit(new UnitCurrency("GEL", "Georgian Lari", 2.45));
uc.addUnit(new UnitCurrency("GHS", "Ghanaian Cedi", 3.9));
uc.addUnit(new UnitCurrency("GIP", "Gibraltar Pound", 0.6425));
uc.addUnit(new UnitCurrency("XAU", "Gold (oz)", 0.000879));
uc.addUnit(new UnitCurrency("GTQ", "Guatemalan Quetzal", 7.6545));
uc.addUnit(new UnitCurrency("GNF", "Guinean Francs", 7249.950195));
uc.addUnit(new UnitCurrency("GYD", "Guyanese Dollars", 207.210007));
uc.addUnit(new UnitCurrency("HTG", "Haitian Gourde", 51.737499));
uc.addUnit(new UnitCurrency("HNL", "Honduran Lempira", 21.949699));
uc.addUnit(new UnitCurrency("HUF", "Hungarian Forint", 275.369995));
uc.addUnit(new UnitCurrency("ISK", "Icelandic Krona", 127.324997));
uc.addUnit(new UnitCurrency("INR", "Indian Rupee", 65.870453));
uc.addUnit(new UnitCurrency("IDR", "Indonesian Rupiah", 14420.5));
uc.addUnit(new UnitCurrency("IRR", "Iranian Rial", 29605));
uc.addUnit(new UnitCurrency("IQD", "Iraqi Dinar", 1188));
uc.addUnit(new UnitCurrency("IEP", "Irish Pound", 0.699154));
uc.addUnit(new UnitCurrency("ILS", "Israeli New Shekel", 3.9344));
uc.addUnit(new UnitCurrency("ITL", "Italian Lira (obsolete)", 1700.272217));
uc.addUnit(new UnitCurrency("JMD", "Jamaican Dollars", 118.5));
uc.addUnit(new UnitCurrency("JOD", "Jordanian Dinar", 0.709));
uc.addUnit(new UnitCurrency("KZT", "Kazakhstani Tenge", 275.904938));
uc.addUnit(new UnitCurrency("KES", "Kenyan Shilling", 105.149498));
uc.addUnit(new UnitCurrency("KWD", "Kuwaiti Dinar", 0.3013));
uc.addUnit(new UnitCurrency("KGS", "Kyrgyzstanian Som", 70.493797));
uc.addUnit(new UnitCurrency("LAK", "Lao Kip", 8129.950195));
uc.addUnit(new UnitCurrency("LVL", "Latvian Lats (obsolete)", 0.62055));
uc.addUnit(new UnitCurrency("LBP", "Lebanese Pound", 1506.5));
uc.addUnit(new UnitCurrency("LSL", "Lesotho Loti", 13.31525));
uc.addUnit(new UnitCurrency("LRD", "Liberian Dollars", 84.660004));
uc.addUnit(new UnitCurrency("LYD", "Libyan Dinar", 1.36495));
uc.addUnit(new UnitCurrency("LTL", "Lithuanian Litas", 3.0487));
uc.addUnit(new UnitCurrency("MOP", "Macau Pataca", 7.9826));
uc.addUnit(new UnitCurrency("MKD", "Macedonian Denar", 53.91));
uc.addUnit(new UnitCurrency("MGA", "Malagasy Ariary", 3098.600098));
uc.addUnit(new UnitCurrency("MWK", "Malawian Kwacha", 557.494995));
uc.addUnit(new UnitCurrency("MYR", "Malaysian Ringgit", 4.2265));
uc.addUnit(new UnitCurrency("MVR", "Maldivian Rufiyaa", 15.34));
uc.addUnit(new UnitCurrency("MRO", "Mauritanian Ouguiya", 290));
uc.addUnit(new UnitCurrency("MUR", "Mauritian Rupee", 35.450001));
uc.addUnit(new UnitCurrency("MXN", "Mexican Peso", 16.6224));
uc.addUnit(new UnitCurrency("MXV", "Mexican Unidad de Inversion", 2.81));
uc.addUnit(new UnitCurrency("MDL", "Moldovan Leu", 19.9));
uc.addUnit(new UnitCurrency("MNT", "Mongolian Tugrik", 1990.5));
uc.addUnit(new UnitCurrency("MAD", "Moroccan Dirham", 9.67155));
uc.addUnit(new UnitCurrency("MZN", "Mozambican Metical", 43.169998));
uc.addUnit(new UnitCurrency("MMK", "Myanmar Kyat", 1282.400024));
uc.addUnit(new UnitCurrency("NAD", "Namibian Dollars", 13.31525));
uc.addUnit(new UnitCurrency("NPR", "Nepalese Rupee", 105.223999));
uc.addUnit(new UnitCurrency("ANG", "Netherlands Antillean Guilder", 1.79));
uc.addUnit(new UnitCurrency("TWD", "New Taiwan Dollars", 32.395));
uc.addUnit(new UnitCurrency("NZD", "New Zealand Dollars", 1.563441));
uc.addUnit(new UnitCurrency("NIO", "Nicaraguan Cordoba Oro", 27.553801));
uc.addUnit(new UnitCurrency("NGN", "Nigerian Naira", 199.044998));
uc.addUnit(new UnitCurrency("KPW", "North Korean Won", 900));
uc.addUnit(new UnitCurrency("NOK", "Norwegian Krone", 8.16405));
uc.addUnit(new UnitCurrency("OMR", "Omani Rial", 0.38505));
uc.addUnit(new UnitCurrency("PKR", "Pakistan Rupee", 104.355003));
uc.addUnit(new UnitCurrency("XPD", "Palladium (oz)", 0.001638));
uc.addUnit(new UnitCurrency("PAB", "Panamanian Balboa", 1));
uc.addUnit(new UnitCurrency("PGK", "Papua New Guinea Kina", 2.83015));
uc.addUnit(new UnitCurrency("PYG", "Paraguay Guarani", 5474.685059));
uc.addUnit(new UnitCurrency("PEN", "Peruvian Nuevo Sol", 3.19));
uc.addUnit(new UnitCurrency("PHP", "Philippine Peso", 46.512501));
uc.addUnit(new UnitCurrency("XPT", "Platinum (oz)", 0.001016));
uc.addUnit(new UnitCurrency("PLN", "Polish Zloty", 3.7231));
uc.addUnit(new UnitCurrency("QAR", "Qatari Riyal", 3.6438));
uc.addUnit(new UnitCurrency("RON", "Romanian Leu", 3.82225));
uc.addUnit(new UnitCurrency("RWF", "Rwandan Francs", 732.080017));
uc.addUnit(new UnitCurrency("WST", "Samoan Tala", 2.658703));
uc.addUnit(new UnitCurrency("STD", "Sao Tome Dobra", 21495));
uc.addUnit(new UnitCurrency("SAR", "Saudi Riyal", 3.75005));
uc.addUnit(new UnitCurrency("RSD", "Serbian Dinar", 106.220001));
uc.addUnit(new UnitCurrency("SCR", "Seychelles Rupee", 13.09995));
uc.addUnit(new UnitCurrency("SLL", "Sierra Leonean Leone", 4308));
uc.addUnit(new UnitCurrency("XAG", "Silver (oz)", 0.065989));
uc.addUnit(new UnitCurrency("SGD", "Singapore Dollars", 1.363));
uc.addUnit(new UnitCurrency("SIT", "Slovenian Tolar (obsolete)", 216.486755));
uc.addUnit(new UnitCurrency("SBD", "Solomon Islands Dollars", 7.971566));
uc.addUnit(new UnitCurrency("SOS", "Somali Shilling", 639.950012));
uc.addUnit(new UnitCurrency("ZAR", "South African Rand", 13.3139));
uc.addUnit(new UnitCurrency("KRW", "South-Korean Won", 1174.295044));
uc.addUnit(new UnitCurrency("XDR", "Special Drawing Rights", 0.70875));
uc.addUnit(new UnitCurrency("LKR", "Sri Lankan Rupee", 140.490005));
uc.addUnit(new UnitCurrency("SHP", "St Helena Pounds", 0.6425));
uc.addUnit(new UnitCurrency("SDG", "Sudanese Pounds", 6.09));
uc.addUnit(new UnitCurrency("SRD", "Suriname Dollars", 3.3));
uc.addUnit(new UnitCurrency("SZL", "Swazi Lilangeni", 13.31525));
uc.addUnit(new UnitCurrency("SEK", "Swedish Krona", 8.25805));
uc.addUnit(new UnitCurrency("SYP", "Syrian Pounds", 188.785995));
uc.addUnit(new UnitCurrency("TJS", "Tajikistan Somoni", 6.4005));
uc.addUnit(new UnitCurrency("TZS", "Tanzanian Shilling", 2169.199951));
uc.addUnit(new UnitCurrency("THB", "Thai Baht", 35.647999));
uc.addUnit(new UnitCurrency("TOP", "Tonga Pa'anga", 2.17491));
uc.addUnit(new UnitCurrency("TTD", "Trinidad/Tobago Dollars", 6.3382));
uc.addUnit(new UnitCurrency("TND", "Tunisian Dinar", 1.95155));
uc.addUnit(new UnitCurrency("TRY", "Turkish Lira", 3.00635));
uc.addUnit(new UnitCurrency("TMT", "Turkmenistan Manat", 3.5));
uc.addUnit(new UnitCurrency("UGX", "Uganda Shilling", 3650));
uc.addUnit(new UnitCurrency("UAH", "Ukrainian Hryvnia", 21.799999));
uc.addUnit(new UnitCurrency("AED", "United Arab Emirates Dirham", 3.67275));
uc.addUnit(new UnitCurrency("UYU", "Uruguayan Peso", 28.815001));
uc.addUnit(new UnitCurrency("UZS", "Uzbekistani Som", 2610.889893));
uc.addUnit(new UnitCurrency("VUV", "Vanuatu Vatu", 114.485001));
uc.addUnit(new UnitCurrency("VEF", "Venezuelan Bolivar", 6.35));
uc.addUnit(new UnitCurrency("VND", "Vietnamese Dong", 22475));
uc.addUnit(new UnitCurrency("XOF", "West African CFA", 580.724243));
uc.addUnit(new UnitCurrency("YER", "Yemeni Rial", 214.889999));
uc.addUnit(new UnitCurrency("ZMW", "Zambian Kwacha", 10.003));
uc.addUnit(new UnitCurrency("ZWL", "Zimbabwean Dollars (obsolete)", 322.355011));
return uc;
}
}