package net.sf.openrocket.preset.loader;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.StringReader;
-import java.util.List;
-import java.util.Map;
-
import net.sf.openrocket.gui.util.SwingPreferences;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.preset.ComponentPreset;
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 void printUsage() {
- System.err.println("RocksimComponentFileLoader <dir> <file>");
- System.err.println("<dir> is base directory for a set of Rocksim component csv files");
- System.err.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>();
-
- RocksimComponentFileLoader.basePath = args[0];
-
- System.err.println("Loading csv files from directory " + args[0]);
-
- Startup.initializeLogging();
- Application.setPreferences(new SwingPreferences());
-
- MaterialLoader mats = new MaterialLoader();
- mats.load();
-
- Map<String, Material> materialMap = mats.getMaterialMap();
- System.err.println("\tMaterial types loaded: " + materialMap.size());
-
- {
- BodyTubeLoader bts = new BodyTubeLoader(materialMap);
- bts.load();
- allPresets.addAll(bts.getPresets());
- System.err.println("\tBody Tubes loaded: " + bts.getPresets().size());
- }
- {
- BulkHeadLoader bhs = new BulkHeadLoader(materialMap);
- bhs.load();
- allPresets.addAll(bhs.getPresets());
- System.err.println("\tBulkheads loaded: " + bhs.getPresets().size());
- }
- {
- CenteringRingLoader crs = new CenteringRingLoader(materialMap);
- crs.load();
- allPresets.addAll(crs.getPresets());
- System.err.println("\tCentering Rings loaded: " + crs.getPresets().size());
- }
- {
- TubeCouplerLoader tcs = new TubeCouplerLoader(materialMap);
- tcs.load();
- allPresets.addAll(tcs.getPresets());
- System.err.println("\tTube Couplers loaded: " + tcs.getPresets().size());
- }
- {
- EngineBlockLoader ebs = new EngineBlockLoader(materialMap);
- ebs.load();
- allPresets.addAll(ebs.getPresets());
- System.err.println("\tEngine Blocks loaded: " + ebs.getPresets().size());
- }
- {
- NoseConeLoader ncs = new NoseConeLoader(materialMap);
- ncs.load();
- allPresets.addAll(ncs.getPresets());
- System.err.println("\tNose Cones loaded: " + ncs.getPresets().size());
- }
- {
- TransitionLoader trs = new TransitionLoader(materialMap);
- trs.load();
- allPresets.addAll(trs.getPresets());
- System.err.println("\tTransitions loaded: " + trs.getPresets().size());
- }
- {
- LaunchLugLoader lls = new LaunchLugLoader(materialMap);
- lls.load();
- allPresets.addAll(lls.getPresets());
- System.err.println("\tLaunch Lugs loaded: " + lls.getPresets().size());
- }
- {
- StreamerLoader sts = new StreamerLoader(materialMap);
- sts.load();
- allPresets.addAll(sts.getPresets());
- System.err.println("\tStreamers loaded: " + sts.getPresets().size());
- }
- {
- ParachuteLoader pcs = new ParachuteLoader(materialMap);
- pcs.load();
- allPresets.addAll(pcs.getPresets());
- System.err.println("Parachutes loaded: " + pcs.getPresets().size());
- }
- System.err.println("\tMarshalling to XML");
- String xml = new OpenRocketComponentSaver().marshalToOpenRocketComponent(new ArrayList<Material>(materialMap.values()), allPresets);
-
- // Try parsing the file
- System.err.println("\tValidating XML");
- List<ComponentPreset> presets = new OpenRocketComponentSaver().unmarshalFromOpenRocketComponent(new StringReader(xml));
-
- System.err.println("\tWriting to file " + args[1]);
- File outfile = new File(args[1]);
- FileWriter fos = new FileWriter(outfile);
- fos.write(xml);
- fos.flush();
- fos.close();
-
- }
+ 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;
+ }
}