1 package net.sf.openrocket.file.preset;
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;
13 public class ColumnDefinition<T> {
15 public ColumnDefinition( TypedKey<T> key ) {
18 public void setProperty( TypedPropertyMap preset, String value ) {
19 T o = (T) parseFromString(key.getType(), value);
25 private static Object parseFromString( Class<?> type, String value ) {
26 if ( type.equals(Manufacturer.class)) {
27 Manufacturer m = Manufacturer.getManufacturer(value);
30 if ( type.equals(ComponentPreset.Type.class) ) {
31 ComponentPreset.Type t = ComponentPreset.Type.valueOf(value);
34 if ( type.equals(Boolean.class) ) {
35 return Boolean.parseBoolean(value);
37 if ( type.isAssignableFrom(Double.class) ) {
38 return Double.parseDouble(value);
40 if ( type.equals(String.class ) ) {
43 if ( type.equals(Finish.class) ) {
44 return Finish.valueOf(value);
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);
51 throw new IllegalArgumentException("Invalid material " + value + " in component preset.");
53 if ( type.equals(Shape.class) ) {
54 //FIXME - ignore case!
55 if ( "ogive".equalsIgnoreCase(value) ) {
58 if ( "cone".equalsIgnoreCase(value) ) {
61 if ( "elliptical".equalsIgnoreCase(value) ) {
62 return Shape.ELLIPSOID;
64 if ( "parabolic".equalsIgnoreCase(value) ) {
65 return Shape.PARABOLIC;
67 if ( "sears-haack".equalsIgnoreCase(value) ) {
70 if ( "power-series".equalsIgnoreCase(value) ) {
73 throw new IllegalArgumentException("Invalid shape " + value + " in component preset.");
75 throw new IllegalArgumentException("Invalid type " + type.getName() + " for component preset parameter." );
78 private static Material getMaterialFor( String translatedName ) {
80 material = Databases.findMaterial(Material.Type.BULK, translatedName);
81 if ( material != null ) {
84 material = Databases.findMaterial(Material.Type.LINE, translatedName);
85 if ( material != null ) {
88 material = Databases.findMaterial(Material.Type.SURFACE, translatedName);
89 if ( material != null ) {
92 throw new IllegalArgumentException("Invalid Material: " + translatedName );