--- /dev/null
+package net.sf.openrocket.preset.loader;
+
+import net.sf.openrocket.gui.util.SwingPreferences;
+import net.sf.openrocket.material.Material;
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.xml.OpenRocketComponentSaver;
+import net.sf.openrocket.startup.Application;
+import net.sf.openrocket.startup.Startup;
+import net.sf.openrocket.util.ArrayList;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintStream;
+import java.io.StringReader;
+import java.util.List;
+
+public class RocksimComponentFileTranslator {
+
+ private static PrintStream LOGGER = System.err;
+
+ private static void printUsage() {
+ LOGGER.println("RocksimComponentFileLoader <dir> <file>");
+ LOGGER.println("<dir> is base directory for a set of Rocksim component csv files");
+ LOGGER.println("<file> is where the orc file is written");
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ // How to control logging?
+
+ if (args.length < 2 || args.length > 2) {
+ printUsage();
+ throw new IllegalArgumentException("Invalid Command Line Params");
+ }
+
+ List<ComponentPreset> allPresets = new ArrayList<ComponentPreset>();
+
+ LOGGER.println("Loading csv files from directory " + args[0]);
+
+ Startup.initializeLogging();
+ Application.setPreferences(new SwingPreferences());
+
+ MaterialHolder materialMap = loadAll(allPresets, new File(args[0]));
+ LOGGER.println("\tMarshalling to XML");
+ String xml = new OpenRocketComponentSaver().marshalToOpenRocketComponent(new ArrayList<Material>(materialMap.values()), allPresets);
+
+ // Try parsing the file
+ LOGGER.println("\tValidating XML");
+ // Throw away the result, we're just parsing for validation.
+ new OpenRocketComponentSaver().unmarshalFromOpenRocketComponent(new StringReader(xml));
+
+ LOGGER.println("\tWriting to file " + args[1]);
+ File outfile = new File(args[1]);
+ FileWriter fos = new FileWriter(outfile);
+ fos.write(xml);
+ fos.flush();
+ fos.close();
+ }
+
+ /**
+ * Set a print stream as a logger. Defaults to System.err.
+ *
+ * @param ps a stream to log to
+ */
+ public static void setLogger(PrintStream ps) {
+ if (ps != null) {
+ LOGGER = ps;
+ }
+ }
+
+ /**
+ * Load all presets. The loaded presets are added to the list parameter. The loaded materials are returned in the
+ * MaterialHolder instance.
+ *
+ * @param theAllPresets a list of ComponentPreset that gets populated as the result of loading; must not be null on
+ * invocation
+ *
+ * @return a holder of the materials loaded
+ */
+ public static MaterialHolder loadAll(final List<ComponentPreset> theAllPresets, File theBasePathToLoadFrom) {
+ MaterialLoader mats = new MaterialLoader(theBasePathToLoadFrom);
+ mats.load();
+
+ MaterialHolder materialMap = mats.getMaterialMap();
+ LOGGER.println("\tMaterial types loaded: " + materialMap.size());
+
+ {
+ BodyTubeLoader bts = new BodyTubeLoader(materialMap, theBasePathToLoadFrom);
+ bts.load();
+ theAllPresets.addAll(bts.getPresets());
+ LOGGER.println("\tBody Tubes loaded: " + bts.getPresets().size());
+ }
+ {
+ BulkHeadLoader bhs = new BulkHeadLoader(materialMap, theBasePathToLoadFrom);
+ bhs.load();
+ theAllPresets.addAll(bhs.getPresets());
+ LOGGER.println("\tBulkheads loaded: " + bhs.getPresets().size());
+ }
+ {
+ CenteringRingLoader crs = new CenteringRingLoader(materialMap, theBasePathToLoadFrom);
+ crs.load();
+ theAllPresets.addAll(crs.getPresets());
+ LOGGER.println("\tCentering Rings loaded: " + crs.getPresets().size());
+ }
+ {
+ TubeCouplerLoader tcs = new TubeCouplerLoader(materialMap, theBasePathToLoadFrom);
+ tcs.load();
+ theAllPresets.addAll(tcs.getPresets());
+ LOGGER.println("\tTube Couplers loaded: " + tcs.getPresets().size());
+ }
+ {
+ EngineBlockLoader ebs = new EngineBlockLoader(materialMap, theBasePathToLoadFrom);
+ ebs.load();
+ theAllPresets.addAll(ebs.getPresets());
+ LOGGER.println("\tEngine Blocks loaded: " + ebs.getPresets().size());
+ }
+ {
+ NoseConeLoader ncs = new NoseConeLoader(materialMap, theBasePathToLoadFrom);
+ ncs.load();
+ theAllPresets.addAll(ncs.getPresets());
+ LOGGER.println("\tNose Cones loaded: " + ncs.getPresets().size());
+ }
+ {
+ TransitionLoader trs = new TransitionLoader(materialMap, theBasePathToLoadFrom);
+ trs.load();
+ theAllPresets.addAll(trs.getPresets());
+ LOGGER.println("\tTransitions loaded: " + trs.getPresets().size());
+ }
+ {
+ LaunchLugLoader lls = new LaunchLugLoader(materialMap, theBasePathToLoadFrom);
+ lls.load();
+ theAllPresets.addAll(lls.getPresets());
+ LOGGER.println("\tLaunch Lugs loaded: " + lls.getPresets().size());
+ }
+ {
+ StreamerLoader sts = new StreamerLoader(materialMap, theBasePathToLoadFrom);
+ sts.load();
+ theAllPresets.addAll(sts.getPresets());
+ LOGGER.println("\tStreamers loaded: " + sts.getPresets().size());
+ }
+ {
+ ParachuteLoader pcs = new ParachuteLoader(materialMap, theBasePathToLoadFrom);
+ pcs.load();
+ theAllPresets.addAll(pcs.getPresets());
+ LOGGER.println("Parachutes loaded: " + pcs.getPresets().size());
+ }
+ return materialMap;
+ }
+
+}