Get preferred units by quantity
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / RocketScience.java
index 198bf903ec757517ffe60187bd6e3bc5013a63ee..ab77759613fb345e55a57898a028dbb7f0492b49 100644 (file)
@@ -1,5 +1,7 @@
 package com.billkuker.rocketry.motorsim;\r
 \r
+import java.lang.reflect.Field;\r
+import java.lang.reflect.Modifier;\r
 import java.text.DecimalFormat;\r
 import java.text.NumberFormat;\r
 import java.util.HashSet;\r
@@ -87,6 +89,36 @@ public class RocketScience {
                        }\r
                        return u;\r
                }\r
+               \r
+               @SuppressWarnings("unchecked")\r
+               public <T extends Quantity> Unit<T> getPreferredUnit(Class<T> q){\r
+                       for( Unit<?> u : units ){\r
+                               try {\r
+                                       return u.asType(q); \r
+                               } catch ( ClassCastException e ) {\r
+                                       //Not compatible\r
+                               }\r
+                       }\r
+                       try {\r
+                               Field f = q.getDeclaredField("UNIT");\r
+                               if ( Modifier.isStatic(f.getModifiers()) ){\r
+                                       if ( Unit.class.isAssignableFrom(f.getType())){\r
+                                               return (Unit<T>)f.get(null);\r
+                                       }\r
+                               }\r
+                       } catch (SecurityException e) {\r
+                               e.printStackTrace();\r
+                       } catch (NoSuchFieldException e) {\r
+                               e.printStackTrace();\r
+                       } catch (IllegalArgumentException e) {\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
+                       } catch (IllegalAccessException e) {\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
+                       }\r
+                       return null;\r
+               }\r
        }\r
 \r
        public static <T extends Quantity> String ammountToString(Amount<T> a) {\r