View Javadoc

1   /*
2    *  Copyright (C) 2003-2005 SINTEF
3    *  Author:  Fredrik Vraalsen (fredrik dot vraalsen at sintef dot no)
4    *  Webpage: http://coras.sourceforge.net/
5    *
6    *  This program is free software; you can redistribute it and/or
7    *  modify it under the terms of the GNU Lesser General Public License
8    *  as published by the Free Software Foundation; either version 2.1
9    *  of the License, or (at your option) any later version.
10   *
11   *  This program is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   *  Lesser General Public License for more details.
15   *
16   *  You should have received a copy of the GNU Lesser General Public
17   *  License along with this program; if not, write to the Free
18   *  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19   *  02111-1307 USA
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 					RiskAssessmentProjectServices projectServicesHome = RiskAssessmentProjectServicesUtil.getHome().create();
105 					Collection c = projectServicesHome.getCurrentProjectVersions();
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 }