Move the parsetFromString method from TypedKey to ColumnDefinition since in general...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Thu, 12 Apr 2012 16:51:23 +0000 (16:51 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Thu, 12 Apr 2012 16:51:23 +0000 (16:51 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@544 180e2498-e6e9-4542-8430-84ac67f01cd8

core/src/net/sf/openrocket/file/preset/ColumnDefinition.java
core/src/net/sf/openrocket/preset/TypedKey.java

index 5be16945de9507077e2f2ec5b9905362510fa058..a336cfae5bd486a79a6e3df67da61fc269e19ab4 100644 (file)
@@ -1,7 +1,14 @@
 package net.sf.openrocket.file.preset;
 
+import net.sf.openrocket.database.Databases;
+import net.sf.openrocket.material.Material;
+import net.sf.openrocket.motor.Manufacturer;
+import net.sf.openrocket.preset.ComponentPreset;
 import net.sf.openrocket.preset.TypedKey;
 import net.sf.openrocket.preset.TypedPropertyMap;
+import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
+import net.sf.openrocket.rocketcomponent.Transition.Shape;
+import net.sf.openrocket.startup.Application;
 
 public class ColumnDefinition<T> {
        TypedKey<T> key;
@@ -9,9 +16,79 @@ public class ColumnDefinition<T> {
                this.key = key;
        }
        public void setProperty( TypedPropertyMap preset, String value ) {
-               T o = (T) key.parseFromString(value);
+               T o = (T) parseFromString(key.getType(), value);
                if ( o != null ) {
                        preset.put(key, o);
                }
        }
+
+       private static Object parseFromString( Class<?> type, String value ) {
+               if ( type.equals(Manufacturer.class)) {
+                       Manufacturer m = Manufacturer.getManufacturer(value);
+                       return m;
+               }
+               if ( type.equals(ComponentPreset.Type.class) ) {
+                       ComponentPreset.Type t = ComponentPreset.Type.valueOf(value);
+                       return t;
+               }
+               if ( type.equals(Boolean.class) ) {
+                       return Boolean.parseBoolean(value);
+               }
+               if ( type.isAssignableFrom(Double.class) ) {
+                       return Double.parseDouble(value);
+               }
+               if ( type.equals(String.class ) ) {
+                       return value;
+               }
+               if ( type.equals(Finish.class) ) {
+                       return Finish.valueOf(value);
+               }
+               if ( type.equals(Material.class) ) {
+                       if ( "balsa".equalsIgnoreCase(value) ) {
+                               String translated_value = Application.getTranslator().get("Databases.materials.Balsa");
+                               return getMaterialFor(translated_value);
+                       }
+                       throw new IllegalArgumentException("Invalid material " + value + " in component preset.");
+               }
+               if ( type.equals(Shape.class) ) {
+                       //FIXME - ignore case!
+                       if ( "ogive".equalsIgnoreCase(value) ) {
+                               return Shape.OGIVE;
+                       }
+                       if ( "cone".equalsIgnoreCase(value) ) {
+                               return Shape.CONICAL;
+                       }
+                       if ( "elliptical".equalsIgnoreCase(value) ) {
+                               return Shape.ELLIPSOID;
+                       }
+                       if ( "parabolic".equalsIgnoreCase(value) ) {
+                               return Shape.PARABOLIC;
+                       }
+                       if ( "sears-haack".equalsIgnoreCase(value) ) {
+                               return Shape.HAACK;
+                       }
+                       if ( "power-series".equalsIgnoreCase(value) ) {
+                               return Shape.POWER;
+                       }
+                       throw new IllegalArgumentException("Invalid shape " + value + " in component preset.");
+               }
+               throw new IllegalArgumentException("Invalid type " + type.getName() + " for component preset parameter." );
+       }
+       
+       private static Material getMaterialFor( String translatedName ) {
+               Material material;
+               material = Databases.findMaterial(Material.Type.BULK, translatedName);
+               if ( material != null ) {
+                       return material;
+               }
+               material = Databases.findMaterial(Material.Type.LINE, translatedName);
+               if ( material != null ) {
+                       return material;
+               }
+               material = Databases.findMaterial(Material.Type.SURFACE, translatedName);
+               if ( material != null ) {
+                       return material;
+               }
+               throw new IllegalArgumentException("Invalid Material: " + translatedName );
+       }
 }
index 57652007a94a9b6a5cdba4bba4e527d39d06e9a5..c3e4473187ad88199ea11e60fd1d247230530aa3 100644 (file)
@@ -1,11 +1,5 @@
 package net.sf.openrocket.preset;
 
-import org.jfree.util.StringUtils;
-
-import net.sf.openrocket.material.Material;
-import net.sf.openrocket.motor.Manufacturer;
-import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
-import net.sf.openrocket.rocketcomponent.Transition.Shape;
 import net.sf.openrocket.unit.UnitGroup;
 
 public class TypedKey<T> {
@@ -41,73 +35,6 @@ public class TypedKey<T> {
                return unitGroup;
        }
 
-       public Object parseFromString( String value ) {
-               if ( type.equals(Manufacturer.class)) {
-                       Manufacturer m = Manufacturer.getManufacturer(value);
-                       return m;
-               }
-               if ( type.equals(ComponentPreset.Type.class) ) {
-                       ComponentPreset.Type t = ComponentPreset.Type.valueOf(value);
-                       return t;
-               }
-               if ( type.equals(Boolean.class) ) {
-                       return Boolean.parseBoolean(value);
-               }
-               if ( type.isAssignableFrom(Double.class) ) {
-                       return Double.parseDouble(value);
-               }
-               if ( type.equals(String.class ) ) {
-                       return value;
-               }
-               if ( type.equals(Finish.class) ) {
-                       return Finish.valueOf(value);
-               }
-               if ( type.equals(Material.class) ) {
-                       // FIXME - cannot parse Materials just yet.  Need a way to do it without worrying about locale.
-                       return null;
-                       /*
-                       String translated_value = Application.getTranslator().get(value);
-                       Material material;
-                       material = Databases.findMaterial(Material.Type.BULK, translated_value);
-                       if ( material != null ) {
-                               return material;
-                       }
-                       material = Databases.findMaterial(Material.Type.LINE, translated_value);
-                       if ( material != null ) {
-                               return material;
-                       }
-                       material = Databases.findMaterial(Material.Type.SURFACE, translated_value);
-                       if ( material != null ) {
-                               return material;
-                       }
-                       throw new IllegalArgumentException("Invalid material " + value + " in component preset.");
-                       */
-               }
-               if ( type.equals(Shape.class) ) {
-                       //FIXME - ignore case!
-                       if ( "ogive".equalsIgnoreCase(value) ) {
-                               return Shape.OGIVE;
-                       }
-                       if ( "cone".equalsIgnoreCase(value) ) {
-                               return Shape.CONICAL;
-                       }
-                       if ( "elliptical".equalsIgnoreCase(value) ) {
-                               return Shape.ELLIPSOID;
-                       }
-                       if ( "parabolic".equalsIgnoreCase(value) ) {
-                               return Shape.PARABOLIC;
-                       }
-                       if ( "sears-haack".equalsIgnoreCase(value) ) {
-                               return Shape.HAACK;
-                       }
-                       if ( "power-series".equalsIgnoreCase(value) ) {
-                               return Shape.POWER;
-                       }
-                       throw new IllegalArgumentException("Invalid shape " + value + " in component preset.");
-               }
-               throw new IllegalArgumentException("Inavlid type " + type.getName() + " for component preset parameter " + name);
-       }
-
        @Override
        public int hashCode() {
                final int prime = 31;