Reimplement ComponentPreset to be a bag of typed parameters. This provides greater...
[debian/openrocket] / core / src / net / sf / openrocket / gui / adaptors / BodyTubePresetModel.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.preset.ComponentPreset;
9 import net.sf.openrocket.rocketcomponent.RocketComponent;
10 import net.sf.openrocket.startup.Application;
11
12 public class BodyTubePresetModel extends AbstractListModel implements ComboBoxModel {
13
14         private final RocketComponent component;
15
16         private List<ComponentPreset> presets;
17         
18         public BodyTubePresetModel(RocketComponent component) {
19                 presets = Application.getDaos().getBodyTubePresetDao().listAll();
20                 this.component = component;
21         }
22         
23         public static class BodyTubePresetAdapter {
24                 // If the ComponentPreset bt is null, then no preset is selected.
25                 private ComponentPreset bt;
26                 private BodyTubePresetAdapter( ComponentPreset bt ) {
27                         this.bt = bt;
28                 }
29                 @Override
30                 public String toString() {
31                         if ( bt != null ) {
32                                 return bt.getManufacturer() + " " + bt.getPartNo();
33                         } else {
34                                 return "";
35                         }
36                 }
37                 @Override
38                 public int hashCode() {
39                         final int prime = 31;
40                         int result = 1;
41                         result = prime * result + ((bt == null) ? 0 : bt.hashCode());
42                         return result;
43                 }
44                 @Override
45                 public boolean equals(Object obj) {
46                         // I don't know why the default equals generated by Eclipse does not work.
47                         // instead of relying on bt.equals(other.bt), we have to compare the hashcodes of those objects.
48                         if (this == obj)
49                                 return true;
50                         if (obj == null)
51                                 return false;
52                         if (getClass() != obj.getClass())
53                                 return false;
54                         BodyTubePresetAdapter other = (BodyTubePresetAdapter) obj;
55                         if (bt == null) {
56                                 if (other.bt != null)
57                                         return false;
58                         } else if (other.bt == null)
59                                 return false;
60                         return bt.hashCode() == other.bt.hashCode();
61                 }
62         }
63         
64         @Override
65         public int getSize() {
66                 return presets.size();
67         }
68
69         @Override
70         public Object getElementAt(int index) {
71                 if ( index < 0 ) {
72                         return null;
73                 }
74                 return new BodyTubePresetAdapter(presets.get(index));
75         }
76
77         @Override
78         public void setSelectedItem(Object anItem) {
79                 BodyTubePresetAdapter selected = (BodyTubePresetAdapter) anItem;
80                 if ( selected == null ) {
81                         component.loadPreset(null);
82                 } else {
83                         component.loadPreset(selected.bt);
84                 }
85         }
86
87         @Override
88         public Object getSelectedItem() {
89                 ComponentPreset preset = (ComponentPreset) component.getPresetComponent();
90                 if ( preset == null ) {
91                         return null;
92                 } else {
93                         return new BodyTubePresetAdapter(preset);
94                 }
95         }
96
97 }