Added ability to open *.csv files to menu.
[debian/openrocket] / core / src / net / sf / openrocket / preset / loader / RocksimComponentFileTranslator.java
1 package net.sf.openrocket.preset.loader;
2
3 import net.sf.openrocket.gui.util.SwingPreferences;
4 import net.sf.openrocket.material.Material;
5 import net.sf.openrocket.preset.ComponentPreset;
6 import net.sf.openrocket.preset.xml.OpenRocketComponentSaver;
7 import net.sf.openrocket.startup.Application;
8 import net.sf.openrocket.startup.Startup;
9 import net.sf.openrocket.util.ArrayList;
10
11 import java.io.File;
12 import java.io.FileWriter;
13 import java.io.PrintStream;
14 import java.io.StringReader;
15 import java.util.List;
16
17 public class RocksimComponentFileTranslator {
18
19     private static PrintStream LOGGER = System.err;
20
21     private static void printUsage() {
22         LOGGER.println("RocksimComponentFileLoader <dir> <file>");
23         LOGGER.println("<dir> is base directory for a set of Rocksim component csv files");
24         LOGGER.println("<file> is where the orc file is written");
25     }
26
27     public static void main(String[] args) throws Exception {
28
29         // How to control logging?
30
31         if (args.length < 2 || args.length > 2) {
32             printUsage();
33             throw new IllegalArgumentException("Invalid Command Line Params");
34         }
35
36         List<ComponentPreset> allPresets = new ArrayList<ComponentPreset>();
37
38         LOGGER.println("Loading csv files from directory " + args[0]);
39
40         Startup.initializeLogging();
41         Application.setPreferences(new SwingPreferences());
42
43         MaterialHolder materialMap = loadAll(allPresets, new File(args[0]));
44         LOGGER.println("\tMarshalling to XML");
45         String xml = new OpenRocketComponentSaver().marshalToOpenRocketComponent(new ArrayList<Material>(materialMap.values()), allPresets);
46
47         // Try parsing the file
48         LOGGER.println("\tValidating XML");
49         List<ComponentPreset> presets = new OpenRocketComponentSaver().unmarshalFromOpenRocketComponent(new StringReader(xml));
50
51         LOGGER.println("\tWriting to file " + args[1]);
52         File outfile = new File(args[1]);
53         FileWriter fos = new FileWriter(outfile);
54         fos.write(xml);
55         fos.flush();
56         fos.close();
57     }
58
59     /**
60      * Set a print stream as a logger.  Defaults to System.err.
61      *
62      * @param ps a stream to log to
63      */
64     public static void setLogger(PrintStream ps) {
65         if (ps != null) {
66             LOGGER = ps;
67         }
68     }
69
70     /**
71      * Load all presets.  The loaded presets are added to the list parameter.  The loaded materials are returned in the
72      * MaterialHolder instance.
73      *
74      * @param theAllPresets a list of ComponentPreset that gets populated as the result of loading; must not be null on
75      *                      invocation
76      *
77      * @return a holder of the materials loaded
78      */
79     public static MaterialHolder loadAll(final List<ComponentPreset> theAllPresets, File theBasePathToLoadFrom) {
80         MaterialLoader mats = new MaterialLoader(theBasePathToLoadFrom);
81         mats.load();
82
83         MaterialHolder materialMap = mats.getMaterialMap();
84         LOGGER.println("\tMaterial types loaded: " + materialMap.size());
85
86         {
87             BodyTubeLoader bts = new BodyTubeLoader(materialMap, theBasePathToLoadFrom);
88             bts.load();
89             theAllPresets.addAll(bts.getPresets());
90             LOGGER.println("\tBody Tubes loaded: " + bts.getPresets().size());
91         }
92         {
93             BulkHeadLoader bhs = new BulkHeadLoader(materialMap, theBasePathToLoadFrom);
94             bhs.load();
95             theAllPresets.addAll(bhs.getPresets());
96             LOGGER.println("\tBulkheads loaded: " + bhs.getPresets().size());
97         }
98         {
99             CenteringRingLoader crs = new CenteringRingLoader(materialMap, theBasePathToLoadFrom);
100             crs.load();
101             theAllPresets.addAll(crs.getPresets());
102             LOGGER.println("\tCentering Rings loaded: " + crs.getPresets().size());
103         }
104         {
105             TubeCouplerLoader tcs = new TubeCouplerLoader(materialMap, theBasePathToLoadFrom);
106             tcs.load();
107             theAllPresets.addAll(tcs.getPresets());
108             LOGGER.println("\tTube Couplers loaded: " + tcs.getPresets().size());
109         }
110         {
111             EngineBlockLoader ebs = new EngineBlockLoader(materialMap, theBasePathToLoadFrom);
112             ebs.load();
113             theAllPresets.addAll(ebs.getPresets());
114             LOGGER.println("\tEngine Blocks loaded: " + ebs.getPresets().size());
115         }
116         {
117             NoseConeLoader ncs = new NoseConeLoader(materialMap, theBasePathToLoadFrom);
118             ncs.load();
119             theAllPresets.addAll(ncs.getPresets());
120             LOGGER.println("\tNose Cones loaded: " + ncs.getPresets().size());
121         }
122         {
123             TransitionLoader trs = new TransitionLoader(materialMap, theBasePathToLoadFrom);
124             trs.load();
125             theAllPresets.addAll(trs.getPresets());
126             LOGGER.println("\tTransitions loaded: " + trs.getPresets().size());
127         }
128         {
129             LaunchLugLoader lls = new LaunchLugLoader(materialMap, theBasePathToLoadFrom);
130             lls.load();
131             theAllPresets.addAll(lls.getPresets());
132             LOGGER.println("\tLaunch Lugs loaded: " + lls.getPresets().size());
133         }
134         {
135             StreamerLoader sts = new StreamerLoader(materialMap, theBasePathToLoadFrom);
136             sts.load();
137             theAllPresets.addAll(sts.getPresets());
138             LOGGER.println("\tStreamers loaded: " + sts.getPresets().size());
139         }
140         {
141             ParachuteLoader pcs = new ParachuteLoader(materialMap, theBasePathToLoadFrom);
142             pcs.load();
143             theAllPresets.addAll(pcs.getPresets());
144             LOGGER.println("Parachutes loaded: " + pcs.getPresets().size());
145         }
146         return materialMap;
147     }
148
149 }