Support URI or inline (built in) fuels
authorBill Kuker <bkuker@billkuker.com>
Fri, 5 Nov 2010 14:44:11 +0000 (14:44 +0000)
committerBill Kuker <bkuker@billkuker.com>
Fri, 5 Nov 2010 14:44:11 +0000 (14:44 +0000)
src/com/billkuker/rocketry/motorsim/io/MotorIO.java

index c4b4ea5e512edee13e07a24f39789728977b77ca..f5732574cf6205efd2437ba65995b0786bc130bf 100644 (file)
@@ -18,6 +18,7 @@ import com.billkuker.rocketry.motorsim.Motor;
 import com.billkuker.rocketry.motorsim.fuel.FuelResolver;\r
 import com.billkuker.rocketry.motorsim.fuel.FuelResolver.FuelNotFound;\r
 import com.thoughtworks.xstream.XStream;\r
+import com.thoughtworks.xstream.converters.ConversionException;\r
 import com.thoughtworks.xstream.converters.Converter;\r
 import com.thoughtworks.xstream.converters.MarshallingContext;\r
 import com.thoughtworks.xstream.converters.UnmarshallingContext;\r
@@ -37,22 +38,41 @@ public class MotorIO {
                @Override\r
                public void marshal(Object o, HierarchicalStreamWriter w,\r
                                MarshallingContext ctx) {\r
-                       Fuel f = (Fuel)o;\r
-                       w.setValue(f.getURI().toString());\r
+                       /*Fuel f = (Fuel)o;\r
+                       w.setValue(f.getURI().toString());*/\r
+                       ctx.convertAnother(((Fuel)o).getURI());\r
                }\r
 \r
                @Override\r
                public Object unmarshal(HierarchicalStreamReader r,\r
                                UnmarshallingContext ctx) {\r
-                       String text = r.getValue();\r
+                       Object o = ctx.currentObject();\r
+                       Object uri = null;\r
+                       Class<?> c = ctx.getRequiredType();\r
+                       try { \r
+                               uri = ctx.convertAnother(o, URI.class);\r
+                       } catch ( ConversionException e ){\r
+                               e.printStackTrace();\r
+                       }\r
+                       if ( uri != null && uri instanceof URI ){\r
+                               try {\r
+                                       return FuelResolver.getFuel((URI)uri);\r
+                               } catch (FuelNotFound e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+\r
                        try {\r
-                               URI u = new URI(text);\r
-                               return FuelResolver.getFuel(u);\r
-                       } catch (URISyntaxException e) {\r
-                               throw new Error("Bad Fuel URI: " + text, e);\r
+                               return FuelResolver.getFuel(new URI("motorsim:" + c.getSimpleName()));\r
                        } catch (FuelNotFound e) {\r
-                               throw new Error("Can't find fuel: " + text, e);\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
+                       } catch (URISyntaxException e) {\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
                        }\r
+                       return null;\r
                }\r
                \r
        }\r