motor updates
[debian/openrocket] / src / net / sf / openrocket / motor / Manufacturer.java
index 80c92f06632412cbc96e3398494d0c620b576947..831181bbfae3033dd04a38b6c2345243ad15ed3b 100644 (file)
@@ -6,99 +6,105 @@ import java.util.HashSet;
 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", "ABC"));
-
-               manufacturers.add(new Manufacturer("Contrail Rockets","Contrail Rockets",
+               
+               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);
@@ -108,17 +114,22 @@ public class Manufacturer {
                }
        }
        
-       
+
 
        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>();
@@ -128,7 +139,7 @@ public class Manufacturer {
                search.add(generateSearchString(displayName));
                search.add(generateSearchString(simpleName));
                
-               for (String name: alternateNames) {
+               for (String name : alternateNames) {
                        all.add(name);
                        search.add(generateSearchString(name));
                }
@@ -147,8 +158,8 @@ public class Manufacturer {
        public String getDisplayName() {
                return displayName;
        }
-
-
+       
+       
        /**
         * Returns the simple name of the manufacturer.  This should be used for example
         * when saving the manufacturer for compatibility.
@@ -158,8 +169,8 @@ public class Manufacturer {
        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).
@@ -169,7 +180,19 @@ public class Manufacturer {
        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
@@ -206,19 +229,19 @@ public class Manufacturer {
         * @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();
        }