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