X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fdata%2FUnitSetLibrary.java;fp=src%2Ftim%2Fprune%2Fdata%2FUnitSetLibrary.java;h=37f3cfc5f4a8f54f94eef9311ee97cf925390a4e;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/data/UnitSetLibrary.java b/src/tim/prune/data/UnitSetLibrary.java new file mode 100644 index 0000000..37f3cfc --- /dev/null +++ b/src/tim/prune/data/UnitSetLibrary.java @@ -0,0 +1,75 @@ +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); + } +}