From 08f76683e9eba56e8d8f6a3de26c87bbc9b5d3f5 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Fri, 20 Aug 2021 13:35:20 -0600 Subject: [PATCH 1/8] ThrustCurveMotor now includes both common name and designation If both are not available (which is the case when loading from a file rather than from thrustcurve.org) use motor code for designation, and simplified designation for common name --- .../datafiles/thrustcurves/thrustcurves.ser | Bin 3084883 -> 3117809 bytes core/src/net/sf/openrocket/motor/Motor.java | 22 ++++++ .../sf/openrocket/motor/ThrustCurveMotor.java | 63 +++++++++++++++++- .../SerializeThrustcurveMotors.java | 12 ++-- .../sf/openrocket/thrustcurve/TCMotor.java | 2 +- 5 files changed, 90 insertions(+), 9 deletions(-) diff --git a/core/resources/datafiles/thrustcurves/thrustcurves.ser b/core/resources/datafiles/thrustcurves/thrustcurves.ser index 57c3662a35b8404d0545ffa5470725ea2098afa6..940a7da863a963152452800f80122c17022478db 100644 GIT binary patch delta 155878 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�d=^7*YZ< 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�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 diff --git a/core/src/net/sf/openrocket/motor/Motor.java b/core/src/net/sf/openrocket/motor/Motor.java index ae9199251..61d4eb4f1 100644 --- a/core/src/net/sf/openrocket/motor/Motor.java +++ b/core/src/net/sf/openrocket/motor/Motor.java @@ -74,6 +74,28 @@ public interface Motor { public Type getMotorType(); + /** + * Return the motor code + * + * @return the code + */ + public String getCode(); + + /** + * Return the common name of the motor. + * + * @return the common name + */ + public String getCommonName(); + + /** + * Return the common name of the motor, including a delay. + * + * @param delay the delay of the motor. + * @return common name with delay. + */ + public String getCommonName(double delay); + /** * Return the designation of the motor. * diff --git a/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java b/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java index 8d269344c..d5256d186 100644 --- a/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java +++ b/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java @@ -4,6 +4,8 @@ import java.io.Serializable; import java.text.Collator; import java.util.Arrays; import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,7 +35,10 @@ public class ThrustCurveMotor implements Motor, Comparable, Se private String digest = ""; private Manufacturer manufacturer = Manufacturer.getManufacturer("Unknown"); + private String code = ""; + private String commonName = ""; private String designation = ""; + private String description = ""; private Motor.Type type = Motor.Type.UNKNOWN; private double[] delays = {}; @@ -74,6 +79,16 @@ public class ThrustCurveMotor implements Motor, Comparable, Se motor.description = d; return this; } + + public Builder setCode(String c) { + motor.code = c; + return this; + } + + public Builder setCommonName(String n) { + motor.commonName = n; + return this; + } public Builder setDesignation(String d) { motor.designation = d; @@ -130,10 +145,28 @@ public class ThrustCurveMotor implements Motor, Comparable, Se return this; } - public Builder setAvailablity(boolean avail) { + public Builder setAvailability(boolean avail) { motor.available = avail; return this; } + + /** + * Simplify a motor designation, if possible. This attempts to reduce the designation + * into a simple letter + number notation for the impulse class and average thrust. + * + * @param str the designation to simplify + * @return the simplified designation, or the string itself if the format was not detected + */ + private static final Pattern SIMPLIFY_PATTERN = Pattern.compile("^[0-9]*[ -]*([A-Z][0-9]+).*"); + static String simplifyDesignation(String str) { + str = str.trim(); + Matcher m = SIMPLIFY_PATTERN.matcher(str); + if (m.matches()) { + return m.group(1); + } else { + return str.replaceAll("\\s", ""); + } + } public ThrustCurveMotor build() { // Check argument validity @@ -202,6 +235,19 @@ public class ThrustCurveMotor implements Motor, Comparable, Se motor.unitRotationalInertia = Inertia.filledCylinderRotational( motor.diameter / 2); motor.unitLongitudinalInertia = Inertia.filledCylinderLongitudinal( motor.diameter / 2, motor.length); + // If I don't have a motor designation (will be the case if I read the thrustcurve from a file) + // use the motor code + if (motor.designation.equals("")) { + motor.designation = motor.code; + } + + // If I don't have a motor common name (will be the case if I read the thrustcurve from a flle) + // apply the motor code simplification heuristics to generate a common name + if (motor.commonName.equals("")) { + motor.commonName = motor.designation; + } + + motor.computeStatistics(); return motor; @@ -440,6 +486,21 @@ public class ThrustCurveMotor implements Motor, Comparable, Se public double getUnitIzz(){ return this.unitLongitudinalInertia; } + + @Override + public String getCode() { + return code; + } + + @Override + public String getCommonName() { + return commonName; + } + + @Override + public String getCommonName(double delay) { + return commonName + "-" + getDelayString(delay); + } @Override public String getDesignation() { diff --git a/core/src/net/sf/openrocket/thrustcurve/SerializeThrustcurveMotors.java b/core/src/net/sf/openrocket/thrustcurve/SerializeThrustcurveMotors.java index 2299898dc..d900802bd 100644 --- a/core/src/net/sf/openrocket/thrustcurve/SerializeThrustcurveMotors.java +++ b/core/src/net/sf/openrocket/thrustcurve/SerializeThrustcurveMotors.java @@ -133,14 +133,12 @@ public class SerializeThrustcurveMotors { builder.setDiameter(mi.getDiameter() / 1000.0); builder.setLength(mi.getLength() / 1000.0); builder.setMotorType(type); + + builder.setCommonName(mi.getCommon_name()); + builder.setDesignation(mi.getDesignation()); - if ("OOP".equals(mi.getAvailiability())) { - builder.setDesignation(mi.getDesignation()); - builder.setAvailablity(false); - } else if (mi.getDesignation().startsWith("Micro")) { - builder.setDesignation(mi.getDesignation()); - } else { - builder.setDesignation(mi.getCommon_name()); + if ("OOP".equals(mi.getAvailability())) { + builder.setAvailability(false); } allMotors.add(builder.build()); diff --git a/core/src/net/sf/openrocket/thrustcurve/TCMotor.java b/core/src/net/sf/openrocket/thrustcurve/TCMotor.java index e9e645fca..9ce3bed90 100644 --- a/core/src/net/sf/openrocket/thrustcurve/TCMotor.java +++ b/core/src/net/sf/openrocket/thrustcurve/TCMotor.java @@ -270,7 +270,7 @@ public class TCMotor implements Cloneable { this.updated_on = updated_on; } - public String getAvailiability() { + public String getAvailability() { return availability; } From 88f5d19185170f0709ffc61128fae50f6c616e83 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Fri, 20 Aug 2021 14:18:26 -0600 Subject: [PATCH 2/8] Replace designation with common name in ThrustCurveMotorColumns Get rid of simplified designation in ThrustCurveMotorSet, using common name instead --- core/resources/l10n/messages.properties | 2 +- .../database/motor/ThrustCurveMotorSet.java | 59 +++++-------------- .../thrustcurve/ThrustCurveMotorColumns.java | 6 +- 3 files changed, 18 insertions(+), 49 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 2e2e983e8..42429aac9 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1588,7 +1588,7 @@ FlightEvent.Type.EXCEPTION = Exception ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Manufacturer -TCurveMotorCol.DESIGNATION = Designation +TCurveMotorCol.COMMON_NAME = Name TCurveMotorCol.CASEINFO = Case TCurveMotorCol.DIAMETER = Diameter TCurveMotorCol.LENGTH = Length diff --git a/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java b/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java index fe9428976..38479dee5 100644 --- a/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java +++ b/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java @@ -38,8 +38,8 @@ public class ThrustCurveMotorSet implements Comparable { private final List delays = new ArrayList(); private Manufacturer manufacturer = null; + private String commonName = null; private String designation = null; - private String simplifiedDesignation = null; private double diameter = -1; private double length = -1; private long totalImpulse = 0; @@ -57,7 +57,6 @@ public class ThrustCurveMotorSet implements Comparable { checkFirstInsertion(motor); verifyMotor(motor); updateType(motor); - checkChangeSimplifiedDesignation(motor); addStandardDelays(motor); if(!checkMotorOverwrite(motor)){ motors.add(motor); @@ -144,23 +143,6 @@ public class ThrustCurveMotorSet implements Comparable { Collections.sort(delays); } - - /** - * checks if simplified designation should be changed with the given motor - * @param motor the motor to be checked with - */ - private void checkChangeSimplifiedDesignation(ThrustCurveMotor motor) { - // Change the simplified designation if necessary - if (!designation.equalsIgnoreCase(motor.getDesignation().trim())) { - designation = simplifiedDesignation; - } - - if (caseInfo == null) { - caseInfo = motor.getCaseInfo(); - } - } - - /** * checks if the cached type should be changed with the given motor * if it's hybrid, delays will be added @@ -206,7 +188,7 @@ public class ThrustCurveMotorSet implements Comparable { if (motors.isEmpty()) { manufacturer = motor.getManufacturer(); designation = motor.getDesignation(); - simplifiedDesignation = simplifyDesignation(designation); + commonName = motor.getCommonName(); diameter = motor.getDiameter(); length = motor.getLength(); totalImpulse = Math.round((motor.getTotalImpulseEstimate())); @@ -239,14 +221,14 @@ public class ThrustCurveMotorSet implements Comparable { return false; } - if (!simplifiedDesignation.equalsIgnoreCase(simplifyDesignation(m.getDesignation()))) + if (!designation.equalsIgnoreCase(m.getDesignation())) return false; if (caseInfo != null && !caseInfo.equalsIgnoreCase(m.getCaseInfo())) return false; return true; - } + } /** * returns a new list with the stored motors @@ -283,11 +265,17 @@ public class ThrustCurveMotorSet implements Comparable { public Manufacturer getManufacturer() { return manufacturer; } - - + /** - * Return the designation of this motor type. This is either the exact or simplified - * designation, depending on what motors have been added. + * Return the common name of this motor type. + * @return the common name + */ + public String getCommonName() { + return commonName; + } + + /** + * Return the designation of this motor type. * @return the designation */ public String getDesignation() { @@ -352,25 +340,6 @@ public class ThrustCurveMotorSet implements Comparable { return "ThrustCurveMotorSet[" + manufacturer + " " + designation + ", type=" + type + ", count=" + motors.size() + "]"; } - - private static final Pattern SIMPLIFY_PATTERN = Pattern.compile("^[0-9]*[ -]*([A-Z][0-9]+).*"); - - /** - * Simplify a motor designation, if possible. This attempts to reduce the designation - * into a simple letter + number notation for the impulse class and average thrust. - * - * @param str the designation to simplify - * @return the simplified designation, or the string itself if the format was not detected - */ - public static String simplifyDesignation(String str) { - str = str.trim(); - Matcher m = SIMPLIFY_PATTERN.matcher(str); - if (m.matches()) { - return m.group(1); - } else { - return str.replaceAll("\\s", ""); - } - } /** * Comparator for deciding in which order to display matching motors. diff --git a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/ThrustCurveMotorColumns.java b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/ThrustCurveMotorColumns.java index fcefe9ec3..c502bc817 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/ThrustCurveMotorColumns.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/ThrustCurveMotorColumns.java @@ -30,11 +30,11 @@ enum ThrustCurveMotorColumns { return Collator.getInstance(); } }, - //// Designation - DESIGNATION("TCurveMotorCol.DESIGNATION") { + //// Common name + COMMON_NAME("TCurveMotorCol.COMMON_NAME") { @Override public String getValue(ThrustCurveMotorSet m) { - return m.getDesignation(); + return m.getCommonName(); } @Override From 4808ed0b2793fcdfe34610833c30944dba9eefc4 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Fri, 20 Aug 2021 15:05:03 -0600 Subject: [PATCH 3/8] Add designation to MotorInformationPanel Use common name in MotorHolder (used to select specific thrust curve in ThrustCurveMotorSelectionPanel) --- core/resources/l10n/messages.properties | 1 + .../gui/dialogs/motor/thrustcurve/MotorHolder.java | 2 +- .../motor/thrustcurve/MotorInformationPanel.java | 12 ++++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 42429aac9..bf401b330 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1212,6 +1212,7 @@ TCMotorSelPan.lbl.Selectthrustcurve = Select thrust curve: TCMotorSelPan.lbl.Ejectionchargedelay = Ejection charge delay: TCMotorSelPan.equalsIgnoreCase.None = None TCMotorSelPan.lbl.NumberofsecondsorNone = (Number of seconds or \"None\") +TCMotorSelPan.lbl.Designation = Designation: TCMotorSelPan.lbl.Totalimpulse = Total impulse: TCMotorSelPan.lbl.Avgthrust = Avg. thrust: TCMotorSelPan.lbl.Maxthrust = Max. thrust: diff --git a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorHolder.java b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorHolder.java index bb8113331..6c4fb6353 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorHolder.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorHolder.java @@ -22,7 +22,7 @@ class MotorHolder { @Override public String toString() { - return motor.getDesignation(); + return motor.getCommonName(); } @Override diff --git a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java index 72f3d8562..00d8e278c 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java @@ -50,7 +50,8 @@ class MotorInformationPanel extends JPanel { private List selectedMotorSet; // Selected motor private ThrustCurveMotor selectedMotor; - + + private final JLabel designationLabel; private final JLabel totalImpulseLabel; private final JLabel classificationLabel; private final JLabel avgThrustLabel; @@ -76,8 +77,13 @@ class MotorInformationPanel extends JPanel { super(new MigLayout("fill")); // Thrust curve info - //// Total impulse: { + //// Designation + this.add(new JLabel(trans.get("TCMotorSelPan.lbl.Designation"))); + designationLabel = new JLabel(); + this.add(designationLabel, "wrap"); + + //// Total impulse: this.add(new JLabel(trans.get("TCMotorSelPan.lbl.Totalimpulse"))); totalImpulseLabel = new JLabel(); this.add(totalImpulseLabel, "split"); @@ -223,6 +229,7 @@ class MotorInformationPanel extends JPanel { public void clearData() { selectedMotor = null; selectedMotorSet = null; + designationLabel.setText(""); totalImpulseLabel.setText(""); totalImpulseLabel.setToolTipText(null); classificationLabel.setText(""); @@ -254,6 +261,7 @@ class MotorInformationPanel extends JPanel { this.selectedMotor = selectedMotor; // Update thrust curve data + designationLabel.setText(selectedMotor.getDesignation()); double impulse = selectedMotor.getTotalImpulseEstimate(); MotorClass mc = MotorClass.getMotorClass(impulse); totalImpulseLabel.setText(UnitGroup.UNITS_IMPULSE.getDefaultUnit().toStringUnit(impulse)); From d6482a5be5542839c2560928d343f7a354ccc1f9 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Tue, 24 Aug 2021 14:34:55 -0600 Subject: [PATCH 4/8] Use motor common name instead of designation in MotorConfigurationPanel --- core/src/net/sf/openrocket/motor/MotorConfiguration.java | 8 ++++---- .../net/sf/openrocket/motor/MotorConfigurationSet.java | 2 +- .../openrocket/rocketcomponent/FlightConfiguration.java | 2 +- .../main/flightconfigpanel/MotorConfigurationPanel.java | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/src/net/sf/openrocket/motor/MotorConfiguration.java b/core/src/net/sf/openrocket/motor/MotorConfiguration.java index 4920a9421..25b6f8593 100644 --- a/core/src/net/sf/openrocket/motor/MotorConfiguration.java +++ b/core/src/net/sf/openrocket/motor/MotorConfiguration.java @@ -62,11 +62,11 @@ public class MotorConfiguration implements FlightConfigurableParameter throw new NullPointerException("Motor has a null mount... this should never happen: "+curMotorInstance.getID()); } - String str = motor.getDesignation(curMotorInstance.getEjectionDelay()); + String str = motor.getCommonName(curMotorInstance.getEjectionDelay()); int count = mount.getInstanceCount(); if (count > 1) { str = "" + count + Chars.TIMES + " " + str; From 1c768629ea3b3e7be07cca681c29deb3210f05f8 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 15 Sep 2021 10:55:12 -0600 Subject: [PATCH 5/8] Search for motors by designation or common name, for backward compatibility with 15.03 --- .../database/motor/ThrustCurveMotorSetDatabase.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSetDatabase.java b/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSetDatabase.java index d04aea975..60b3256b4 100644 --- a/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSetDatabase.java +++ b/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSetDatabase.java @@ -44,7 +44,9 @@ public class ThrustCurveMotorSetDatabase implements MotorDatabase { matchDescription = false; else if (manufacturer != null && !m.getManufacturer().matches(manufacturer)) matchDescription = false; - else if (designation != null && !designation.equalsIgnoreCase(m.getDesignation())) + else if (designation != null && + !designation.equalsIgnoreCase(m.getDesignation()) && + !designation.equalsIgnoreCase(m.getCommonName())) matchDescription = false; else if (!Double.isNaN(diameter) && (Math.abs(diameter - m.getDiameter()) > 0.005)) matchDescription = false; From a85de1d053c8d00e25cc2827d1a69c8f7c18b7d5 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 15 Sep 2021 11:16:14 -0600 Subject: [PATCH 6/8] updated translation files to use TCurveMotorCol.COMMON_NAME instead of TCurveMotorCol.DESIGNATION. Used other entries in the files to make a reasonable guess as to the "name" instead of the "designation", for entries using Latin alphabet. Left the old entries in, but commented out, for ease in comparison later. --- core/resources/l10n/messages_cs.properties | 3 ++- core/resources/l10n/messages_de.properties | 3 ++- core/resources/l10n/messages_es.properties | 5 +++-- core/resources/l10n/messages_fr.properties | 5 +++-- core/resources/l10n/messages_it.properties | 3 ++- core/resources/l10n/messages_ja.properties | 3 ++- core/resources/l10n/messages_nl.properties | 3 ++- core/resources/l10n/messages_pl.properties | 3 ++- core/resources/l10n/messages_pt.properties | 5 +++-- core/resources/l10n/messages_ru.properties | 3 ++- core/resources/l10n/messages_uk_UA.properties | 3 ++- core/resources/l10n/messages_zh_CN.properties | 5 +++-- 12 files changed, 28 insertions(+), 16 deletions(-) diff --git a/core/resources/l10n/messages_cs.properties b/core/resources/l10n/messages_cs.properties index 535fe403d..18008a49e 100644 --- a/core/resources/l10n/messages_cs.properties +++ b/core/resources/l10n/messages_cs.properties @@ -1214,7 +1214,8 @@ FlightEvent.Type.ALTITUDE = Zmena v ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Výrobce -TCurveMotorCol.DESIGNATION = Pojmenování +TCurveMotorCol.COMMON_NAME = Jméno +! TCurveMotorCol.DESIGNATION = Pojmenování TCurveMotorCol.TYPE = Druh TCurveMotorCol.DIAMETER = Prumer TCurveMotorCol.LENGTH = Délka diff --git a/core/resources/l10n/messages_de.properties b/core/resources/l10n/messages_de.properties index 93456531b..294e68f54 100644 --- a/core/resources/l10n/messages_de.properties +++ b/core/resources/l10n/messages_de.properties @@ -1273,7 +1273,8 @@ FlightEvent.Type.ALTITUDE = H ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Hersteller -TCurveMotorCol.DESIGNATION = Bezeichnung +TCurveMotorCol.COMMON_NAME = Name +! TCurveMotorCol.DESIGNATION = Bezeichnung TCurveMotorCol.TYPE = Typ TCurveMotorCol.DIAMETER = Durchmesser TCurveMotorCol.LENGTH = Länge diff --git a/core/resources/l10n/messages_es.properties b/core/resources/l10n/messages_es.properties index 15416c61d..d93d8cee3 100644 --- a/core/resources/l10n/messages_es.properties +++ b/core/resources/l10n/messages_es.properties @@ -1156,10 +1156,11 @@ TCurveMotor.ttip.length = Longitud: TCurveMotor.ttip.maxThrust = Empuje m\u00e1ximo: TCurveMotor.ttip.totalImpulse = Impulso total: -TCurveMotorCol.DESIGNATION = Designaci\u00f3n +! ThrustCurveMotorColumns +TCurveMotorCol.COMMON_NAME = Nombre +! TCurveMotorCol.DESIGNATION = Designaci\u00f3n TCurveMotorCol.DIAMETER = Di\u00e1metro TCurveMotorCol.LENGTH = Longitud -! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Fabricante TCurveMotorCol.TOTAL_IMPULSE = Impulso total TCurveMotorCol.TYPE = Tipo diff --git a/core/resources/l10n/messages_fr.properties b/core/resources/l10n/messages_fr.properties index 181838f72..121e351f0 100644 --- a/core/resources/l10n/messages_fr.properties +++ b/core/resources/l10n/messages_fr.properties @@ -1150,10 +1150,11 @@ TCurveMotor.ttip.length = Longueur: TCurveMotor.ttip.maxThrust = Pouss\u00E9e Maximum: TCurveMotor.ttip.totalImpulse = Impulsion Totale: -TCurveMotorCol.DESIGNATION = D\u00E9signation +! ThrustCurveMotorColumns +TCurveMotorCol.COMMON_NAME = Nom +! TCurveMotorCol.DESIGNATION = D\u00E9signation TCurveMotorCol.DIAMETER = Diam\u00E8tre TCurveMotorCol.LENGTH = Longueur -! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Fabricant TCurveMotorCol.TOTAL_IMPULSE = Impultion total TCurveMotorCol.TYPE = Type diff --git a/core/resources/l10n/messages_it.properties b/core/resources/l10n/messages_it.properties index 99c664f0d..b2fa52894 100644 --- a/core/resources/l10n/messages_it.properties +++ b/core/resources/l10n/messages_it.properties @@ -1277,7 +1277,8 @@ FlightEvent.Type.ALTITUDE = Cambio altitudine ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Produttore -TCurveMotorCol.DESIGNATION = Classe +TCurveMotorCol.COMMON_NAME = Nome +! TCurveMotorCol.DESIGNATION = Classe TCurveMotorCol.TYPE = Tipo TCurveMotorCol.DIAMETER = Diametro TCurveMotorCol.LENGTH = Lunghezza diff --git a/core/resources/l10n/messages_ja.properties b/core/resources/l10n/messages_ja.properties index 09c788dc7..0930c1353 100644 --- a/core/resources/l10n/messages_ja.properties +++ b/core/resources/l10n/messages_ja.properties @@ -1326,7 +1326,8 @@ FlightEvent.Type.ALTITUDE = \u59FF\u52E2\u5909\u66F4 ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = \u30E1\u30FC\u30AB\u30FC -TCurveMotorCol.DESIGNATION = \u8A18\u53F7 +! TCurveMotorCol.DESIGNATION = \u8A18\u53F7 +TCurveMotorCol.COMMON_NAME = \u8A18\u53F7 TCurveMotorCol.TYPE = \u30BF\u30A4\u30D7 TCurveMotorCol.DIAMETER = \u76F4\u5F84 TCurveMotorCol.LENGTH = \u9577\u3055 diff --git a/core/resources/l10n/messages_nl.properties b/core/resources/l10n/messages_nl.properties index 8d1555bb0..f625e40ae 100644 --- a/core/resources/l10n/messages_nl.properties +++ b/core/resources/l10n/messages_nl.properties @@ -1576,7 +1576,8 @@ FlightEvent.Type.EXCEPTION = Uitzondering ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Fabrikant -TCurveMotorCol.DESIGNATION = Benaming +TCurveMotorCol.COMMON_NAME = Naam +! TCurveMotorCol.DESIGNATION = Benaming TCurveMotorCol.CASEINFO = Behuizing TCurveMotorCol.DIAMETER = Diameter TCurveMotorCol.LENGTH = Lengte diff --git a/core/resources/l10n/messages_pl.properties b/core/resources/l10n/messages_pl.properties index ac5384fa1..8592111e0 100644 --- a/core/resources/l10n/messages_pl.properties +++ b/core/resources/l10n/messages_pl.properties @@ -1218,7 +1218,8 @@ ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Producent - TCurveMotorCol.DESIGNATION = Oznaczenie + TCurveMotorCol.COMMON_NAME = Nazwa + ! TCurveMotorCol.DESIGNATION = Oznaczenie TCurveMotorCol.TYPE = Typ TCurveMotorCol.DIAMETER = \u015Arednica TCurveMotorCol.LENGTH = D\u0142ugo\u015B\u0107 diff --git a/core/resources/l10n/messages_pt.properties b/core/resources/l10n/messages_pt.properties index fc1d3e0d4..964286d71 100644 --- a/core/resources/l10n/messages_pt.properties +++ b/core/resources/l10n/messages_pt.properties @@ -1115,10 +1115,11 @@ TCurveMotor.ttip.length = Comprimento: TCurveMotor.ttip.maxThrust = M\u00e1ximo de impulso: TCurveMotor.ttip.totalImpulse = Impulso total: -TCurveMotorCol.DESIGNATION = Designa\u00e7\u00e3o +# ThrustCurveMotorColumns +TCurveMotorCol.COMMON_NAME = Nome +! TCurveMotorCol.DESIGNATION = Designa\u00e7\u00e3o TCurveMotorCol.DIAMETER = Di\u00e2metro TCurveMotorCol.LENGTH = Comprimento -# ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Fabricante TCurveMotorCol.TYPE = Tipo diff --git a/core/resources/l10n/messages_ru.properties b/core/resources/l10n/messages_ru.properties index a60b361d5..ab14c0cf9 100644 --- a/core/resources/l10n/messages_ru.properties +++ b/core/resources/l10n/messages_ru.properties @@ -1417,7 +1417,8 @@ FlightEvent.Type.EXCEPTION = \u041e\u0448\u0438\u0431\u043a\u0430 ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c -TCurveMotorCol.DESIGNATION = \u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 +TCurveMotorCol.COMMON_NAME = \u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 +! TCurveMotorCol.DESIGNATION = \u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 TCurveMotorCol.TYPE = \u0422\u0438\u043f TCurveMotorCol.DIAMETER = \u0414\u0438\u0430\u043c\u0435\u0442\u0440 TCurveMotorCol.LENGTH = \u0414\u043b\u0438\u043d\u0430 diff --git a/core/resources/l10n/messages_uk_UA.properties b/core/resources/l10n/messages_uk_UA.properties index ed4b301c9..17fb808df 100644 --- a/core/resources/l10n/messages_uk_UA.properties +++ b/core/resources/l10n/messages_uk_UA.properties @@ -1423,7 +1423,8 @@ FlightEvent.Type.EXCEPTION = Exception ! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = Manufacturer -TCurveMotorCol.DESIGNATION = Designation +TCurveMotorCol.COMMON_NAME = Name +! TCurveMotorCol.DESIGNATION = Designation TCurveMotorCol.TYPE = Type TCurveMotorCol.DIAMETER = Diameter TCurveMotorCol.LENGTH = Length diff --git a/core/resources/l10n/messages_zh_CN.properties b/core/resources/l10n/messages_zh_CN.properties index 26b7181a4..0097515bf 100644 --- a/core/resources/l10n/messages_zh_CN.properties +++ b/core/resources/l10n/messages_zh_CN.properties @@ -1219,10 +1219,11 @@ TCurveMotor.ttip.length = \u957F\u5EA6: TCurveMotor.ttip.maxThrust = \u6700\u5927\u63A8\u529B: TCurveMotor.ttip.totalImpulse = \u603B\u51B2\u529B: -TCurveMotorCol.DESIGNATION = \u540D\u79F0 +! ThrustCurveMotorColumns +TCurveMotorCol.COMMON_NAME = \u540D\u79F0 +! TCurveMotorCol.DESIGNATION = \u540D\u79F0 TCurveMotorCol.DIAMETER = \u76F4\u5F84 TCurveMotorCol.LENGTH = \u957F\u5EA6 -! ThrustCurveMotorColumns TCurveMotorCol.MANUFACTURER = \u5236\u9020\u5546 TCurveMotorCol.TOTAL_IMPULSE = \u603B\u51B2 TCurveMotorCol.TYPE = \u7C7B\u578B From a17f6d9b1a85a0b4e0d8e0d803dd4aabc9b42416 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 15 Sep 2021 11:37:13 -0600 Subject: [PATCH 7/8] updated translation files by copying old TCurveMotorCol.DESIGNATION entries to TCMotorSelPan.lbl.Designation --- core/resources/l10n/messages_cs.properties | 1 + core/resources/l10n/messages_de.properties | 1 + core/resources/l10n/messages_es.properties | 3 ++- core/resources/l10n/messages_fr.properties | 3 ++- core/resources/l10n/messages_it.properties | 1 + core/resources/l10n/messages_ja.properties | 1 + core/resources/l10n/messages_nl.properties | 1 + core/resources/l10n/messages_pl.properties | 1 + core/resources/l10n/messages_pt.properties | 3 ++- core/resources/l10n/messages_ru.properties | 1 + core/resources/l10n/messages_uk_UA.properties | 1 + core/resources/l10n/messages_zh_CN.properties | 3 ++- 12 files changed, 16 insertions(+), 4 deletions(-) diff --git a/core/resources/l10n/messages_cs.properties b/core/resources/l10n/messages_cs.properties index 18008a49e..0a6e4a92f 100644 --- a/core/resources/l10n/messages_cs.properties +++ b/core/resources/l10n/messages_cs.properties @@ -945,6 +945,7 @@ TCMotorSelPan.lbl.Selectthrustcurve = Vyber v TCMotorSelPan.lbl.Ejectionchargedelay = Oddelovací zpo\u017Edení: TCMotorSelPan.equalsIgnoreCase.None = Nic TCMotorSelPan.lbl.NumberofsecondsorNone = (Pocet sekund nebo \"Nic\") +TCMotorSelPan.lbl.Designation = Pojmenování: TCMotorSelPan.lbl.Totalimpulse = Celkový impulse: TCMotorSelPan.lbl.Avgthrust = Prumerný tah: TCMotorSelPan.lbl.Maxthrust = Maximální tah: diff --git a/core/resources/l10n/messages_de.properties b/core/resources/l10n/messages_de.properties index 294e68f54..99ed90713 100644 --- a/core/resources/l10n/messages_de.properties +++ b/core/resources/l10n/messages_de.properties @@ -1002,6 +1002,7 @@ TCMotorSelPan.lbl.Selectthrustcurve = Schubkurve ausw TCMotorSelPan.lbl.Ejectionchargedelay = Verzögerung der Ausstoßladung: TCMotorSelPan.equalsIgnoreCase.None = keine TCMotorSelPan.lbl.NumberofsecondsorNone = (Anzahl der Sekunden oder \«keine\«) +TCMotorSelPan.lbl.Designation = Bezeichnung: TCMotorSelPan.lbl.Totalimpulse = Gesamtimpuls: TCMotorSelPan.lbl.Avgthrust = Durchschn. Schub: TCMotorSelPan.lbl.Maxthrust = max. Schub diff --git a/core/resources/l10n/messages_es.properties b/core/resources/l10n/messages_es.properties index d93d8cee3..f94445be3 100644 --- a/core/resources/l10n/messages_es.properties +++ b/core/resources/l10n/messages_es.properties @@ -1110,6 +1110,7 @@ StreamerCfg.tab.Radialpos = Posici\u00f3n radial StreamerCfg.tab.ttip.General = Propiedades generales StreamerCfg.tab.ttip.Radialpos = Configuraci\u00f3n de posici\u00f3n radial +! ThrustCurveMotorSelectionPanel TCMotorSelPan.Diameter = Di\u00e1metro TCMotorSelPan.Length = Longitud TCMotorSelPan.MotorMountDimensions = Dimensiones del porta motor: @@ -1140,8 +1141,8 @@ TCMotorSelPan.lbl.Motormountdia = Di\u00e1metro del porta motor: TCMotorSelPan.lbl.NumberofsecondsorNone = (segundos) TCMotorSelPan.lbl.Search = Buscar: TCMotorSelPan.lbl.Selectthrustcurve = Seleccione curva de empuje: -! ThrustCurveMotorSelectionPanel TCMotorSelPan.lbl.Selrocketmotor = Seleccione el motor del cohete: +TCMotorSelPan.lbl.Designation = Designaci\u00f3n TCMotorSelPan.lbl.Totalimpulse = Impulso total: TCMotorSelPan.noDescription = No hay una descripci\u00f3n disponible TCMotorSelPan.title.Thrust = Empuje diff --git a/core/resources/l10n/messages_fr.properties b/core/resources/l10n/messages_fr.properties index 121e351f0..1e3e53bab 100644 --- a/core/resources/l10n/messages_fr.properties +++ b/core/resources/l10n/messages_fr.properties @@ -1104,6 +1104,7 @@ StreamerCfg.tab.Radialpos = Position sur le p\u00E9rim\u00E8tre StreamerCfg.tab.ttip.General = Propri\u00E9t\u00E9s g\u00E9n\u00E9rales StreamerCfg.tab.ttip.Radialpos = Configuration de la position sur le p\u00E9rim\u00E8tre +! ThrustCurveMotorSelectionPanel TCMotorSelPan.Diameter = Diametre TCMotorSelPan.Length = Longueur TCMotorSelPan.MotorMountDimensions = Dimentions du porte moteur: @@ -1134,8 +1135,8 @@ TCMotorSelPan.lbl.Motormountdia = Diam\u00E8tre du tube porte moteur: TCMotorSelPan.lbl.NumberofsecondsorNone = (Nombre de secondes ou "Aucun") TCMotorSelPan.lbl.Search = Rechercher: TCMotorSelPan.lbl.Selectthrustcurve = Choisir la courbe de pouss\u00E9e: -! ThrustCurveMotorSelectionPanel TCMotorSelPan.lbl.Selrocketmotor = Choisir le moteur fus\u00E9e: +TCMotorSelPan.lbl.Designation = D\u00E9signation TCMotorSelPan.lbl.Totalimpulse = Impulsion totale: TCMotorSelPan.noDescription = Aucune description disponible TCMotorSelPan.title.Thrust = Pouss\u00E9e diff --git a/core/resources/l10n/messages_it.properties b/core/resources/l10n/messages_it.properties index b2fa52894..0fbdb2a41 100644 --- a/core/resources/l10n/messages_it.properties +++ b/core/resources/l10n/messages_it.properties @@ -1004,6 +1004,7 @@ TCMotorSelPan.lbl.Selectthrustcurve = Seleziona la curva di spinta: TCMotorSelPan.lbl.Ejectionchargedelay = Ritardo della carica di espulsione: TCMotorSelPan.equalsIgnoreCase.None = Nessun TCMotorSelPan.lbl.NumberofsecondsorNone = (Numero di secondi o \"Nessuno\") +TCMotorSelPan.lbl.Designation = Classe: TCMotorSelPan.lbl.Totalimpulse = Impulso totale: TCMotorSelPan.lbl.Avgthrust = Spinta media: TCMotorSelPan.lbl.Maxthrust = Spinta max.: diff --git a/core/resources/l10n/messages_ja.properties b/core/resources/l10n/messages_ja.properties index 0930c1353..a0547ddee 100644 --- a/core/resources/l10n/messages_ja.properties +++ b/core/resources/l10n/messages_ja.properties @@ -1035,6 +1035,7 @@ TCMotorSelPan.lbl.Selectthrustcurve = \u63A8\u529B\u5C65\u6B74\uFF1A TCMotorSelPan.lbl.Ejectionchargedelay = Ejection charge delay: TCMotorSelPan.equalsIgnoreCase.None = None TCMotorSelPan.lbl.NumberofsecondsorNone = (Number of seconds or \"None\") +TCMotorSelPan.lbl.Designation = \u8A18\u53F7 TCMotorSelPan.lbl.Totalimpulse = \u30C8\u30FC\u30BF\u30EB\u30A4\u30F3\u30D1\u30EB\u30B9\uFF1A TCMotorSelPan.lbl.Avgthrust = \u5E73\u5747\u63A8\u529B\uFF1A TCMotorSelPan.lbl.Maxthrust = \u6700\u5927\u63A8\u529B\uFF1A diff --git a/core/resources/l10n/messages_nl.properties b/core/resources/l10n/messages_nl.properties index f625e40ae..7d15d1a0d 100644 --- a/core/resources/l10n/messages_nl.properties +++ b/core/resources/l10n/messages_nl.properties @@ -1201,6 +1201,7 @@ TCMotorSelPan.lbl.Selectthrustcurve = Selecteer stuwkrachtcurve: TCMotorSelPan.lbl.Ejectionchargedelay = Vertraging schietlading: TCMotorSelPan.equalsIgnoreCase.None = Geen TCMotorSelPan.lbl.NumberofsecondsorNone = (Aantal seconden of \"Geen\") +TCMotorSelPan.lbl.Designation = Benaming TCMotorSelPan.lbl.Totalimpulse = Totale impuls: TCMotorSelPan.lbl.Avgthrust = Gemiddelde stuwkracht: TCMotorSelPan.lbl.Maxthrust = Max. stuwkracht: diff --git a/core/resources/l10n/messages_pl.properties b/core/resources/l10n/messages_pl.properties index 8592111e0..1db5a6159 100644 --- a/core/resources/l10n/messages_pl.properties +++ b/core/resources/l10n/messages_pl.properties @@ -947,6 +947,7 @@ TCMotorSelPan.lbl.Ejectionchargedelay = Opó\u017Anienie odpalenia \u0142adunku odrzucaj\u0105cego: TCMotorSelPan.equalsIgnoreCase.None = \u017Badne TCMotorSelPan.lbl.NumberofsecondsorNone = (liczba sekund lub \"Brak\") + TCMotorSelPan.lbl.Designation = Oznaczenie: TCMotorSelPan.lbl.Totalimpulse = Ca\u0142kowity impuls: TCMotorSelPan.lbl.Avgthrust = \u015Arednia si\u0142a ci\u0105gu: TCMotorSelPan.lbl.Maxthrust = Maks. si\u0142a ci\u0105gu: diff --git a/core/resources/l10n/messages_pt.properties b/core/resources/l10n/messages_pt.properties index 964286d71..eabcf32e6 100644 --- a/core/resources/l10n/messages_pt.properties +++ b/core/resources/l10n/messages_pt.properties @@ -1081,6 +1081,7 @@ StreamerCfg.tab.Radialpos = Posi\u00e7\u00e3o radial StreamerCfg.tab.ttip.General = Propriedades gerais StreamerCfg.tab.ttip.Radialpos = Configura\u00e7\u00e3o posi\u00e7\u00e3o radial +# ThrustCurveMotorSelectionPanel TCMotorSelPan.SHOW_DESCRIPTIONS.desc1 = Mostrar todos os motores TCMotorSelPan.SHOW_DESCRIPTIONS.desc2 = Mostrar motores com um di\u00e2metro menor do que a montagem do motor TCMotorSelPan.SHOW_DESCRIPTIONS.desc3 = Mostrar motores com um di\u00e2metro igual ao da montagem do motor @@ -1099,8 +1100,8 @@ TCMotorSelPan.lbl.Motormountdia = Di\u00e2metro da montagem do motor: TCMotorSelPan.lbl.NumberofsecondsorNone = (N\u00famero de segundos ou "Nenhum") TCMotorSelPan.lbl.Search = Pesquisar: TCMotorSelPan.lbl.Selectthrustcurve = Selecione curva de empuxo: -# ThrustCurveMotorSelectionPanel TCMotorSelPan.lbl.Selrocketmotor = Selecione motor do foguete: +TCMotorSelPan.lbl.Designation = Designa\u00e7\u00e3o TCMotorSelPan.lbl.Totalimpulse = Impulso total: TCMotorSelPan.noDescription = Nenhuma descri\u00e7\u00e3o dispon\u00edvel. TCMotorSelPan.title.Thrust = Impulso diff --git a/core/resources/l10n/messages_ru.properties b/core/resources/l10n/messages_ru.properties index ab14c0cf9..d02836be8 100644 --- a/core/resources/l10n/messages_ru.properties +++ b/core/resources/l10n/messages_ru.properties @@ -1103,6 +1103,7 @@ TCMotorSelPan.lbl.Selectthrustcurve = \u0412\u044b\u0431\u043e\u0440 \u043f\u044 TCMotorSelPan.lbl.Ejectionchargedelay = \u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u044b\u0431\u0440\u043e\u0441\u0430 \u0437\u0430\u0440\u044f\u0434\u0430: TCMotorSelPan.equalsIgnoreCase.None = \u041d\u0435\u0442 TCMotorSelPan.lbl.NumberofsecondsorNone = (\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u0438\u043b\u0438 "\u041d\u0435\u0442") +TCMotorSelPan.lbl.Designation = \u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435: TCMotorSelPan.lbl.Totalimpulse = \u041e\u0431\u0449\u0438\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441: TCMotorSelPan.lbl.Avgthrust = \u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0442\u044f\u0433\u0430: TCMotorSelPan.lbl.Maxthrust = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u044f\u0433\u0430: diff --git a/core/resources/l10n/messages_uk_UA.properties b/core/resources/l10n/messages_uk_UA.properties index 17fb808df..50a7521f1 100644 --- a/core/resources/l10n/messages_uk_UA.properties +++ b/core/resources/l10n/messages_uk_UA.properties @@ -1108,6 +1108,7 @@ TCMotorSelPan.lbl.Selectthrustcurve = Select thrust curve: TCMotorSelPan.lbl.Ejectionchargedelay = Ejection charge delay: TCMotorSelPan.equalsIgnoreCase.None = None TCMotorSelPan.lbl.NumberofsecondsorNone = (Number of seconds or \"None\") +TCMotorSelPan.lbl.Designation = Designation: TCMotorSelPan.lbl.Totalimpulse = Total impulse: TCMotorSelPan.lbl.Avgthrust = Avg. thrust: TCMotorSelPan.lbl.Maxthrust = Max. thrust: diff --git a/core/resources/l10n/messages_zh_CN.properties b/core/resources/l10n/messages_zh_CN.properties index 0097515bf..8aec07808 100644 --- a/core/resources/l10n/messages_zh_CN.properties +++ b/core/resources/l10n/messages_zh_CN.properties @@ -1177,6 +1177,7 @@ StreamerCfg.tab.Radialpos = \u5F84\u5411\u4F4D\u7F6E StreamerCfg.tab.ttip.General = \u5E38\u89C4\u5C5E\u6027 StreamerCfg.tab.ttip.Radialpos = \u5F84\u5411\u4F4D\u7F6E\u8BBE\u7F6E +! ThrustCurveMotorSelectionPanel TCMotorSelPan.Diameter = \u76F4\u5F84 TCMotorSelPan.Length = \u957F\u5EA6 TCMotorSelPan.MotorMountDimensions = \u53D1\u52A8\u673A\u5EA7\u5C3A\u5BF8: @@ -1203,8 +1204,8 @@ TCMotorSelPan.lbl.Maxthrust = \u6700\u5927\u63A8\u529B: TCMotorSelPan.lbl.NumberofsecondsorNone = (\u79D2\u6570\u6216"\u65E0") TCMotorSelPan.lbl.Search = \u641C\u7D22: TCMotorSelPan.lbl.Selectthrustcurve = \u9009\u62E9\u63A8\u529B\u66F2\u7EBF: -! ThrustCurveMotorSelectionPanel TCMotorSelPan.lbl.Selrocketmotor = \u9009\u62E9\u706B\u7BAD\u53D1\u52A8\u673A: +TCMotorSelPan.lbl.Designation = \u540D\u79F0: TCMotorSelPan.lbl.Totalimpulse = \u603B\u51B2\u91CF: TCMotorSelPan.noDescription = \u63CF\u8FF0\u4E0D\u53EF\u7528. TCMotorSelPan.title.Thrust = \u63A8\u529B From 3d0396bc0025e5e64f340fcb318f01a029361a7d Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Sat, 25 Sep 2021 14:20:06 -0600 Subject: [PATCH 8/8] update unit tests to match new motor code (also fixed a couple bugs the unittests turned up!) --- .../database/motor/ThrustCurveMotorSet.java | 5 ++- .../motor/DesignationComparator.java | 2 +- .../sf/openrocket/motor/ThrustCurveMotor.java | 4 +- .../database/ThrustCurveMotorSetTest.java | 38 ++++++++----------- .../motor/ThrustCurveMotorTest.java | 12 ++++++ 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java b/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java index 38479dee5..782c82e32 100644 --- a/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java +++ b/core/src/net/sf/openrocket/database/motor/ThrustCurveMotorSet.java @@ -221,7 +221,7 @@ public class ThrustCurveMotorSet implements Comparable { return false; } - if (!designation.equalsIgnoreCase(m.getDesignation())) + if (!commonName.equalsIgnoreCase(m.getCommonName())) return false; if (caseInfo != null && !caseInfo.equalsIgnoreCase(m.getCaseInfo())) @@ -348,11 +348,12 @@ public class ThrustCurveMotorSet implements Comparable { @Override public int compare(ThrustCurveMotor o1, ThrustCurveMotor o2) { + // 1. Designation if (!o1.getDesignation().equals(o2.getDesignation())) { return o1.getDesignation().compareTo(o2.getDesignation()); } - + // 2. Number of data points (more is better) if (o1.getSampleSize() != o2.getSampleSize()) { return o2.getSampleSize() - o1.getSampleSize(); diff --git a/core/src/net/sf/openrocket/motor/DesignationComparator.java b/core/src/net/sf/openrocket/motor/DesignationComparator.java index 2c0e8f1f4..651a2ca02 100644 --- a/core/src/net/sf/openrocket/motor/DesignationComparator.java +++ b/core/src/net/sf/openrocket/motor/DesignationComparator.java @@ -90,4 +90,4 @@ public class DesignationComparator implements Comparator { return COLLATOR.compare(o1, o2); } } -} \ No newline at end of file +} diff --git a/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java b/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java index d5256d186..69396cf40 100644 --- a/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java +++ b/core/src/net/sf/openrocket/motor/ThrustCurveMotor.java @@ -158,7 +158,7 @@ public class ThrustCurveMotor implements Motor, Comparable, Se * @return the simplified designation, or the string itself if the format was not detected */ private static final Pattern SIMPLIFY_PATTERN = Pattern.compile("^[0-9]*[ -]*([A-Z][0-9]+).*"); - static String simplifyDesignation(String str) { + public static String simplifyDesignation(String str) { str = str.trim(); Matcher m = SIMPLIFY_PATTERN.matcher(str); if (m.matches()) { @@ -244,7 +244,7 @@ public class ThrustCurveMotor implements Motor, Comparable, Se // If I don't have a motor common name (will be the case if I read the thrustcurve from a flle) // apply the motor code simplification heuristics to generate a common name if (motor.commonName.equals("")) { - motor.commonName = motor.designation; + motor.commonName = simplifyDesignation(motor.designation); } diff --git a/core/test/net/sf/openrocket/database/ThrustCurveMotorSetTest.java b/core/test/net/sf/openrocket/database/ThrustCurveMotorSetTest.java index bd17f6b70..572b9a823 100644 --- a/core/test/net/sf/openrocket/database/ThrustCurveMotorSetTest.java +++ b/core/test/net/sf/openrocket/database/ThrustCurveMotorSetTest.java @@ -22,6 +22,7 @@ public class ThrustCurveMotorSetTest { private static final ThrustCurveMotor motor1 = new ThrustCurveMotor.Builder() .setManufacturer(Manufacturer.getManufacturer("A")) + .setCommonName("F12") .setDesignation("F12X") .setDescription("Desc") .setMotorType(Motor.Type.UNKNOWN) @@ -36,6 +37,7 @@ public class ThrustCurveMotorSetTest { private static final ThrustCurveMotor motor2 = new ThrustCurveMotor.Builder() .setManufacturer(Manufacturer.getManufacturer("A")) + .setCommonName("F12") .setDesignation("F12H") .setDescription("Desc") .setMotorType(Motor.Type.SINGLE) @@ -50,7 +52,7 @@ public class ThrustCurveMotorSetTest { private static final ThrustCurveMotor motor3 = new ThrustCurveMotor.Builder() .setManufacturer(Manufacturer.getManufacturer("A")) - .setDesignation("F12") + .setCode("F12") .setDescription("Desc") .setMotorType(Motor.Type.UNKNOWN) .setStandardDelays(new double[] { 0, Motor.PLUGGED_DELAY }) @@ -65,7 +67,7 @@ public class ThrustCurveMotorSetTest { private static final ThrustCurveMotor motor4 = new ThrustCurveMotor.Builder() .setManufacturer(Manufacturer.getManufacturer("A")) .setDesignation("F12") - .setDesignation("Desc") + .setDescription("Desc") .setMotorType(Motor.Type.HYBRID) .setStandardDelays(new double[] { 0 }) .setDiameter(0.024) @@ -75,20 +77,7 @@ public class ThrustCurveMotorSetTest { .setCGPoints(new Coordinate[] { Coordinate.NUL, Coordinate.NUL, Coordinate.NUL }) .setDigest("digestD") .build(); - - - @Test - public void testSimplifyDesignation() { - assertEquals("J115", ThrustCurveMotorSet.simplifyDesignation("J115")); - assertEquals("J115", ThrustCurveMotorSet.simplifyDesignation(" J115 ")); - assertEquals("H115", ThrustCurveMotorSet.simplifyDesignation("241H115-KS")); - assertEquals("J115", ThrustCurveMotorSet.simplifyDesignation("384 J115")); - assertEquals("J115", ThrustCurveMotorSet.simplifyDesignation("384-J115")); - assertEquals("A2", ThrustCurveMotorSet.simplifyDesignation("A2T")); - assertEquals("1/2A2T", ThrustCurveMotorSet.simplifyDesignation("1/2A2T")); - assertEquals("MicroMaxxII", ThrustCurveMotorSet.simplifyDesignation("Micro Maxx II")); - } - + @Test public void testAdding() { ThrustCurveMotorSet set = new ThrustCurveMotorSet(); @@ -108,7 +97,7 @@ public class ThrustCurveMotorSetTest { assertEquals(1, set.getMotors().size()); assertEquals(motor1, set.getMotors().get(0)); assertEquals(Collections.emptyList(), set.getDelays()); - + // Add motor1 again assertTrue(set.matches(motor1)); set.addMotor(motor1); @@ -120,12 +109,12 @@ public class ThrustCurveMotorSetTest { assertEquals(1, set.getMotors().size()); assertEquals(motor1, set.getMotors().get(0)); assertEquals(Collections.emptyList(), set.getDelays()); - + // Add motor2 assertTrue(set.matches(motor2)); set.addMotor(motor2); assertEquals(motor1.getManufacturer(), set.getManufacturer()); - assertEquals(motor3.getDesignation(), set.getDesignation()); + assertEquals(motor3.getCommonName(), set.getCommonName()); assertEquals(Motor.Type.SINGLE, set.getType()); assertEquals(motor1.getDiameter(), set.getDiameter(), 0.00001); assertEquals(motor1.getLength(), set.getLength(), 0.00001); @@ -133,21 +122,26 @@ public class ThrustCurveMotorSetTest { assertEquals(motor2, set.getMotors().get(0)); assertEquals(motor1, set.getMotors().get(1)); assertEquals(Arrays.asList(5.0), set.getDelays()); - + // Add motor3 assertTrue(set.matches(motor3)); set.addMotor(motor3); assertEquals(motor1.getManufacturer(), set.getManufacturer()); - assertEquals(motor3.getDesignation(), set.getDesignation()); + assertEquals(motor3.getCommonName(), set.getCommonName()); assertEquals(Motor.Type.SINGLE, set.getType()); assertEquals(motor1.getDiameter(), set.getDiameter(), 0.00001); assertEquals(motor1.getLength(), set.getLength(), 0.00001); assertEquals(3, set.getMotors().size()); + System.out.println("motor set"); + System.out.println(set.getMotors()); + System.out.println(motor3); + System.out.println(motor2); + System.out.println(motor1); assertEquals(motor3, set.getMotors().get(0)); assertEquals(motor2, set.getMotors().get(1)); assertEquals(motor1, set.getMotors().get(2)); assertEquals(Arrays.asList(0.0, 5.0, Motor.PLUGGED_DELAY), set.getDelays()); - + // Test that adding motor4 fails assertFalse(set.matches(motor4)); try { diff --git a/core/test/net/sf/openrocket/motor/ThrustCurveMotorTest.java b/core/test/net/sf/openrocket/motor/ThrustCurveMotorTest.java index f2c93cfb4..6ceac6eab 100644 --- a/core/test/net/sf/openrocket/motor/ThrustCurveMotorTest.java +++ b/core/test/net/sf/openrocket/motor/ThrustCurveMotorTest.java @@ -186,4 +186,16 @@ public class ThrustCurveMotorTest { } + @Test + public void testSimplifyDesignation() { + assertEquals("J115", ThrustCurveMotor.Builder.simplifyDesignation("J115")); + assertEquals("J115", ThrustCurveMotor.Builder.simplifyDesignation(" J115 ")); + assertEquals("H115", ThrustCurveMotor.Builder.simplifyDesignation("241H115-KS")); + assertEquals("J115", ThrustCurveMotor.Builder.simplifyDesignation("384 J115")); + assertEquals("J115", ThrustCurveMotor.Builder.simplifyDesignation("384-J115")); + assertEquals("A2", ThrustCurveMotor.Builder.simplifyDesignation("A2T")); + assertEquals("1/2A2T", ThrustCurveMotor.Builder.simplifyDesignation("1/2A2T")); + assertEquals("MicroMaxxII", ThrustCurveMotor.Builder.simplifyDesignation("Micro Maxx II")); + } + }