package com.billkuker.rocketry.motorsim;\r
\r
+import java.text.DecimalFormat;\r
+import java.text.NumberFormat;\r
import java.util.HashSet;\r
import java.util.Set;\r
+import java.util.prefs.Preferences;\r
\r
import javax.measure.quantity.Pressure;\r
import javax.measure.quantity.Quantity;\r
import javax.measure.unit.Unit;\r
import javax.measure.unit.UnitFormat;\r
\r
+import org.jscience.physics.amount.Amount;\r
+\r
public class RocketScience {\r
public static Unit<Pressure> PSI = new ProductUnit<Pressure>(NonSI.POUND_FORCE.divide(NonSI.INCH.pow(2)));\r
public static Unit<Impulse> NEWTON_SECOND = new ProductUnit<Impulse>(SI.NEWTON.times(SI.SECOND));\r
NEWTON_SECOND\r
});\r
\r
- public static UnitPreference preference = SI;\r
+ private static UnitPreference preference = SI;\r
+\r
+ static {\r
+ Preferences prefs = Preferences.userNodeForPackage(RocketScience.class);\r
+ String p = prefs.get("PreferedUnits", "SI");\r
+ preference = UnitPreference.valueOf(p);\r
+ }\r
+ \r
+ public static UnitPreference getUnitPreference(){\r
+ return preference;\r
+ }\r
+ \r
+ public static void setUnitPreference( final UnitPreference up ){\r
+ preference = up;\r
+ Preferences prefs = Preferences.userNodeForPackage(RocketScience.class);\r
+ prefs.put("PreferedUnits", up.toString());\r
+ }\r
\r
protected Set<Unit<?>> units = new HashSet<Unit<?>>();\r
\r
- @SuppressWarnings("unchecked")\r
- UnitPreference( Unit u[] ){\r
- for ( Unit uu : u )\r
+ UnitPreference( Unit<?> u[] ){\r
+ for ( Unit<?> uu : u )\r
units.add(uu);\r
}\r
\r
@SuppressWarnings("unchecked")\r
- public Unit getPreferredUnit(Unit u){\r
+ public <T extends Quantity> Unit<T> getPreferredUnit(Unit<T> u){\r
if ( units.contains(u) )\r
return u;\r
- for( Unit ret : units ){\r
+ for( Unit<?> ret : units ){\r
if ( ret.isCompatible(u) ){\r
- return ret;\r
+ return (Unit<T>) ret;\r
}\r
}\r
return u;\r
}\r
}\r
\r
+ public static <T extends Quantity> String ammountToString(Amount<T> a) {\r
+ final NumberFormat nf = new DecimalFormat("##########.###");\r
+ return nf.format(a.doubleValue(a.getUnit())) + " " + a.getUnit();\r
+ }\r
+ \r
+ public static <T extends Quantity> String ammountToRoundedString(Amount<T> a) {\r
+ if (a == null)\r
+ return "NULL";\r
+ Unit<T> u = RocketScience.UnitPreference.preference.getPreferredUnit(a\r
+ .getUnit());\r
+ double d = a.doubleValue(u);\r
+\r
+ DecimalFormat df;\r
+\r
+ if (Math.abs(d) < 10.0) {\r
+ df = new DecimalFormat("#.##");\r
+ } else if (Math.abs(d) < 100.0) {\r
+ df = new DecimalFormat("#.#");\r
+ } else {\r
+ df = new DecimalFormat("#");\r
+ }\r
+\r
+ return df.format(d) + " " + u.toString();\r
+ }\r
+\r
}\r