Updates and fixed to preset handling
[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 au.com.bytecode.opencsv.CSVReader;
12
13 public class PresetCSVReader {
14         
15         private InputStream is;
16         private ColumnDefinition[] columns;
17         
18         public PresetCSVReader(InputStream is) {
19                 this.is = is;
20         }
21         
22         public List<ComponentPreset> parse() throws IOException {
23                 
24                 List<ComponentPreset> templates = new ArrayList<ComponentPreset>();
25                 
26                 InputStreamReader r = new InputStreamReader(is);
27                 
28                 // Create the CSV reader.  Use comma separator and double-quote escaping.
29                 CSVReader reader = new CSVReader(r, ',', '"');
30                 
31                 String[] headers = reader.readNext();
32                 if (headers == null || headers.length == 0) {
33                         return templates;
34                 }
35                 
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();
45                         } else {
46                                 TypedKey key = ComponentPreset.keyMap.get(h);
47                                 if (key == null) {
48                                         throw new RuntimeException("Invalid parameter key " + h + " in file");
49                                 }
50                                 columns[i] = new ColumnDefinition.Parameter(key);
51                         }
52                 }
53                 
54                 String[] line;
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) {
59                                         break;
60                                 }
61                                 String value = line[i];
62                                 columns[i].setProperty(preset, value);
63                         }
64                         templates.add(preset);
65                 }
66                 
67                 return templates;
68         }
69         
70 }