]> git.gag.com Git - debian/openrocket/blob - core/src/net/sf/openrocket/file/preset/PresetCSVReader.java
Revamp construction of ComponentPresets. Validation and data munging done in the...
[debian/openrocket] / core / src / net / sf / openrocket / file / preset / PresetCSVReader.java
1 package net.sf.openrocket.file.preset;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.io.InputStreamReader;
6 import java.util.ArrayList;
7 import java.util.List;
8
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;
13
14 public class PresetCSVReader {
15
16         private InputStream is;
17         private ColumnDefinition<?>[] columns;
18
19         public PresetCSVReader(InputStream is) {
20                 this.is = is;
21         }
22
23         public List<TypedPropertyMap> parse() throws IOException {
24
25                 List<TypedPropertyMap> templates = new ArrayList<TypedPropertyMap>();
26
27                 InputStreamReader r = new InputStreamReader(is);
28
29                 // Create the CSV reader.  Use comma separator and double-quote escaping.
30                 CSVReader reader = new CSVReader(r, ',', '"');
31
32                 String[] headers = reader.readNext();
33                 if (headers == null || headers.length == 0) {
34                         return templates;
35                 }
36
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);
41                         if (key == null) {
42                                 throw new RuntimeException("Invalid parameter key " + h + " in file");
43                         }
44                         columns[i] = new ColumnDefinition(key);
45                 }
46
47                 String[] line;
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) {
52                                         break;
53                                 }
54                                 String value = line[i];
55                                 if ( value == null ) {
56                                         continue;
57                                 }
58                                 value = value.trim();
59                                 if ( value.length() == 0 ) {
60                                         continue;
61                                 }
62                                 columns[i].setProperty(preset, value);
63                         }
64                         templates.add(preset);
65                 }
66
67                 return templates;
68         }
69
70 }