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 PresetCSVReader parser = new PresetCSVReader(stream);
31 List<TypedPropertyMap> list = parser.parse();
32 for( TypedPropertyMap o : list ) {
34 ComponentPreset preset = ComponentPreset.create(o);
35 if ( favorites.contains(preset.preferenceKey())) {
36 preset.setFavorite(true);
38 returnval.add(preset);
39 } catch ( InvalidComponentPresetException ex ) {
40 throw new BugException( ex );
48 public ComponentPresetDatabase() {
49 super(new ComponentPresetLoader());
53 public List<ComponentPreset> listAll() {
58 public void insert( ComponentPreset preset ) {
63 public List<ComponentPreset> listForType( ComponentPreset.Type type ) {
65 return Collections.<ComponentPreset>emptyList();
68 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
70 for( ComponentPreset preset : list ) {
71 if ( preset.get(ComponentPreset.TYPE).equals(type) ) {
80 * Return a list of component presets based on the type.
81 * All components returned will be of Type type.
84 * @param favorite if true, only return the favorites. otherwise return all matching.
88 public List<ComponentPreset> listForType( ComponentPreset.Type type, boolean favorite ) {
91 return listForType(type);
94 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
96 for( ComponentPreset preset : list ) {
97 if ( preset.isFavorite() && preset.get(ComponentPreset.TYPE).equals(type) ) {
105 public List<ComponentPreset> listForTypes( ComponentPreset.Type ... type ) {
107 if( type == null || type.length == 0 ) {
108 return Collections.<ComponentPreset>emptyList();
111 if (type.length == 1 ) {
112 return listForType(type[0]);
115 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
117 for( ComponentPreset preset : list ) {
118 ComponentPreset.Type presetType = preset.get(ComponentPreset.TYPE);
119 typeLoop: for( int i=0; i<type.length; i++ ) {
120 if ( !presetType.equals(type) ) {
122 break typeLoop; // from inner loop.
131 public List<ComponentPreset> find(String manufacturer, String partNo) {
132 List<ComponentPreset> presets = new ArrayList<ComponentPreset>();
133 for( ComponentPreset preset : list ) {
134 if ( preset.getManufacturer().getSimpleName().equals(manufacturer) && preset.getPartNo().equals(partNo) ) {
142 public void setFavorite( ComponentPreset preset, boolean favorite ) {
143 preset.setFavorite(favorite);
144 Application.getPreferences().setComponentFavorite( preset, favorite );
145 this.fireAddEvent(preset);