1 package net.sf.openrocket.preset;
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;
9 public class TypedKey<T> {
11 private final String name;
12 private final Class<T> type;
13 private final UnitGroup unitGroup;
15 public TypedKey(String name, Class<T> type) {
16 this(name, type, null);
19 public TypedKey(String name, Class<T> type, UnitGroup unitGroup) {
22 this.unitGroup = unitGroup;
25 public String getName() {
29 public Class<T> getType() {
33 public UnitGroup getUnitGroup() {
37 public Object parseFromString(String value) {
38 if (type.equals(Boolean.class)) {
39 return Boolean.parseBoolean(value);
41 if (type.isAssignableFrom(Double.class)) {
42 return Double.parseDouble(value);
44 if (type.equals(String.class)) {
47 if (type.equals(Finish.class)) {
48 return Finish.valueOf(value);
50 if (type.equals(Material.class)) {
51 // need to translate the value first!
52 String translated_value = Application.getTranslator().get(value);
54 material = Databases.findMaterial(Material.Type.BULK, translated_value);
55 if (material != null) {
58 material = Databases.findMaterial(Material.Type.LINE, translated_value);
59 if (material != null) {
62 material = Databases.findMaterial(Material.Type.SURFACE, translated_value);
63 if (material != null) {
66 throw new IllegalArgumentException("Invalid material " + value + " in component preset.");
68 throw new IllegalArgumentException("Inavlid type " + type.getName() + " for component preset parameter " + name);
72 public int hashCode() {
75 result = prime * result + ((name == null) ? 0 : name.hashCode());
76 result = prime * result + ((type == null) ? 0 : type.hashCode());
81 public boolean equals(Object obj) {
86 if (getClass() != obj.getClass())
88 TypedKey other = (TypedKey) obj;
90 if (other.name != null)
92 } else if (!name.equals(other.name))
95 if (other.type != null)
97 } else if (!type.equals(other.type))