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 net.sf.openrocket.preset.TypedPropertyMap;
12 import au.com.bytecode.opencsv.CSVReader;
14 public class PresetCSVReader {
16 private InputStream is;
17 private ColumnDefinition<?>[] columns;
19 public PresetCSVReader(InputStream is) {
23 public List<TypedPropertyMap> parse() throws IOException {
25 List<TypedPropertyMap> templates = new ArrayList<TypedPropertyMap>();
27 InputStreamReader r = new InputStreamReader(is);
29 // Create the CSV reader. Use comma separator and double-quote escaping.
30 CSVReader reader = new CSVReader(r, ',', '"');
32 String[] headers = reader.readNext();
33 if (headers == null || headers.length == 0) {
37 columns = new ColumnDefinition[headers.length];
38 for (int i = 0; i < headers.length; i++) {
39 String h = headers[i];
40 TypedKey key = ComponentPreset.keyMap.get(h);
42 throw new RuntimeException("Invalid parameter key " + h + " in file");
44 columns[i] = new ColumnDefinition(key);
48 while ((line = reader.readNext()) != null) {
49 TypedPropertyMap preset = new TypedPropertyMap();
50 for (int i = 0; i < headers.length; i++) {
51 if (i > line.length) {
54 String value = line[i];
55 if ( value == null ) {
59 if ( value.length() == 0 ) {
62 columns[i].setProperty(preset, value);
64 templates.add(preset);