From: Bill Kuker Date: Sun, 31 Oct 2010 19:09:43 +0000 (+0000) Subject: Get preferred units by quantity X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=875ee21decdb10b185dfa3d1ec3c16d89b81633d;p=sw%2Fmotorsim Get preferred units by quantity --- diff --git a/src/com/billkuker/rocketry/motorsim/RocketScience.java b/src/com/billkuker/rocketry/motorsim/RocketScience.java index 198bf90..ab77759 100644 --- a/src/com/billkuker/rocketry/motorsim/RocketScience.java +++ b/src/com/billkuker/rocketry/motorsim/RocketScience.java @@ -1,5 +1,7 @@ package com.billkuker.rocketry.motorsim; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.HashSet; @@ -87,6 +89,36 @@ public class RocketScience { } return u; } + + @SuppressWarnings("unchecked") + public Unit getPreferredUnit(Class q){ + for( Unit u : units ){ + try { + return u.asType(q); + } catch ( ClassCastException e ) { + //Not compatible + } + } + try { + Field f = q.getDeclaredField("UNIT"); + if ( Modifier.isStatic(f.getModifiers()) ){ + if ( Unit.class.isAssignableFrom(f.getType())){ + return (Unit)f.get(null); + } + } + } catch (SecurityException e) { + e.printStackTrace(); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } } public static String ammountToString(Amount a) { diff --git a/test/UnitTests.java b/test/UnitTests.java index a3365f1..bf2a833 100644 --- a/test/UnitTests.java +++ b/test/UnitTests.java @@ -7,12 +7,13 @@ import com.billkuker.rocketry.motorsim.test.CoredCylindricalGrainTest; import com.billkuker.rocketry.motorsim.test.CylindricalChamberTest; import com.billkuker.rocketry.motorsim.test.KNSUTest; import com.billkuker.rocketry.motorsim.test.MotorIOTest; +import com.billkuker.rocketry.motorsim.test.RocketScienceTest; import com.billkuker.rocketry.motorsim.test.ShapeUtilTest; @RunWith(Suite.class) @SuiteClasses({ ConvergentDivergentNozzleTest.class, CoredCylindricalGrainTest.class, CylindricalChamberTest.class, - KNSUTest.class, MotorIOTest.class, ShapeUtilTest.class }) + KNSUTest.class, MotorIOTest.class, ShapeUtilTest.class, RocketScienceTest.class }) public class UnitTests { } diff --git a/test/com/billkuker/rocketry/motorsim/test/RocketScienceTest.java b/test/com/billkuker/rocketry/motorsim/test/RocketScienceTest.java new file mode 100644 index 0000000..eed0804 --- /dev/null +++ b/test/com/billkuker/rocketry/motorsim/test/RocketScienceTest.java @@ -0,0 +1,43 @@ +package com.billkuker.rocketry.motorsim.test; + +import javax.measure.quantity.Duration; +import javax.measure.quantity.Length; +import javax.measure.quantity.RadioactiveActivity; +import javax.measure.unit.NonSI; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +import junit.framework.Assert; + +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.RocketScience; + +public class RocketScienceTest { + + @Test + public void getPreferredUnitByQuantity() throws Exception { + Unit l = RocketScience.UnitPreference.SI.getPreferredUnit(Length.class); + Assert.assertTrue(l.isCompatible(SI.MILLIMETER)); + + Unit t = RocketScience.UnitPreference.SI.getPreferredUnit(Duration.class); + Assert.assertTrue(t.isCompatible(SI.SECOND)); + + //Just make sure it'll return for any quantity + Unit r = RocketScience.UnitPreference.SI.getPreferredUnit(RadioactiveActivity.class); + Assert.assertTrue(r.isCompatible(NonSI.RUTHERFORD)); + } + + @Test + public void getPreferredUnitByUnit() throws Exception { + Unit l = RocketScience.UnitPreference.SI.getPreferredUnit(NonSI.INCH); + Assert.assertTrue(l.isCompatible(SI.MILLIMETER)); + + Unit t = RocketScience.UnitPreference.SI.getPreferredUnit(NonSI.DAY); + Assert.assertTrue(t.isCompatible(SI.SECOND)); + + //Just make sure it'll return for any quantity + Unit r = RocketScience.UnitPreference.SI.getPreferredUnit(NonSI.RUTHERFORD); + Assert.assertTrue(r.isCompatible(NonSI.RUTHERFORD)); + } +}