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.motor.Manufacturer;
6 import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
7 import net.sf.openrocket.startup.Application;
8 import net.sf.openrocket.unit.UnitGroup;
10 public class TypedKey<T> {
12 private final String name;
13 private final Class<T> type;
14 private final UnitGroup unitGroup;
16 public TypedKey(String name, Class<T> type) {
17 this(name, type, null);
20 public TypedKey(String name, Class<T> type, UnitGroup unitGroup) {
23 this.unitGroup = unitGroup;
26 public String getName() {
30 public Class<T> getType() {
34 public UnitGroup getUnitGroup() {
38 public Object parseFromString( String value ) {
39 if ( type.equals(Manufacturer.class)) {
40 Manufacturer m = Manufacturer.getManufacturer(value);
43 if ( type.equals(ComponentPreset.Type.class) ) {
44 ComponentPreset.Type t = ComponentPreset.Type.valueOf(value);
47 if ( type.equals(Boolean.class) ) {
48 return Boolean.parseBoolean(value);
50 if ( type.isAssignableFrom(Double.class) ) {
51 return Double.parseDouble(value);
53 if ( type.equals(String.class ) ) {
56 if ( type.equals(Finish.class) ) {
57 return Finish.valueOf(value);
59 if ( type.equals(Material.class) ) {
60 // need to translate the value first!
61 String translated_value = Application.getTranslator().get(value);
63 material = Databases.findMaterial(Material.Type.BULK, translated_value);
64 if ( material != null ) {
67 material = Databases.findMaterial(Material.Type.LINE, translated_value);
68 if ( material != null ) {
71 material = Databases.findMaterial(Material.Type.SURFACE, translated_value);
72 if ( material != null ) {
75 throw new IllegalArgumentException("Invalid material " + value + " in component preset.");
77 throw new IllegalArgumentException("Inavlid type " + type.getName() + " for component preset parameter " + name);
81 public int hashCode() {
84 result = prime * result + ((name == null) ? 0 : name.hashCode());
85 result = prime * result + ((type == null) ? 0 : type.hashCode());
90 public boolean equals(Object obj) {
95 if (getClass() != obj.getClass())
97 TypedKey other = (TypedKey) obj;
99 if (other.name != null)
101 } else if (!name.equals(other.name))
104 if (other.type != null)
106 } else if (!type.equals(other.type))