warnings
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / RocketScience.java
1 package com.billkuker.rocketry.motorsim;\r
2 \r
3 import java.util.HashSet;\r
4 import java.util.Set;\r
5 \r
6 import javax.measure.quantity.Pressure;\r
7 import javax.measure.quantity.Quantity;\r
8 import javax.measure.unit.NonSI;\r
9 import javax.measure.unit.ProductUnit;\r
10 import javax.measure.unit.SI;\r
11 import javax.measure.unit.Unit;\r
12 import javax.measure.unit.UnitFormat;\r
13 \r
14 public class RocketScience {\r
15         public static Unit<Pressure> PSI = new ProductUnit<Pressure>(NonSI.POUND_FORCE.divide(NonSI.INCH.pow(2)));\r
16         public static Unit<Impulse> NEWTON_SECOND = new ProductUnit<Impulse>(SI.NEWTON.times(SI.SECOND));\r
17         static{\r
18                 UnitFormat.getInstance().label(PSI, "psi");\r
19                 UnitFormat.getInstance().label(NEWTON_SECOND, "Ns");\r
20         }\r
21 \r
22         public interface MolarWeight extends Quantity {\r
23                 public static final Unit<MolarWeight> UNIT = new ProductUnit<MolarWeight>(\r
24                                 SI.KILOGRAM.divide(SI.MOLE));\r
25         }\r
26         \r
27         public interface Impulse extends Quantity {\r
28                 public static Unit<Impulse> UNIT = NEWTON_SECOND;\r
29         }\r
30 \r
31         public static enum UnitPreference{\r
32                 SI(new Unit[]{\r
33                                 javax.measure.unit.SI.MILLIMETER,\r
34                                 javax.measure.unit.SI.NEWTON,\r
35                                 javax.measure.unit.SI.MEGA(javax.measure.unit.SI.PASCAL),\r
36                                 NEWTON_SECOND\r
37                 }),\r
38                 NONSI(new Unit[]{\r
39                                 javax.measure.unit.NonSI.INCH,\r
40                                 javax.measure.unit.NonSI.POUND_FORCE,\r
41                                 PSI,\r
42                                 NEWTON_SECOND\r
43                 });\r
44                 \r
45                 public static UnitPreference preference = SI;\r
46                 \r
47                 protected Set<Unit<?>> units = new HashSet<Unit<?>>();\r
48                 \r
49                 @SuppressWarnings("unchecked")\r
50                 UnitPreference( Unit u[] ){\r
51                         for ( Unit uu : u )\r
52                                 units.add(uu);\r
53                 }\r
54                 \r
55                 @SuppressWarnings("unchecked")\r
56                 public Unit getPreferredUnit(Unit u){\r
57                         if ( units.contains(u) )\r
58                                 return u;\r
59                         for( Unit ret : units ){\r
60                                 if ( ret.isCompatible(u) ){\r
61                                         return ret;\r
62                                 }\r
63                         }\r
64                         return u;\r
65                 }\r
66         }\r
67 \r
68 }\r