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.logging.LogHelper;
14 import net.sf.openrocket.preset.ComponentPreset;
15 import net.sf.openrocket.preset.ComponentPresetFactory;
16 import net.sf.openrocket.preset.InvalidComponentPresetException;
17 import net.sf.openrocket.preset.TypedPropertyMap;
18 import net.sf.openrocket.startup.Application;
19 import net.sf.openrocket.util.BugException;
21 public class ComponentPresetDatabase extends Database<ComponentPreset> implements ComponentPresetDao {
23 private static final LogHelper log = Application.getLogger();
25 private static class ComponentPresetLoader implements Loader<ComponentPreset> {
28 public Collection<ComponentPreset> load(InputStream stream,
29 String filename) throws IOException {
31 log.debug("Loading presets from file " + filename);
33 Set<String> favorites = Application.getPreferences().getComponentFavorites();
35 List<ComponentPreset> returnval = new ArrayList<ComponentPreset>();
37 PresetCSVReader parser = new PresetCSVReader(stream);
38 List<TypedPropertyMap> list = parser.parse();
39 for( TypedPropertyMap o : list ) {
41 ComponentPreset preset = ComponentPresetFactory.create(o);
42 if ( favorites.contains(preset.preferenceKey())) {
43 preset.setFavorite(true);
45 returnval.add(preset);
46 } catch ( InvalidComponentPresetException ex ) {
47 throw new BugException( ex );
55 public ComponentPresetDatabase() {
56 super(new ComponentPresetLoader());
60 public List<ComponentPreset> listAll() {
65 public void insert( ComponentPreset preset ) {
70 public List<ComponentPreset> listForType( ComponentPreset.Type type ) {
72 return Collections.<ComponentPreset>emptyList();
75 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
77 for( ComponentPreset preset : list ) {
78 if ( preset.get(ComponentPreset.TYPE).equals(type) ) {
87 * Return a list of component presets based on the type.
88 * All components returned will be of Type type.
91 * @param favorite if true, only return the favorites. otherwise return all matching.
95 public List<ComponentPreset> listForType( ComponentPreset.Type type, boolean favorite ) {
98 return listForType(type);
101 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
103 for( ComponentPreset preset : list ) {
104 if ( preset.isFavorite() && preset.get(ComponentPreset.TYPE).equals(type) ) {
112 public List<ComponentPreset> listForTypes( ComponentPreset.Type ... type ) {
114 if( type == null || type.length == 0 ) {
115 return Collections.<ComponentPreset>emptyList();
118 if (type.length == 1 ) {
119 return listForType(type[0]);
122 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
124 for( ComponentPreset preset : list ) {
125 ComponentPreset.Type presetType = preset.get(ComponentPreset.TYPE);
126 typeLoop: for( int i=0; i<type.length; i++ ) {
127 if ( !presetType.equals(type) ) {
129 break typeLoop; // from inner loop.
138 public List<ComponentPreset> find(String manufacturer, String partNo) {
139 List<ComponentPreset> presets = new ArrayList<ComponentPreset>();
140 for( ComponentPreset preset : list ) {
141 if ( preset.getManufacturer().getSimpleName().equals(manufacturer) && preset.getPartNo().equals(partNo) ) {
149 public void setFavorite( ComponentPreset preset, boolean favorite ) {
150 preset.setFavorite(favorite);
151 Application.getPreferences().setComponentFavorite( preset, favorite );
152 this.fireAddEvent(preset);