X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Ffile%2Fopenrocket%2FOpenRocketSaver.java;fp=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Ffile%2Fopenrocket%2FOpenRocketSaver.java;h=0a5e04790caa407459640e5ef3d95ddd0abf59a7;hb=9349577cdfdff682b2aabd6daa24fdc3a7449b58;hp=5b863158ad54cdda9e8f79777c49c9b58a72e4b1;hpb=30ba0a882f0c061176ba14dbf86d3d6fad096c02;p=debian%2Fopenrocket diff --git a/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java b/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java index 5b863158..0a5e0479 100644 --- a/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java +++ b/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java @@ -8,6 +8,7 @@ import java.io.Writer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.zip.GZIPOutputStream; import net.sf.openrocket.aerodynamics.Warning; @@ -18,6 +19,8 @@ import net.sf.openrocket.file.RocketSaver; import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.rocketcomponent.FinSet; import net.sf.openrocket.rocketcomponent.MotorMount; +import net.sf.openrocket.rocketcomponent.RecoveryDevice; +import net.sf.openrocket.rocketcomponent.RecoveryDevice.DeployEvent; import net.sf.openrocket.rocketcomponent.Rocket; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.TubeCoupler; @@ -26,6 +29,7 @@ import net.sf.openrocket.simulation.FlightDataBranch; import net.sf.openrocket.simulation.FlightDataType; import net.sf.openrocket.simulation.FlightEvent; import net.sf.openrocket.simulation.SimulationOptions; +import net.sf.openrocket.simulation.customexpression.CustomExpression; import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.BuildProperties; @@ -97,6 +101,9 @@ public class OpenRocketSaver extends RocketSaver { writeln(""); + // Save custom expressions; + saveCustomDatatypes(document); + // Save all simulations writeln(""); indent++; @@ -120,7 +127,41 @@ public class OpenRocketSaver extends RocketSaver { } } + /* + * Save all the custom expressions + */ + private void saveCustomDatatypes(OpenRocketDocument doc) throws IOException { + + if (doc.getCustomExpressions().isEmpty()) + return; + + writeln(""); + indent++; + + for (CustomExpression exp : doc.getCustomExpressions()) { + saveCustomExpressionDatatype(exp); + } + + indent--; + writeln(""); + writeln(""); + } + /* + * Save one custom expression datatype + */ + private void saveCustomExpressionDatatype(CustomExpression exp) throws IOException { + // Write out custom expression + + writeln(""); + indent++; + writeln("" + exp.getName() + ""); + writeln("" + exp.getSymbol() + ""); + writeln("" + exp.getUnit() + ""); // auto unit type means it will be determined from string + writeln("" + exp.getExpressionString() + ""); + indent--; + writeln(""); + } @Override public long estimateFileSize(OpenRocketDocument doc, StorageOptions options) { @@ -183,6 +224,11 @@ public class OpenRocketSaver extends RocketSaver { */ private int calculateNecessaryFileVersion(OpenRocketDocument document, StorageOptions opts) { /* + * File version 1.5 is requires for: + * - saving designs using ComponentPrests + * - recovery device deployment on lower stage separation + * - custom expressions + * * File version 1.4 is required for: * - saving simulation data * - saving motor data @@ -194,15 +240,34 @@ public class OpenRocketSaver extends RocketSaver { * Otherwise use version 1.0. */ + // Search the rocket for any ComponentPresets (version 1.5) + for (RocketComponent c : document.getRocket()) { + if (c.getPresetComponent() != null) { + return FILE_VERSION_DIVISOR + 5; + } + } + + // Search for recovery device deployment type LOWER_STAGE_SEPARATION (version 1.5) + for (RocketComponent c : document.getRocket()) { + if (c instanceof RecoveryDevice) { + if (((RecoveryDevice) c).getDeployEvent() == DeployEvent.LOWER_STAGE_SEPARATION) { + return FILE_VERSION_DIVISOR + 5; + } + } + } + + // Check for custom expressions + if (!document.getCustomExpressions().isEmpty()) { + return FILE_VERSION_DIVISOR + 5; + } + // Check if design has simulations defined (version 1.4) if (document.getSimulationCount() > 0) { return FILE_VERSION_DIVISOR + 4; } // Check for motor definitions (version 1.4) - Iterator iterator = document.getRocket().iterator(); - while (iterator.hasNext()) { - RocketComponent c = iterator.next(); + for (RocketComponent c : document.getRocket()) { if (!(c instanceof MotorMount)) continue; @@ -215,10 +280,7 @@ public class OpenRocketSaver extends RocketSaver { } // Check for fin tabs (version 1.1) - iterator = document.getRocket().iterator(); - while (iterator.hasNext()) { - RocketComponent c = iterator.next(); - + for (RocketComponent c : document.getRocket()) { // Check for fin tabs if (c instanceof FinSet) { FinSet fin = (FinSet) c; @@ -304,8 +366,10 @@ public class OpenRocketSaver extends RocketSaver { writeln("" + escapeXML(simulation.getName()) + ""); // TODO: MEDIUM: Other simulators/calculators + writeln("RK4Simulator"); writeln("BarrowmanCalculator"); + writeln(""); indent++; @@ -318,7 +382,7 @@ public class OpenRocketSaver extends RocketSaver { writeElement("launchaltitude", cond.getLaunchAltitude()); writeElement("launchlatitude", cond.getLaunchLatitude()); writeElement("launchlongitude", cond.getLaunchLongitude()); - writeElement("geodeticmethod", cond.getGeodeticComputation().name().toLowerCase()); + writeElement("geodeticmethod", cond.getGeodeticComputation().name().toLowerCase(Locale.ENGLISH)); if (cond.isISAAtmosphere()) { writeln(""); @@ -341,7 +405,6 @@ public class OpenRocketSaver extends RocketSaver { writeElement("listener", escapeXML(s)); } - // Write basic simulation data FlightData data = simulation.getSimulatedData(); @@ -419,6 +482,17 @@ public class OpenRocketSaver extends RocketSaver { StringBuilder sb = new StringBuilder(); sb.append(" 0) + sb.append(","); + sb.append(escapeXML(types[i].getKey())); + } + */ + sb.append("\" types=\""); for (int i = 0; i < types.length; i++) { if (i > 0) @@ -553,7 +627,7 @@ public class OpenRocketSaver extends RocketSaver { * @return the corresponding XML name. */ public static String enumToXMLName(Enum e) { - return e.name().toLowerCase().replace("_", ""); + return e.name().toLowerCase(Locale.ENGLISH).replace("_", ""); } }