1 package net.sf.openrocket.database;
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.ArrayList;
6 import java.util.Collection;
7 import java.util.Collections;
11 import net.sf.openrocket.file.Loader;
12 import net.sf.openrocket.file.preset.PresetCSVReader;
13 import net.sf.openrocket.preset.ComponentPreset;
14 import net.sf.openrocket.preset.InvalidComponentPresetException;
15 import net.sf.openrocket.preset.TypedPropertyMap;
16 import net.sf.openrocket.startup.Application;
17 import net.sf.openrocket.util.BugException;
19 public class ComponentPresetDatabase extends Database<ComponentPreset> implements ComponentPresetDao {
21 private static class ComponentPresetLoader implements Loader<ComponentPreset> {
24 public Collection<ComponentPreset> load(InputStream stream,
25 String filename) throws IOException {
26 Set<String> favorites = Application.getPreferences().getComponentFavorites();
28 List<ComponentPreset> returnval = new ArrayList<ComponentPreset>();
30 InputStream is = ComponentPresetDao.class.getResourceAsStream("/datafiles/bodytubepresets.csv");
32 PresetCSVReader parser = new PresetCSVReader(is);
33 List<TypedPropertyMap> list = parser.parse();
34 for( TypedPropertyMap o : list ) {
36 ComponentPreset preset = ComponentPreset.create(o);
37 if ( favorites.contains(preset.preferenceKey())) {
38 preset.setFavorite(true);
40 returnval.add(preset);
41 } catch ( InvalidComponentPresetException ex ) {
42 throw new BugException( ex );
50 public ComponentPresetDatabase() {
51 super(new ComponentPresetLoader());
55 public List<ComponentPreset> listAll() {
60 public void insert( ComponentPreset preset ) {
65 public List<ComponentPreset> listForType( ComponentPreset.Type type ) {
67 return Collections.<ComponentPreset>emptyList();
70 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
72 for( ComponentPreset preset : list ) {
73 if ( preset.get(ComponentPreset.TYPE).equals(type) ) {
82 * Return a list of component presets based on the type.
83 * All components returned will be of Type type.
86 * @param favorite if true, only return the favorites. otherwise return all matching.
90 public List<ComponentPreset> listForType( ComponentPreset.Type type, boolean favorite ) {
93 return listForType(type);
96 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
98 for( ComponentPreset preset : list ) {
99 if ( preset.isFavorite() && preset.get(ComponentPreset.TYPE).equals(type) ) {
107 public List<ComponentPreset> listForTypes( ComponentPreset.Type ... type ) {
109 if( type == null || type.length == 0 ) {
110 return Collections.<ComponentPreset>emptyList();
113 if (type.length == 1 ) {
114 return listForType(type[0]);
117 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
119 for( ComponentPreset preset : list ) {
120 ComponentPreset.Type presetType = preset.get(ComponentPreset.TYPE);
121 typeLoop: for( int i=0; i<type.length; i++ ) {
122 if ( !presetType.equals(type) ) {
124 break typeLoop; // from inner loop.
133 public void setFavorite( ComponentPreset preset, boolean favorite ) {
134 preset.setFavorite(favorite);
135 Application.getPreferences().setComponentFavorite( preset, favorite );
136 this.fireAddEvent(preset);