]> git.gag.com Git - debian/openrocket/blob - core/src/net/sf/openrocket/preset/TypedKey.java
Added support for Manufacturer and ComponentPreset.Type.
[debian/openrocket] / core / src / net / sf / openrocket / preset / TypedKey.java
1 package net.sf.openrocket.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.rocketcomponent.ExternalComponent.Finish;
7 import net.sf.openrocket.startup.Application;
8 import net.sf.openrocket.unit.UnitGroup;
9
10 public class TypedKey<T> {
11
12         private final String name;
13         private final Class<T> type;
14         private final UnitGroup unitGroup;
15         
16         public TypedKey(String name, Class<T> type) {
17                 this(name, type, null);
18         }
19         
20         public TypedKey(String name, Class<T> type, UnitGroup unitGroup) {
21                 this.name = name;
22                 this.type = type;
23                 this.unitGroup = unitGroup;
24         }
25
26         public String getName() {
27                 return name;
28         }
29
30         public Class<T> getType() {
31                 return type;
32         }
33
34         public UnitGroup getUnitGroup() {
35                 return unitGroup;
36         }
37
38         public Object parseFromString( String value ) {
39                 if ( type.equals(Manufacturer.class)) {
40                         Manufacturer m = Manufacturer.getManufacturer(value);
41                         return m;
42                 }
43                 if ( type.equals(ComponentPreset.Type.class) ) {
44                         ComponentPreset.Type t = ComponentPreset.Type.valueOf(value);
45                         return t;
46                 }
47                 if ( type.equals(Boolean.class) ) {
48                         return Boolean.parseBoolean(value);
49                 }
50                 if ( type.isAssignableFrom(Double.class) ) {
51                         return Double.parseDouble(value);
52                 }
53                 if ( type.equals(String.class ) ) {
54                         return value;
55                 }
56                 if ( type.equals(Finish.class) ) {
57                         return Finish.valueOf(value);
58                 }
59                 if ( type.equals(Material.class) ) {
60                         // need to translate the value first!
61                         String translated_value = Application.getTranslator().get(value);
62                         Material material;
63                         material = Databases.findMaterial(Material.Type.BULK, translated_value);
64                         if ( material != null ) {
65                                 return material;
66                         }
67                         material = Databases.findMaterial(Material.Type.LINE, translated_value);
68                         if ( material != null ) {
69                                 return material;
70                         }
71                         material = Databases.findMaterial(Material.Type.SURFACE, translated_value);
72                         if ( material != null ) {
73                                 return material;
74                         }
75                         throw new IllegalArgumentException("Invalid material " + value + " in component preset.");
76                 }
77                 throw new IllegalArgumentException("Inavlid type " + type.getName() + " for component preset parameter " + name);
78         }
79
80         @Override
81         public int hashCode() {
82                 final int prime = 31;
83                 int result = 1;
84                 result = prime * result + ((name == null) ? 0 : name.hashCode());
85                 result = prime * result + ((type == null) ? 0 : type.hashCode());
86                 return result;
87         }
88
89         @Override
90         public boolean equals(Object obj) {
91                 if (this == obj)
92                         return true;
93                 if (obj == null)
94                         return false;
95                 if (getClass() != obj.getClass())
96                         return false;
97                 TypedKey other = (TypedKey) obj;
98                 if (name == null) {
99                         if (other.name != null)
100                                 return false;
101                 } else if (!name.equals(other.name))
102                         return false;
103                 if (type == null) {
104                         if (other.type != null)
105                                 return false;
106                 } else if (!type.equals(other.type))
107                         return false;
108                 return true;
109         }
110         
111 }