928639ec6b31cf311719171d71be0a91413bc0e1
[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.rocketcomponent.BodyTube;
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<ComponentPreset> parse() throws IOException {
24         
25                 List<ComponentPreset> templates = new ArrayList<ComponentPreset>();
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                         if( "Manufacturer".equals(h) ) {
41                                 columns[i] = new ColumnDefinition.Manufactuer();
42                         } else if ( "PartNumber".equals(h) ) {
43                                 columns[i] = new ColumnDefinition.PartNumber();
44                         } else if ( "Type".equals(h) ) {
45                                 columns[i] = new ColumnDefinition.Type();
46                         } else {
47                                 TypedKey key = ComponentPreset.keyMap.get(h);
48                                 if ( key == null ) {
49                                         throw new RuntimeException("Invalid parameter key " + h + " in file");
50                                 }
51                                 columns[i] = new ColumnDefinition.Parameter( key );
52                         }
53                 }
54                 
55                 String[] line;
56                 while( (line = reader.readNext()) != null ) {
57                         ComponentPreset preset = new ComponentPreset();
58                         for( int i = 0; i< headers.length; i++ ) {
59                                 if ( i > line.length ) {
60                                         break;
61                                 }
62                                 String value = line[i];
63                                 columns[i].setProperty(preset, value);
64                         }
65                         templates.add(preset);
66                 }
67
68                 return templates;
69         }
70         
71 }