package net.sf.openrocket.utils; import java.io.File; import java.io.FileWriter; import java.io.PrintStream; import java.io.StringReader; import java.util.List; import net.sf.openrocket.material.Material; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.loader.BodyTubeLoader; import net.sf.openrocket.preset.loader.BulkHeadLoader; import net.sf.openrocket.preset.loader.CenteringRingLoader; import net.sf.openrocket.preset.loader.EngineBlockLoader; import net.sf.openrocket.preset.loader.LaunchLugLoader; import net.sf.openrocket.preset.loader.MaterialHolder; import net.sf.openrocket.preset.loader.MaterialLoader; import net.sf.openrocket.preset.loader.NoseConeLoader; import net.sf.openrocket.preset.loader.ParachuteLoader; import net.sf.openrocket.preset.loader.StreamerLoader; import net.sf.openrocket.preset.loader.TransitionLoader; import net.sf.openrocket.preset.loader.TubeCouplerLoader; import net.sf.openrocket.preset.xml.OpenRocketComponentSaver; import net.sf.openrocket.util.ArrayList; 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 { BasicApplication app = new BasicApplication(); app.initializeApplication(); // 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]); 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; } }