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;
8 public class TypedKey<T> {
10 private final String name;
11 private final Class<T> type;
13 public TypedKey(String name, Class<T> type) {
18 public String getName() {
22 public Class<T> getType() {
26 public Object parseFromString( String value ) {
27 if ( type.equals(Boolean.class) ) {
28 return Boolean.parseBoolean(value);
30 if ( type.isAssignableFrom(Double.class) ) {
31 return Double.parseDouble(value);
33 if ( type.equals(String.class ) ) {
36 if ( type.equals(Finish.class) ) {
37 return Finish.valueOf(value);
39 if ( type.equals(Material.class) ) {
40 // need to translate the value first!
41 String translated_value = Application.getTranslator().get(value);
43 material = Databases.findMaterial(Material.Type.BULK, translated_value);
44 if ( material != null ) {
47 material = Databases.findMaterial(Material.Type.LINE, translated_value);
48 if ( material != null ) {
51 material = Databases.findMaterial(Material.Type.SURFACE, translated_value);
52 if ( material != null ) {
55 throw new IllegalArgumentException("Invalid material " + value + " in component preset.");
57 throw new IllegalArgumentException("Inavlid type " + type.getName() + " for component preset parameter " + name);
61 public int hashCode() {
64 result = prime * result + ((name == null) ? 0 : name.hashCode());
65 result = prime * result + ((type == null) ? 0 : type.hashCode());
70 public boolean equals(Object obj) {
75 if (getClass() != obj.getClass())
77 TypedKey other = (TypedKey) obj;
79 if (other.name != null)
81 } else if (!name.equals(other.name))
84 if (other.type != null)
86 } else if (!type.equals(other.type))