Make ComponentPresetDao and interface with implementation in ComponentPresetDatabase...
[debian/openrocket] / core / src / net / sf / openrocket / gui / adaptors / PresetModel.java
1 package net.sf.openrocket.gui.adaptors;
2
3 import java.util.List;
4
5 import javax.swing.AbstractListModel;
6 import javax.swing.ComboBoxModel;
7
8 import net.sf.openrocket.database.Database;
9 import net.sf.openrocket.database.DatabaseListener;
10 import net.sf.openrocket.l10n.Translator;
11 import net.sf.openrocket.logging.LogHelper;
12 import net.sf.openrocket.preset.ComponentPreset;
13 import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
14 import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
15 import net.sf.openrocket.rocketcomponent.RocketComponent;
16 import net.sf.openrocket.startup.Application;
17
18 public class PresetModel extends AbstractListModel implements ComboBoxModel, ComponentChangeListener, DatabaseListener<ComponentPreset> {
19         
20         private static final LogHelper log = Application.getLogger();
21         private static final Translator trans = Application.getTranslator();
22         
23         private static final String SELECT_PRESET = trans.get("lbl.select");
24         private static final String SELECT_DATABASE = trans.get("lbl.database");
25         
26         
27         private final RocketComponent component;
28         private ComponentPreset previousPreset;
29         
30         private List<ComponentPreset> presets;
31         
32         public PresetModel(RocketComponent component) {
33                 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
34                 this.component = component;
35                 previousPreset = component.getPresetComponent();
36                 component.addComponentChangeListener(this);
37         }
38         
39         @Override
40         public int getSize() {
41                 return presets.size() + 2;
42         }
43         
44         @Override
45         public Object getElementAt(int index) {
46                 if (index == 0) {
47                         return SELECT_PRESET;
48                 }
49                 if (index == getSize() - 1) {
50                         return SELECT_DATABASE;
51                 }
52                 return presets.get(index - 1);
53         }
54         
55         @Override
56         public void setSelectedItem(Object item) {
57                 log.user("User selected preset item '" + item + "' for component " + component);
58                 
59                 if (item == null) {
60                         // FIXME:  What to do?
61                 } else if (item.equals(SELECT_PRESET)) {
62                         component.clearPreset();
63                 } else if (item.equals(SELECT_DATABASE)) {
64                         // FIXME:  Open database dialog
65                 } else {
66                         // FIXME: Add undo point here
67                         component.loadPreset((ComponentPreset) item);
68                 }
69         }
70         
71         @Override
72         public Object getSelectedItem() {
73                 ComponentPreset preset = component.getPresetComponent();
74                 if (preset == null) {
75                         return SELECT_PRESET;
76                 } else {
77                         return preset;
78                 }
79         }
80         
81         @Override
82         public void componentChanged(ComponentChangeEvent e) {
83                 if (previousPreset != component.getPresetComponent()) {
84                         previousPreset = component.getPresetComponent();
85                         fireContentsChanged(this, 0, getSize());
86                 }
87         }
88         
89         @Override
90         public void elementAdded(ComponentPreset element, Database<ComponentPreset> source) {
91                 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
92                 this.fireContentsChanged(this, 0, getSize());
93         }
94
95         @Override
96         public void elementRemoved(ComponentPreset element, Database<ComponentPreset> source) {
97                 presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
98                 this.fireContentsChanged(this, 0, getSize());
99         }
100
101 }