create changelog entry
[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         // Throw away the result, we're just parsing for validation.
50         new OpenRocketComponentSaver().unmarshalFromOpenRocketComponent(new StringReader(xml));
51
52         LOGGER.println("\tWriting to file " + args[1]);
53         File outfile = new File(args[1]);
54         FileWriter fos = new FileWriter(outfile);
55         fos.write(xml);
56         fos.flush();
57         fos.close();
58     }
59
60     /**
61      * Set a print stream as a logger.  Defaults to System.err.
62      *
63      * @param ps a stream to log to
64      */
65     public static void setLogger(PrintStream ps) {
66         if (ps != null) {
67             LOGGER = ps;
68         }
69     }
70
71     /**
72      * Load all presets.  The loaded presets are added to the list parameter.  The loaded materials are returned in the
73      * MaterialHolder instance.
74      *
75      * @param theAllPresets a list of ComponentPreset that gets populated as the result of loading; must not be null on
76      *                      invocation
77      *
78      * @return a holder of the materials loaded
79      */
80     public static MaterialHolder loadAll(final List<ComponentPreset> theAllPresets, File theBasePathToLoadFrom) {
81         MaterialLoader mats = new MaterialLoader(theBasePathToLoadFrom);
82         mats.load();
83
84         MaterialHolder materialMap = mats.getMaterialMap();
85         LOGGER.println("\tMaterial types loaded: " + materialMap.size());
86
87         {
88             BodyTubeLoader bts = new BodyTubeLoader(materialMap, theBasePathToLoadFrom);
89             bts.load();
90             theAllPresets.addAll(bts.getPresets());
91             LOGGER.println("\tBody Tubes loaded: " + bts.getPresets().size());
92         }
93         {
94             BulkHeadLoader bhs = new BulkHeadLoader(materialMap, theBasePathToLoadFrom);
95             bhs.load();
96             theAllPresets.addAll(bhs.getPresets());
97             LOGGER.println("\tBulkheads loaded: " + bhs.getPresets().size());
98         }
99         {
100             CenteringRingLoader crs = new CenteringRingLoader(materialMap, theBasePathToLoadFrom);
101             crs.load();
102             theAllPresets.addAll(crs.getPresets());
103             LOGGER.println("\tCentering Rings loaded: " + crs.getPresets().size());
104         }
105         {
106             TubeCouplerLoader tcs = new TubeCouplerLoader(materialMap, theBasePathToLoadFrom);
107             tcs.load();
108             theAllPresets.addAll(tcs.getPresets());
109             LOGGER.println("\tTube Couplers loaded: " + tcs.getPresets().size());
110         }
111         {
112             EngineBlockLoader ebs = new EngineBlockLoader(materialMap, theBasePathToLoadFrom);
113             ebs.load();
114             theAllPresets.addAll(ebs.getPresets());
115             LOGGER.println("\tEngine Blocks loaded: " + ebs.getPresets().size());
116         }
117         {
118             NoseConeLoader ncs = new NoseConeLoader(materialMap, theBasePathToLoadFrom);
119             ncs.load();
120             theAllPresets.addAll(ncs.getPresets());
121             LOGGER.println("\tNose Cones loaded: " + ncs.getPresets().size());
122         }
123         {
124             TransitionLoader trs = new TransitionLoader(materialMap, theBasePathToLoadFrom);
125             trs.load();
126             theAllPresets.addAll(trs.getPresets());
127             LOGGER.println("\tTransitions loaded: " + trs.getPresets().size());
128         }
129         {
130             LaunchLugLoader lls = new LaunchLugLoader(materialMap, theBasePathToLoadFrom);
131             lls.load();
132             theAllPresets.addAll(lls.getPresets());
133             LOGGER.println("\tLaunch Lugs loaded: " + lls.getPresets().size());
134         }
135         {
136             StreamerLoader sts = new StreamerLoader(materialMap, theBasePathToLoadFrom);
137             sts.load();
138             theAllPresets.addAll(sts.getPresets());
139             LOGGER.println("\tStreamers loaded: " + sts.getPresets().size());
140         }
141         {
142             ParachuteLoader pcs = new ParachuteLoader(materialMap, theBasePathToLoadFrom);
143             pcs.load();
144             theAllPresets.addAll(pcs.getPresets());
145             LOGGER.println("Parachutes loaded: " + pcs.getPresets().size());
146         }
147         return materialMap;
148     }
149
150 }