a336cfae5bd486a79a6e3df67da61fc269e19ab4
[debian/openrocket] / core / src / net / sf / openrocket / file / preset / ColumnDefinition.java
1 package net.sf.openrocket.file.preset;
2
3 import net.sf.openrocket.database.Databases;
4 import net.sf.openrocket.material.Material;
5 import net.sf.openrocket.motor.Manufacturer;
6 import net.sf.openrocket.preset.ComponentPreset;
7 import net.sf.openrocket.preset.TypedKey;
8 import net.sf.openrocket.preset.TypedPropertyMap;
9 import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
10 import net.sf.openrocket.rocketcomponent.Transition.Shape;
11 import net.sf.openrocket.startup.Application;
12
13 public class ColumnDefinition<T> {
14         TypedKey<T> key;
15         public ColumnDefinition( TypedKey<T> key ) {
16                 this.key = key;
17         }
18         public void setProperty( TypedPropertyMap preset, String value ) {
19                 T o = (T) parseFromString(key.getType(), value);
20                 if ( o != null ) {
21                         preset.put(key, o);
22                 }
23         }
24
25         private static Object parseFromString( Class<?> type, String value ) {
26                 if ( type.equals(Manufacturer.class)) {
27                         Manufacturer m = Manufacturer.getManufacturer(value);
28                         return m;
29                 }
30                 if ( type.equals(ComponentPreset.Type.class) ) {
31                         ComponentPreset.Type t = ComponentPreset.Type.valueOf(value);
32                         return t;
33                 }
34                 if ( type.equals(Boolean.class) ) {
35                         return Boolean.parseBoolean(value);
36                 }
37                 if ( type.isAssignableFrom(Double.class) ) {
38                         return Double.parseDouble(value);
39                 }
40                 if ( type.equals(String.class ) ) {
41                         return value;
42                 }
43                 if ( type.equals(Finish.class) ) {
44                         return Finish.valueOf(value);
45                 }
46                 if ( type.equals(Material.class) ) {
47                         if ( "balsa".equalsIgnoreCase(value) ) {
48                                 String translated_value = Application.getTranslator().get("Databases.materials.Balsa");
49                                 return getMaterialFor(translated_value);
50                         }
51                         throw new IllegalArgumentException("Invalid material " + value + " in component preset.");
52                 }
53                 if ( type.equals(Shape.class) ) {
54                         //FIXME - ignore case!
55                         if ( "ogive".equalsIgnoreCase(value) ) {
56                                 return Shape.OGIVE;
57                         }
58                         if ( "cone".equalsIgnoreCase(value) ) {
59                                 return Shape.CONICAL;
60                         }
61                         if ( "elliptical".equalsIgnoreCase(value) ) {
62                                 return Shape.ELLIPSOID;
63                         }
64                         if ( "parabolic".equalsIgnoreCase(value) ) {
65                                 return Shape.PARABOLIC;
66                         }
67                         if ( "sears-haack".equalsIgnoreCase(value) ) {
68                                 return Shape.HAACK;
69                         }
70                         if ( "power-series".equalsIgnoreCase(value) ) {
71                                 return Shape.POWER;
72                         }
73                         throw new IllegalArgumentException("Invalid shape " + value + " in component preset.");
74                 }
75                 throw new IllegalArgumentException("Invalid type " + type.getName() + " for component preset parameter." );
76         }
77         
78         private static Material getMaterialFor( String translatedName ) {
79                 Material material;
80                 material = Databases.findMaterial(Material.Type.BULK, translatedName);
81                 if ( material != null ) {
82                         return material;
83                 }
84                 material = Databases.findMaterial(Material.Type.LINE, translatedName);
85                 if ( material != null ) {
86                         return material;
87                 }
88                 material = Databases.findMaterial(Material.Type.SURFACE, translatedName);
89                 if ( material != null ) {
90                         return material;
91                 }
92                 throw new IllegalArgumentException("Invalid Material: " + translatedName );
93         }
94 }