package tim.prune.data; /** * List of all possible unit sets, for example * metric, imperial, nautical */ public abstract class UnitSetLibrary { // Distance units - all conversion factors are from metres /** Units for feet (used for loading and converting values) */ public static final Unit UNITS_FEET = new Unit("feet", 3.2808); /** Units for metres */ public static final Unit UNITS_METRES = new Unit("metres"); /** Units for km */ public static final Unit UNITS_KILOMETRES = new Unit("kilometres", 1/1000.0); /** Units for miles */ public static final Unit UNITS_MILES = new Unit("miles", 1/1609.3); /** Units for nautical miles */ public static final Unit UNITS_NAUTICAL_MILES = new Unit("nauticalmiles", 1/1852.0); // Speed units - all conversion factors from metres per second public static final Unit SPEED_UNITS_METRESPERSEC = new Unit(UNITS_METRES, "persec"); public static final Unit SPEED_UNITS_FEETPERSEC = new Unit(UNITS_FEET, "persec"); public static final Unit SPEED_UNITS_MILESPERHOUR = new Unit(UNITS_MILES, "perhour", 60.0 * 60.0); public static final Unit SPEED_UNITS_KNOTS = new Unit(UNITS_NAUTICAL_MILES, "perhour", 60.0 * 60.0); public static final Unit SPEED_UNITS_KMPERHOUR = new Unit(UNITS_KILOMETRES, "perhour", 60.0 * 60.0); public static final Unit[] ALL_SPEED_UNITS = {SPEED_UNITS_METRESPERSEC, SPEED_UNITS_KMPERHOUR, SPEED_UNITS_FEETPERSEC, SPEED_UNITS_MILESPERHOUR}; /** Array of available unit sets */ private static UnitSet[] _sets = { new UnitSet("unitset.kilometres", UNITS_KILOMETRES, UNITS_METRES, SPEED_UNITS_KMPERHOUR, SPEED_UNITS_METRESPERSEC), new UnitSet("unitset.miles", UNITS_MILES, UNITS_FEET, SPEED_UNITS_MILESPERHOUR, SPEED_UNITS_FEETPERSEC), new UnitSet("unitset.nautical", UNITS_NAUTICAL_MILES, UNITS_FEET, SPEED_UNITS_KNOTS, SPEED_UNITS_FEETPERSEC) }; /** * @return number of available unit sets */ public static int getNumUnitSets() { return _sets.length; } /** * Get the specified unit set * @param inIndex index of set starting from 0 * @return specified unit set or the default one if index out of range */ public static UnitSet getUnitSet(int inIndex) { if (inIndex >= 0 && inIndex < getNumUnitSets()) { return _sets[inIndex]; } return _sets[0]; } /** * Get the unit set specified by the given key * @param inKey key to look for * @return unit set with given key, or default set if key not found */ public static UnitSet getUnitSet(String inKey) { // Loop over all available unit sets for (UnitSet set : _sets) { if (set.getNameKey().equals(inKey)) { return set; } } // Not found in list, so just return the first one return getUnitSet(0); } }