fca47d17aad555d8b1bfdacdf6b0f2bf37b199f9
[debian/openrocket] / core / src / net / sf / openrocket / database / ComponentPresetDao.java
1 package net.sf.openrocket.database;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.ArrayList;
6 import java.util.Collections;
7 import java.util.List;
8 import java.util.Set;
9
10 import net.sf.openrocket.file.preset.PresetCSVReader;
11 import net.sf.openrocket.preset.ComponentPreset;
12 import net.sf.openrocket.preset.InvalidComponentPresetException;
13 import net.sf.openrocket.preset.TypedPropertyMap;
14 import net.sf.openrocket.startup.Application;
15 import net.sf.openrocket.util.BugException;
16
17 public class ComponentPresetDao {
18
19         // List of all ComponentPresets
20         private final List<ComponentPreset> templates = new ArrayList<ComponentPreset>();
21
22         // Package scope constructor to control creation pattern.
23         public ComponentPresetDao() {}
24
25         public void initialize() throws IOException {
26
27                 Set<String> favorites = Application.getPreferences().getComponentFavorites();
28                 
29                 InputStream is = ComponentPresetDao.class.getResourceAsStream("/datafiles/bodytubepresets.csv");
30
31                 PresetCSVReader parser = new PresetCSVReader(is);
32                 List<TypedPropertyMap> list = parser.parse();
33                 for( TypedPropertyMap o : list ) {
34                         try {
35                                 ComponentPreset preset = ComponentPreset.create(o);
36                                 if ( favorites.contains(preset.preferenceKey())) {
37                                         preset.setFavorite(true);
38                                 }
39                                 this.insert(preset);
40                         } catch ( InvalidComponentPresetException ex ) {
41                                 throw new BugException( ex );
42                         }
43                 }
44
45                 
46         }
47
48         public List<ComponentPreset> listAll() {
49                 return templates;
50         }
51
52         public void insert( ComponentPreset preset ) {
53                 templates.add(preset);
54         }
55
56         public List<ComponentPreset> listForType( ComponentPreset.Type type ) {
57                 if ( type == null ) {
58                         return Collections.<ComponentPreset>emptyList();
59                 }
60                 
61                 List<ComponentPreset> result = new ArrayList<ComponentPreset>(templates.size()/6);
62
63                 for( ComponentPreset preset : templates ) {
64                         if ( preset.get(ComponentPreset.TYPE).equals(type) ) {
65                                 result.add(preset);
66                         }
67                 }
68                 return result;
69
70         }
71
72         /**
73          * Return a list of component presets based on the type.
74          * All components returned will be of Type type.
75          * 
76          * @param type  
77          * @param favorite if true, only return the favorites.  otherwise return all matching.
78          * @return
79          */
80         public List<ComponentPreset> listForType( ComponentPreset.Type type, boolean favorite ) {
81
82                 if ( !favorite ) {
83                         return listForType(type);
84                 }
85
86                 List<ComponentPreset> result = new ArrayList<ComponentPreset>(templates.size()/6);
87
88                 for( ComponentPreset preset : templates ) {
89                         if ( preset.isFavorite() && preset.get(ComponentPreset.TYPE).equals(type) ) {
90                                 result.add(preset);
91                         }
92                 }
93                 return result;
94
95
96         }
97
98         public List<ComponentPreset> listForTypes( ComponentPreset.Type ... type ) {
99
100                 if( type == null || type.length == 0 ) {
101                         return Collections.<ComponentPreset>emptyList();
102                 }
103
104                 if (type.length == 1 ) {
105                         return listForType(type[0]);
106                 }
107
108                 List<ComponentPreset> result = new ArrayList<ComponentPreset>(templates.size()/6);
109
110                 for( ComponentPreset preset : templates ) {
111                         ComponentPreset.Type presetType = preset.get(ComponentPreset.TYPE);
112                         typeLoop: for( int i=0; i<type.length; i++ ) {
113                                 if ( !presetType.equals(type) ) {
114                                         result.add(preset);
115                                         break typeLoop; // from inner loop.
116                                 }
117                         }
118
119                 }
120                 return result;
121         }
122
123         public void setFavorite( ComponentPreset preset, boolean favorite ) {
124                 preset.setFavorite(favorite);
125                 Application.getPreferences().setComponentFavorite( preset, favorite );
126         }
127         
128 }