1 package net.sf.openrocket.database;
3 import java.io.InputStream;
4 import java.io.InputStreamReader;
5 import java.util.ArrayList;
6 import java.util.Collection;
7 import java.util.Collections;
11 import javax.xml.bind.JAXBException;
13 import net.sf.openrocket.file.Loader;
14 import net.sf.openrocket.logging.LogHelper;
15 import net.sf.openrocket.preset.ComponentPreset;
16 import net.sf.openrocket.preset.InvalidComponentPresetException;
17 import net.sf.openrocket.preset.xml.OpenRocketComponentSaver;
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 public static class ComponentPresetLoader implements Loader<ComponentPreset> {
28 public Collection<ComponentPreset> load(InputStream stream, String filename) {
30 log.debug("Loading presets from file " + filename);
32 Set<String> favorites = Application.getPreferences().getComponentFavorites();
35 List<ComponentPreset> presets;
36 presets = new OpenRocketComponentSaver().unmarshalFromOpenRocketComponent( new InputStreamReader (stream));
37 for( ComponentPreset preset : presets ) {
38 if ( favorites.contains(preset.preferenceKey())) {
39 preset.setFavorite(true);
42 log.debug("ComponentPreset file " + filename + " contained " + presets.size() + " presets");
44 } catch (JAXBException e) {
45 throw new BugException("Unable to parser file: "+ filename, e);
46 } catch (InvalidComponentPresetException e) {
47 throw new BugException("Unable to parser file: "+ filename, e);
54 public ComponentPresetDatabase() {
55 super(new ComponentPresetLoader());
59 public List<ComponentPreset> listAll() {
64 public void insert( ComponentPreset preset ) {
69 public List<ComponentPreset> listForType( ComponentPreset.Type type ) {
71 return Collections.<ComponentPreset>emptyList();
74 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
76 for( ComponentPreset preset : list ) {
77 if ( preset.get(ComponentPreset.TYPE).equals(type) ) {
86 * Return a list of component presets based on the type.
87 * All components returned will be of Type type.
90 * @param favorite if true, only return the favorites. otherwise return all matching.
94 public List<ComponentPreset> listForType( ComponentPreset.Type type, boolean favorite ) {
97 return listForType(type);
100 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
102 for( ComponentPreset preset : list ) {
103 if ( preset.isFavorite() && preset.get(ComponentPreset.TYPE).equals(type) ) {
111 public List<ComponentPreset> listForTypes( ComponentPreset.Type ... type ) {
113 if( type == null || type.length == 0 ) {
114 return Collections.<ComponentPreset>emptyList();
117 if (type.length == 1 ) {
118 return listForType(type[0]);
121 List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
123 for( ComponentPreset preset : list ) {
124 ComponentPreset.Type presetType = preset.get(ComponentPreset.TYPE);
125 typeLoop: for( int i=0; i<type.length; i++ ) {
126 if ( presetType.equals(type[i]) ) {
128 break typeLoop; // from inner loop.
137 public List<ComponentPreset> listForTypes( List<ComponentPreset.Type> types ) {
138 return listForTypes( (ComponentPreset.Type[]) types.toArray() );
142 public List<ComponentPreset> find(String manufacturer, String partNo) {
143 List<ComponentPreset> presets = new ArrayList<ComponentPreset>();
144 for( ComponentPreset preset : list ) {
145 if ( preset.getManufacturer().getSimpleName().equals(manufacturer) && preset.getPartNo().equals(partNo) ) {
153 public void setFavorite( ComponentPreset preset, boolean favorite ) {
154 preset.setFavorite(favorite);
155 Application.getPreferences().setComponentFavorite( preset, favorite );
156 this.fireAddEvent(preset);