1 package net.sf.openrocket.file.preset;
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.io.InputStreamReader;
6 import java.util.ArrayList;
9 import net.sf.openrocket.preset.ComponentPreset;
10 import net.sf.openrocket.preset.TypedKey;
11 import au.com.bytecode.opencsv.CSVReader;
13 public class PresetCSVReader {
15 private InputStream is;
16 private ColumnDefinition[] columns;
18 public PresetCSVReader(InputStream is) {
22 public List<ComponentPreset> parse() throws IOException {
24 List<ComponentPreset> templates = new ArrayList<ComponentPreset>();
26 InputStreamReader r = new InputStreamReader(is);
28 // Create the CSV reader. Use comma separator and double-quote escaping.
29 CSVReader reader = new CSVReader(r, ',', '"');
31 String[] headers = reader.readNext();
32 if (headers == null || headers.length == 0) {
36 columns = new ColumnDefinition[headers.length];
37 for (int i = 0; i < headers.length; i++) {
38 String h = headers[i];
39 if ("Manufacturer".equals(h)) {
40 columns[i] = new ColumnDefinition.Manufactuer();
41 } else if ("PartNo".equals(h)) {
42 columns[i] = new ColumnDefinition.PartNumber();
43 } else if ("Type".equals(h)) {
44 columns[i] = new ColumnDefinition.Type();
46 TypedKey key = ComponentPreset.keyMap.get(h);
48 throw new RuntimeException("Invalid parameter key " + h + " in file");
50 columns[i] = new ColumnDefinition.Parameter(key);
55 while ((line = reader.readNext()) != null) {
56 ComponentPreset preset = new ComponentPreset();
57 for (int i = 0; i < headers.length; i++) {
58 if (i > line.length) {
61 String value = line[i];
62 columns[i].setProperty(preset, value);
64 templates.add(preset);