import java.util.List;
import java.util.Set;
+/**
+ * Class containing information about motor manufacturers.
+ *
+ * @author Sampo Niskanen <sampo.niskanen@iki.fi>
+ */
public class Manufacturer {
private static Set<Manufacturer> manufacturers = new HashSet<Manufacturer>();
static {
-
+
// AeroTech has many name combinations...
List<String> names = new ArrayList<String>();
- for (String s: new String[] { "A", "AT", "AERO", "AEROT", "AEROTECH" }) {
+ for (String s : new String[] { "A", "AT", "AERO", "AEROT", "AEROTECH" }) {
names.add(s);
- names.add(s+"-RMS");
- names.add(s+"-RCS");
+ names.add(s + "-RMS");
+ names.add(s + "-RCS");
names.add("RCS-" + s);
- names.add(s+"-APOGEE");
+ names.add(s + "-APOGEE");
}
names.add("ISP");
-
- manufacturers.add(new Manufacturer("AeroTech", "AeroTech",
+
+ // Aerotech has single-use, reload and hybrid motors
+ manufacturers.add(new Manufacturer("AeroTech", "AeroTech", Motor.Type.UNKNOWN,
names.toArray(new String[0])));
- manufacturers.add(new Manufacturer("Alpha Hybrid Rocketry LLC",
- "Alpha Hybrid Rocketry",
+ manufacturers.add(new Manufacturer("Alpha Hybrid Rocketry LLC", "Alpha Hybrid Rocketry", Motor.Type.HYBRID,
"AHR", "ALPHA", "ALPHA HYBRID", "ALPHA HYBRIDS", "ALPHA HYBRIDS ROCKETRY"));
-
- manufacturers.add(new Manufacturer("Animal Motor Works","Animal Motor Works",
+
+ // TODO: HIGH: AMW/ProX - how to classify?
+
+ manufacturers.add(new Manufacturer("Animal Motor Works", "Animal Motor Works", Motor.Type.RELOAD,
"AMW", "AW", "ANIMAL"));
-
- manufacturers.add(new Manufacturer("Apogee","Apogee",
+
+ manufacturers.add(new Manufacturer("Apogee", "Apogee", Motor.Type.SINGLE,
"AP", "APOG", "P"));
-
- manufacturers.add(new Manufacturer("Cesaroni Technology Inc.",
- "Cesaroni Technology",
+
+ manufacturers.add(new Manufacturer("Cesaroni Technology Inc.", "Cesaroni Technology", Motor.Type.RELOAD,
"CES", "CESARONI", "CESARONI TECHNOLOGY INCORPORATED", "CTI",
- "CS", "CSR", "PRO38"));
-
- manufacturers.add(new Manufacturer("Contrail Rockets","Contrail Rockets",
+ "CS", "CSR", "PRO38", "ABC"));
+
+ manufacturers.add(new Manufacturer("Contrail Rockets", "Contrail Rockets", Motor.Type.HYBRID,
"CR", "CONTR", "CONTRAIL", "CONTRAIL ROCKET"));
- manufacturers.add(new Manufacturer("Estes","Estes",
+ manufacturers.add(new Manufacturer("Estes", "Estes", Motor.Type.SINGLE,
"E", "ES"));
- manufacturers.add(new Manufacturer("Ellis Mountain","Ellis Mountain",
+ // Ellis Mountain has both single-use and reload motors
+ manufacturers.add(new Manufacturer("Ellis Mountain", "Ellis Mountain", Motor.Type.UNKNOWN,
"EM", "ELLIS", "ELLIS MOUNTAIN ROCKET", "ELLIS MOUNTAIN ROCKETS"));
-
- manufacturers.add(new Manufacturer("Gorilla Rocket Motors",
- "Gorilla Rocket Motors",
- "GR", "GORILLA", "GORILLA ROCKET", "GORILLA ROCKETS", "GORILLA MOTOR",
+
+ manufacturers.add(new Manufacturer("Gorilla Rocket Motors", "Gorilla Rocket Motors", Motor.Type.RELOAD,
+ "GR", "GORILLA", "GORILLA ROCKET", "GORILLA ROCKETS", "GORILLA MOTOR",
"GORILLA MOTORS", "GORILLA ROCKET MOTOR"));
- manufacturers.add(new Manufacturer("HyperTEK", "HyperTEK",
+ manufacturers.add(new Manufacturer("HyperTEK", "HyperTEK", Motor.Type.HYBRID,
"H", "HT", "HYPER"));
- manufacturers.add(new Manufacturer("Kosdon by AeroTech", "Kosdon by AeroTech",
+ manufacturers.add(new Manufacturer("Kosdon by AeroTech", "Kosdon by AeroTech", Motor.Type.RELOAD,
"K", "KBA", "K-AT", "KOS", "KOSDON", "KOSDON/AT", "KOSDON/AEROTECH"));
- manufacturers.add(new Manufacturer("Loki Research", "Loki Research",
+ manufacturers.add(new Manufacturer("Loki Research", "Loki Research", Motor.Type.RELOAD,
"LOKI", "LR"));
- manufacturers.add(new Manufacturer("Public Missiles, Ltd.", "Public Missiles",
+ manufacturers.add(new Manufacturer("Public Missiles, Ltd.", "Public Missiles", Motor.Type.SINGLE,
"PM", "PML", "PUBLIC MISSILES LIMITED"));
-
- manufacturers.add(new Manufacturer("Propulsion Polymers", "Propulsion Polymers",
+
+ manufacturers.add(new Manufacturer("Propulsion Polymers", "Propulsion Polymers", Motor.Type.HYBRID,
"PP", "PROP", "PROPULSION"));
- manufacturers.add(new Manufacturer("Quest", "Quest",
+ manufacturers.add(new Manufacturer("Quest", "Quest", Motor.Type.SINGLE,
"Q", "QU"));
- manufacturers.add(new Manufacturer("RATT Works", "RATT Works",
+ manufacturers.add(new Manufacturer("RATT Works", "RATT Works", Motor.Type.HYBRID,
"RATT", "RT", "RTW"));
- manufacturers.add(new Manufacturer("Roadrunner Rocketry","Roadrunner Rocketry",
+ manufacturers.add(new Manufacturer("Roadrunner Rocketry", "Roadrunner Rocketry", Motor.Type.SINGLE,
"RR", "ROADRUNNER"));
- manufacturers.add(new Manufacturer("Rocketvision", "Rocketvision",
+ manufacturers.add(new Manufacturer("Rocketvision", "Rocketvision", Motor.Type.SINGLE,
"RV", "ROCKET VISION"));
- manufacturers.add(new Manufacturer("Sky Ripper Systems","Sky Ripper Systems",
+ manufacturers.add(new Manufacturer("Sky Ripper Systems", "Sky Ripper Systems", Motor.Type.HYBRID,
"SR", "SRS", "SKYR", "SKYRIPPER", "SKY RIPPER", "SKYRIPPER SYSTEMS"));
- manufacturers.add(new Manufacturer("West Coast Hybrids", "West Coast Hybrids",
+ manufacturers.add(new Manufacturer("West Coast Hybrids", "West Coast Hybrids", Motor.Type.HYBRID,
"WCH", "WCR", "WEST COAST", "WEST COAST HYBRID"));
// German WECO Feuerwerk, previously Sachsen Feuerwerk
- manufacturers.add(new Manufacturer("WECO Feuerwerk", "WECO Feuerwerk",
+ manufacturers.add(new Manufacturer("WECO Feuerwerk", "WECO Feuerwerk", Motor.Type.SINGLE,
"WECO", "WECO FEUERWERKS", "SF", "SACHSEN", "SACHSEN FEUERWERK",
"SACHSEN FEUERWERKS"));
-
+
// Check that no duplicates have appeared
- for (Manufacturer m1: manufacturers) {
- for (Manufacturer m2: manufacturers) {
+ for (Manufacturer m1 : manufacturers) {
+ for (Manufacturer m2 : manufacturers) {
if (m1 == m2)
continue;
- for (String name: m1.getAllNames()) {
+ for (String name : m1.getAllNames()) {
if (m2.matches(name)) {
throw new IllegalStateException("Manufacturer name clash between " +
"manufacturers " + m1 + " and " + m2 + " name " + name);
}
}
-
+
private final String displayName;
private final String simpleName;
private final Set<String> allNames;
private final Set<String> searchNames;
+ private final Motor.Type motorType;
- private Manufacturer(String displayName, String simpleName, String... alternateNames) {
+ private Manufacturer(String displayName, String simpleName, Motor.Type motorType, String... alternateNames) {
this.displayName = displayName;
this.simpleName = simpleName;
+ this.motorType = motorType;
+ if (motorType == null) {
+ throw new IllegalArgumentException("motorType cannot be null");
+ }
Set<String> all = new HashSet<String>();
Set<String> search = new HashSet<String>();
search.add(generateSearchString(displayName));
search.add(generateSearchString(simpleName));
- for (String name: alternateNames) {
+ for (String name : alternateNames) {
all.add(name);
search.add(generateSearchString(name));
}
public String getDisplayName() {
return displayName;
}
-
-
+
+
/**
* Returns the simple name of the manufacturer. This should be used for example
* when saving the manufacturer for compatibility.
public String getSimpleName() {
return simpleName;
}
-
-
+
+
/**
* Return all names of the manufacturer. This includes all kinds of
* codes that correspond to the manufacturer (for example "A" for AeroTech).
public Set<String> getAllNames() {
return allNames;
}
-
+
+
+ /**
+ * Return the motor type that this manufacturer produces if it produces only one motor type.
+ * If the manufacturer manufactures multiple motor types or the type is unknown,
+ * type <code>UNKNOWN</code> is returned.
+ *
+ * @return the manufactured motor type, or <code>UNKNOWN</code>.
+ */
+ public Motor.Type getMotorType() {
+ return motorType;
+ }
+
/**
* Check whether the display, simple or any of the alternative names matches the
* @return the Manufacturer object corresponding the name.
*/
public static synchronized Manufacturer getManufacturer(String name) {
- for (Manufacturer m: manufacturers) {
+ for (Manufacturer m : manufacturers) {
if (m.matches(name))
return m;
}
- Manufacturer m = new Manufacturer(name.trim(), name.trim());
+ Manufacturer m = new Manufacturer(name.trim(), name.trim(), Motor.Type.UNKNOWN);
manufacturers.add(m);
return m;
}
-
-
+
+
private String generateSearchString(String str) {
return str.toLowerCase().replaceAll("[^a-zA-Z0-9]+", " ").trim();
}