+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);
+ }
+}