1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package coras.client.ui;
22
23 import java.awt.Cursor;
24 import java.awt.Frame;
25 import java.awt.Rectangle;
26 import java.awt.event.KeyEvent;
27 import java.util.Collection;
28 import java.util.Iterator;
29
30 import javax.swing.DefaultListModel;
31 import javax.swing.JButton;
32 import javax.swing.JDialog;
33 import javax.swing.JList;
34 import javax.swing.JOptionPane;
35 import javax.swing.JPanel;
36 import javax.swing.JScrollPane;
37
38 import coras.client.SwingWorker;
39 import coras.reuse.ExperiencePackage;
40 /***
41 * @author fvr
42 *
43 * TODO To change the template for this generated type comment go to
44 * Window - Preferences - Java - Code Style - Code Templates
45 */
46 public class OpenPackageDialog extends JDialog {
47
48 private javax.swing.JPanel jContentPane = null;
49
50 private JPanel buttonPanel = null;
51 private JScrollPane jScrollPane = null;
52 private JButton openButton = null;
53 private JButton cancelButton = null;
54 private JList packageList = null;
55
56 private int result = -1;
57
58 /***
59 * This is the default constructor
60 */
61 public OpenPackageDialog() {
62 this(null);
63 }
64
65 public OpenPackageDialog(Frame frame) {
66 super(frame);
67 initialize();
68 }
69
70 public int getResult() {
71 return result;
72 }
73
74 /***
75 * This method initializes this
76 *
77 * @return void
78 */
79 private void initialize() {
80 this.setBounds(0, 0, 400, 200);
81 this.setTitle("Open Experience Package");
82 this.setModal(true);
83 this.setContentPane(getJContentPane());
84 this.addWindowListener(new java.awt.event.WindowAdapter() {
85 public void windowOpened(java.awt.event.WindowEvent e) {
86 retrievePackageList();
87 }
88 });
89 }
90
91 /***
92 *
93 */
94 private void retrievePackageList() {
95 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
96 getOwner().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
97 new SwingWorker() {
98 public Object construct() {
99 DefaultListModel model = (DefaultListModel) packageList.getModel();
100 model.removeAllElements();
101 model.addElement("Retrieving experience package list...");
102 try {
103
104
105
106
107 Collection c = ExperiencePackage.getPackages();
108 setPackages(c);
109 } catch (Exception e) {
110 e.printStackTrace();
111 }
112 return null;
113 }
114 public void finished() {
115 setCursor(Cursor.getDefaultCursor());
116 getOwner().setCursor(Cursor.getDefaultCursor());
117 }
118 }.start();
119 }
120
121 /***
122 * @param c
123 */
124 public void setPackages(Collection projects) {
125 DefaultListModel model = (DefaultListModel) packageList.getModel();
126 model.removeAllElements();
127 if (projects == null || projects.size() == 0) {
128 model.addElement("No experience packages found");
129 } else {
130 for (Iterator i = projects.iterator(); i.hasNext(); ) {
131 PackageItem item = new PackageItem((ExperiencePackage) i.next());
132 model.addElement(item);
133 }
134 }
135 packageList.repaint();
136 }
137
138 /***
139 * This method initializes jContentPane
140 *
141 * @return javax.swing.JPanel
142 */
143 private javax.swing.JPanel getJContentPane() {
144 if(jContentPane == null) {
145 jContentPane = new javax.swing.JPanel();
146 jContentPane.setLayout(new java.awt.BorderLayout());
147 jContentPane.add(getButtonPanel(), java.awt.BorderLayout.SOUTH);
148 jContentPane.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
149 }
150 return jContentPane;
151 }
152 /***
153 * This method initializes jPanel
154 *
155 * @return javax.swing.JPanel
156 */
157 private JPanel getButtonPanel() {
158 if (buttonPanel == null) {
159 buttonPanel = new JPanel();
160 buttonPanel.add(getOpenButton(), null);
161 buttonPanel.add(getCancelButton(), null);
162 }
163 return buttonPanel;
164 }
165 /***
166 * This method initializes jScrollPane
167 *
168 * @return javax.swing.JScrollPane
169 */
170 private JScrollPane getJScrollPane() {
171 if (jScrollPane == null) {
172 jScrollPane = new JScrollPane();
173 jScrollPane.setViewportView(getPackageList());
174 }
175 return jScrollPane;
176 }
177 /***
178 * This method initializes jButton
179 *
180 * @return javax.swing.JButton
181 */
182 private JButton getOpenButton() {
183 if (openButton == null) {
184 openButton = new JButton();
185 openButton.setText("Open");
186 openButton.setMnemonic(java.awt.event.KeyEvent.VK_O);
187 openButton.setEnabled(false);
188 openButton.addActionListener(new java.awt.event.ActionListener() {
189 public void actionPerformed(java.awt.event.ActionEvent e) {
190 result = JOptionPane.OK_OPTION;
191 dispose();
192 }
193 });
194 }
195 return openButton;
196 }
197 /***
198 * This method initializes jButton1
199 *
200 * @return javax.swing.JButton
201 */
202 private JButton getCancelButton() {
203 if (cancelButton == null) {
204 cancelButton = new JButton();
205 cancelButton.setText("Cancel");
206 cancelButton.setMnemonic(java.awt.event.KeyEvent.VK_C);
207 cancelButton.addActionListener(new java.awt.event.ActionListener() {
208 public void actionPerformed(java.awt.event.ActionEvent e) {
209 result = JOptionPane.CANCEL_OPTION;
210 dispose();
211 }
212 });
213 }
214 return cancelButton;
215 }
216 /***
217 * This method initializes jList
218 *
219 * @return javax.swing.JList
220 */
221 private JList getPackageList() {
222 if (packageList == null) {
223 packageList = new JList();
224 packageList.setModel(new DefaultListModel());
225
226 packageList.addKeyListener(new java.awt.event.KeyAdapter() {
227 public void keyReleased(java.awt.event.KeyEvent e) {
228 if (e.getKeyCode() == KeyEvent.VK_ENTER) {
229 result = JOptionPane.OK_OPTION;
230 dispose();
231 }
232 }
233 });
234
235 packageList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
236 public void valueChanged(javax.swing.event.ListSelectionEvent e) {
237 openButton.setEnabled(packageList.getSelectedValue() instanceof PackageItem);
238 }
239 });
240 packageList.addMouseListener(new java.awt.event.MouseAdapter() {
241 public void mouseClicked(java.awt.event.MouseEvent e) {
242 if (e.getClickCount() == 2) {
243 if (! (packageList.getSelectedValue() instanceof PackageItem)) {
244 return;
245 }
246 int index = packageList.getSelectedIndex();
247 Rectangle bounds = packageList.getCellBounds(index, index);
248 if (bounds.contains(e.getPoint())) {
249 result = JOptionPane.OK_OPTION;
250 dispose();
251 }
252 }
253 }
254 });
255
256
257 }
258 return packageList;
259 }
260
261
262 private class PackageItem {
263 ExperiencePackage experiencePackage;
264 PackageItem(ExperiencePackage project) {
265 this.experiencePackage = project;
266 }
267 public String toString() {
268 String name = null;
269 String description = null;
270 if (experiencePackage != null) {
271 name = experiencePackage.getName();
272 description = experiencePackage.getShortDescription();
273 }
274 if (name == null && description == null) {
275 return "NoName";
276 } else if (description == null) {
277 return name;
278 } else if (name == null) {
279 return "NoName - " + description;
280 } else {
281 return name + " - " + description;
282 }
283 }
284 }
285
286 /***
287 * @return
288 */
289 public ExperiencePackage getSelectedPackage() {
290 Object o = packageList.getSelectedValue();
291 if (o instanceof PackageItem) {
292 return ((PackageItem)o).experiencePackage;
293 } else {
294 return null;
295 }
296 }
297
298 }