]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/PackageEditor/src/org/tianocore/packaging/GuiPkgInstall.java
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@671 6f19259b...
[mirror_edk2.git] / Tools / Source / PackageEditor / src / org / tianocore / packaging / GuiPkgInstall.java
CommitLineData
878ddf1f 1/** @file\r
2 Java class GuiPkgInstall is GUI for package installation.\r
3 \r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12**/\r
13package org.tianocore.packaging;\r
14\r
15\r
16import javax.swing.JPanel;\r
17import javax.swing.JFrame;\r
18import javax.swing.JButton;\r
19import javax.swing.JFileChooser;\r
20import javax.swing.JLabel;\r
21import javax.swing.JOptionPane;\r
22import javax.swing.JTextField;\r
23\r
24import java.awt.Dimension;\r
25import java.awt.GridLayout;\r
26import java.awt.Toolkit;\r
27\r
28import java.awt.FlowLayout;\r
29import java.awt.event.MouseEvent;\r
30import java.awt.event.MouseListener;\r
31import java.awt.event.WindowAdapter;\r
32import java.awt.event.WindowEvent;\r
33\r
34import java.awt.ComponentOrientation;\r
35import java.io.File;\r
36import java.util.Hashtable;\r
37\r
38import javax.swing.SwingConstants;\r
39import javax.swing.JProgressBar;\r
40import javax.swing.filechooser.FileFilter;\r
41\r
42import org.apache.xmlbeans.XmlException;\r
43\r
44\r
45/**\r
46 GUI for package installation. \r
47 \r
48 @since PackageEditor 1.0\r
49**/\r
50public class GuiPkgInstall extends JFrame implements MouseListener {\r
51\r
52 final static long serialVersionUID = 0;\r
53\r
54 static JFrame frame;\r
55\r
56 ///\r
57 /// backup of "this". As we cannot use "this" to refer outer class inside inner class\r
58 ///\r
59 private JFrame pThis = null;\r
60\r
61 private JFileChooser chooser = null;\r
62\r
63 private JPanel jPanel = null;\r
64\r
65 private JPanel jPanel1 = null;\r
66\r
67 private JTextField jTextField = null;\r
68\r
69 private JButton jButton = null;\r
70\r
71 private JPanel jPanel2 = null;\r
72\r
73 private JLabel jLabel1 = null;\r
74\r
75 private JPanel jPanel4 = null;\r
76\r
77 private JTextField jTextField1 = null;\r
78\r
79 private JButton jButton1 = null;\r
80\r
81 private JPanel jPanel5 = null;\r
82\r
83 private JPanel jPanel6 = null;\r
84\r
85 private JPanel jPanel7 = null;\r
86\r
87 private JLabel jLabel2 = null;\r
88\r
89 private JTextField jTextField2 = null;\r
90\r
91 private JButton jButton2 = null;\r
92\r
93 private JButton jButton3 = null;\r
94\r
95 private JPanel jPanel3 = null;\r
96\r
97 private JLabel jLabel = null;\r
98\r
99 private JProgressBar jProgressBar = null;\r
100\r
101 private JButton jButton4 = null;\r
102\r
103\r
104 public GuiPkgInstall() {\r
105 super();\r
106 initialize();\r
107\r
108 }\r
109\r
110 /**\r
111 GUI initialization\r
112 **/\r
113 private void initialize() {\r
114 this.setSize(new java.awt.Dimension(454, 313));\r
115 this.setContentPane(getJPanel());\r
116 this.setTitle("Package Installation");\r
117 this.addWindowListener(new GuiPkgInstallAdapter(this));\r
118 this.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);\r
119 this.centerWindow();\r
120 pThis = this;\r
121 }\r
122\r
123 /**\r
124 make window appear center of screen\r
125 \r
126 @param intWidth\r
127 @param intHeight\r
128 **/\r
129 protected void centerWindow(int intWidth, int intHeight) {\r
130 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
131 this.setLocation((d.width - intWidth) / 2, (d.height - intHeight) / 2);\r
132 }\r
133\r
134 /**\r
135 Start the window at the center of screen\r
136 **/\r
137 protected void centerWindow() {\r
138 centerWindow(this.getSize().width, this.getSize().height);\r
139 }\r
140\r
141 /**\r
142 This method initializes jPanel\r
143 @return javax.swing.JPanel\r
144 **/\r
145 private JPanel getJPanel() {\r
146 if (jPanel == null) {\r
147 GridLayout gridLayout = new GridLayout();\r
148 gridLayout.setRows(7);\r
149 gridLayout.setColumns(1);\r
150 jPanel = new JPanel();\r
151 jPanel.setLayout(gridLayout);\r
152 jPanel.add(getJPanel3(), null);\r
153 jPanel.add(getJPanel1(), null);\r
154 jPanel.add(getJPanel2(), null);\r
155 jPanel.add(getJPanel4(), null);\r
156 jPanel.add(getJPanel5(), null);\r
157 jPanel.add(getJPanel6(), null);\r
158 jPanel.add(getJPanel7(), null);\r
159 }\r
160 return jPanel;\r
161 }\r
162\r
163 /**\r
164 This method initializes jPanel1 \r
165 \r
166 @return javax.swing.JPanel \r
167 **/\r
168 private JPanel getJPanel1() {\r
169 if (jPanel1 == null) {\r
170 FlowLayout flowLayout = new FlowLayout();\r
171 flowLayout.setAlignment(java.awt.FlowLayout.LEFT);\r
172 jPanel1 = new JPanel();\r
173 jPanel1.setLayout(flowLayout);\r
174 jPanel1.add(getJTextField(), null);\r
175 jPanel1.add(getJButton(), null);\r
176 }\r
177 return jPanel1;\r
178 }\r
179\r
180 /**\r
181 This method initializes jTextField \r
182 \r
183 @return javax.swing.JTextField \r
184 **/\r
185 private JTextField getJTextField() {\r
186 if (jTextField == null) {\r
187 jTextField = new JTextField();\r
188 jTextField.setHorizontalAlignment(javax.swing.JTextField.LEFT);\r
189 jTextField.setPreferredSize(new java.awt.Dimension(350, 20));\r
190 }\r
191 return jTextField;\r
192 }\r
193\r
194 /**\r
195 This method initializes jButton \r
196 \r
197 @return javax.swing.JButton \r
198 **/\r
199 private JButton getJButton() {\r
200 if (jButton == null) {\r
201 jButton = new JButton();\r
202 jButton.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);\r
203 jButton.setText("Browse");\r
204 jButton.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);\r
205 jButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);\r
206 jButton.setToolTipText("Where is the package?");\r
207 jButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 12));\r
208\r
209 jButton.setPreferredSize(new java.awt.Dimension(80, 20));\r
210 jButton.addMouseListener(new java.awt.event.MouseAdapter() {\r
211 public void mouseClicked(java.awt.event.MouseEvent e) {\r
212 if (chooser == null) {\r
213 chooser = new JFileChooser();\r
214 }\r
215 //\r
216 // disable multi-selection, you can only select one item each time.\r
217 //\r
218 chooser.setMultiSelectionEnabled(false);\r
219 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
220 chooser.setFileFilter(new PkgFileFilter("fdp"));\r
221 int retval = chooser.showOpenDialog(frame);\r
222 if (retval == JFileChooser.APPROVE_OPTION) {\r
223\r
224 File theFile = chooser.getSelectedFile();\r
225 jTextField.setText(theFile.getPath());\r
226 //\r
227 // set a default directory for installation (WORKSPACE\PackageFileName)\r
228 //\r
229 if (jTextField1.getText().length() > 0) {\r
230 int indexbegin = jTextField.getText().lastIndexOf(System.getProperty("file.separator"));\r
231 int indexend = jTextField.getText().lastIndexOf('.');\r
232 if (indexbegin >= 0 && indexend >= 0) {\r
233 jTextField2.setText(jTextField1.getText()\r
234 + jTextField.getText().substring(indexbegin, indexend));\r
235 } else {\r
236 JOptionPane.showMessageDialog(frame, "Wrong Path:" + jTextField.getText());\r
237 }\r
238 }\r
239 }\r
240 }\r
241 });\r
242 }\r
243 return jButton;\r
244 }\r
245\r
246 /**\r
247 This method initializes jPanel2 \r
248 \r
249 @return javax.swing.JPanel \r
250 **/\r
251 private JPanel getJPanel2() {\r
252 if (jPanel2 == null) {\r
253 FlowLayout flowLayout1 = new FlowLayout();\r
254 flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);\r
255 flowLayout1.setVgap(20);\r
256 jLabel1 = new JLabel();\r
257 jLabel1.setText("Enter Workspace Location");\r
258 jLabel1.setComponentOrientation(java.awt.ComponentOrientation.UNKNOWN);\r
259 jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);\r
260 jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);\r
261 jPanel2 = new JPanel();\r
262 jPanel2.setLayout(flowLayout1);\r
263 jPanel2.add(jLabel1, null);\r
264 }\r
265 return jPanel2;\r
266 }\r
267\r
268 /**\r
269 This method initializes jPanel4 \r
270 \r
271 @return javax.swing.JPanel \r
272 **/\r
273 private JPanel getJPanel4() {\r
274 if (jPanel4 == null) {\r
275 FlowLayout flowLayout2 = new FlowLayout();\r
276 flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);\r
277 jPanel4 = new JPanel();\r
278 jPanel4.setLayout(flowLayout2);\r
279 jPanel4.add(getJTextField1(), null);\r
280 jPanel4.add(getJButton1(), null);\r
281 }\r
282 return jPanel4;\r
283 }\r
284\r
285 /**\r
286 This method initializes jTextField1 \r
287 \r
288 @return javax.swing.JTextField \r
289 **/\r
290 private JTextField getJTextField1() {\r
291 if (jTextField1 == null) {\r
292 jTextField1 = new JTextField();\r
293 jTextField1.setPreferredSize(new java.awt.Dimension(350, 20));\r
294\r
295 }\r
296 //\r
297 // default value is WORKSPACE environmental variable value\r
298 //\r
299 jTextField1.setText(System.getenv("WORKSPACE"));\r
300 return jTextField1;\r
301 }\r
302\r
303 /**\r
304 This method initializes jButton1 \r
305 \r
306 @return javax.swing.JButton \r
307 **/\r
308 private JButton getJButton1() {\r
309 if (jButton1 == null) {\r
310 jButton1 = new JButton();\r
311 jButton1.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);\r
312 \r
313 jButton1.setHorizontalAlignment(javax.swing.SwingConstants.LEADING);\r
314 jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);\r
315 jButton1.setText("Browse");\r
316 jButton1.setPreferredSize(new java.awt.Dimension(80, 20));\r
317 jButton1.addMouseListener(new java.awt.event.MouseAdapter() {\r
318 public void mouseClicked(java.awt.event.MouseEvent e) {\r
319 if (chooser == null) {\r
320 chooser = new JFileChooser();\r
321 }\r
322 //\r
323 // only directories can be selected for workspace location.\r
324 //\r
325 chooser.setMultiSelectionEnabled(false);\r
326 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);\r
327\r
328 int retval = chooser.showOpenDialog(frame);\r
329 if (retval == JFileChooser.APPROVE_OPTION) {\r
330\r
331 File theFile = chooser.getSelectedFile();\r
332 jTextField1.setText(theFile.getPath());\r
333 //\r
334 // set a default directory for installation (WORKSPACE\PackageFileName)\r
335 //\r
336 if (jTextField.getText().length() > 0) {\r
337 int indexbegin = jTextField.getText().lastIndexOf(System.getProperty("file.separator"));\r
338 int indexend = jTextField.getText().lastIndexOf('.');\r
339 if (indexbegin >= 0 && indexend >= 0) {\r
340 jTextField2.setText(jTextField1.getText()\r
341 + jTextField.getText().substring(indexbegin, indexend));\r
342 } else {\r
343 JOptionPane.showMessageDialog(frame, "Wrong Path:" + jTextField.getText());\r
344 }\r
345 }\r
346 }\r
347\r
348 }\r
349 });\r
350 }\r
351 return jButton1;\r
352 }\r
353\r
354 /**\r
355 This method initializes jButton4 \r
356 \r
357 @return javax.swing.JButton \r
358 **/\r
359 private JButton getJButton4() {\r
360 if (jButton4 == null) {\r
361 jButton4 = new JButton();\r
362 jButton4.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);\r
363 \r
364 jButton4.setHorizontalAlignment(SwingConstants.LEADING);\r
365 jButton4.setHorizontalTextPosition(SwingConstants.TRAILING);\r
366 jButton4.setText("Browse");\r
367 jButton4.setPreferredSize(new Dimension(80, 20));\r
368 jButton4.addMouseListener(new java.awt.event.MouseAdapter() {\r
369 public void mouseClicked(java.awt.event.MouseEvent e) {\r
370 JFileChooser chooser = new JFileChooser(jTextField1.getText());\r
371 \r
372 chooser.setMultiSelectionEnabled(false);\r
373 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);\r
374\r
375 int retval = chooser.showOpenDialog(frame);\r
376 if (retval == JFileChooser.APPROVE_OPTION) {\r
377 //\r
378 // specify installation directory from file chooser \r
379 //\r
380 File theFile = chooser.getSelectedFile();\r
381 jTextField2.setText(theFile.getPath());\r
382 \r
383 }\r
384 }\r
385 });\r
386 \r
387 }\r
388 return jButton4;\r
389 }\r
390 /**\r
391 This method initializes jPanel5 \r
392 \r
393 @return javax.swing.JPanel \r
394 **/\r
395 private JPanel getJPanel5() {\r
396 if (jPanel5 == null) {\r
397 FlowLayout flowLayout3 = new FlowLayout();\r
398 flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);\r
399 flowLayout3.setVgap(20);\r
400 jLabel2 = new JLabel();\r
401 jLabel2.setComponentOrientation(java.awt.ComponentOrientation.UNKNOWN);\r
402 jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.TRAILING);\r
403 jLabel2.setText("Enter Installation Location Within Workspace");\r
404 jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);\r
405 jPanel5 = new JPanel();\r
406 jPanel5.setLayout(flowLayout3);\r
407 jPanel5.add(jLabel2, null);\r
408 }\r
409 return jPanel5;\r
410 }\r
411\r
412 /**\r
413 This method initializes jPanel6 \r
414 \r
415 @return javax.swing.JPanel \r
416 **/\r
417 private JPanel getJPanel6() {\r
418 if (jPanel6 == null) {\r
419 FlowLayout flowLayout4 = new FlowLayout();\r
420 flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);\r
421 jPanel6 = new JPanel();\r
422 jPanel6.setLayout(flowLayout4);\r
423 jPanel6.add(getJTextField2(), null);\r
424 jPanel6.add(getJButton4(), null);\r
425 }\r
426 return jPanel6;\r
427 }\r
428\r
429 /**\r
430 This method initializes jPanel7 \r
431 \r
432 @return javax.swing.JPanel \r
433 **/\r
434 private JPanel getJPanel7() {\r
435 if (jPanel7 == null) {\r
436 FlowLayout flowLayout5 = new FlowLayout();\r
437 flowLayout5.setAlignment(java.awt.FlowLayout.RIGHT);\r
438 jPanel7 = new JPanel();\r
439 jPanel7.setLayout(flowLayout5);\r
440 jPanel7.add(getJProgressBar(), null);\r
441 jPanel7.add(getJButton2(), null);\r
442 jPanel7.add(getJButton3(), null);\r
443 }\r
444 return jPanel7;\r
445 }\r
446\r
447 /**\r
448 This method initializes jTextField2 \r
449 \r
450 @return javax.swing.JTextField \r
451 **/\r
452 private JTextField getJTextField2() {\r
453 if (jTextField2 == null) {\r
454 jTextField2 = new JTextField();\r
455 jTextField2.setPreferredSize(new java.awt.Dimension(350, 20));\r
456 }\r
457 return jTextField2;\r
458 }\r
459\r
460 /**\r
461 This method initializes jButton2 \r
462 \r
463 @return javax.swing.JButton \r
464 **/\r
465 private JButton getJButton2() {\r
466 if (jButton2 == null) {\r
467 jButton2 = new JButton();\r
468 jButton2.setPreferredSize(new java.awt.Dimension(80, 20));\r
469 jButton2.setText("Ok");\r
470 jButton2.addMouseListener(new java.awt.event.MouseAdapter() {\r
471 public void mouseClicked(java.awt.event.MouseEvent e) {\r
472 try {\r
473 //\r
474 // The installation directory must under workspace directory\r
475 //\r
476 locationcheck(jTextField.getText(), jTextField1.getText(), jTextField2.getText());\r
477 } catch (Exception ee) {\r
478 JOptionPane.showMessageDialog(frame, "Package Location Error!");\r
479 return;\r
480 }\r
481 \r
482 try {\r
483 //\r
484 // create a new FrameworkPkg object with user-selected package, current workspace location.\r
485 // install the package to dest dir from jTextField2\r
486 //\r
487 int i = new FrameworkPkg(jTextField.getText(), jTextField1.getText())\r
488 .install(jTextField2\r
489 .getText());\r
490 //\r
491 // the package is installed smoothly\r
492 //\r
493 if (i == 0) {\r
494 JOptionPane.showMessageDialog(frame, "Package" + jTextField.getText()\r
495 + " Installed Successfully!");\r
496 }\r
497 } catch (BasePkgNotInstalled bpni) {\r
498 //\r
499 // exception no base package installed\r
500 //\r
501 JOptionPane\r
502 .showMessageDialog(frame,\r
503 "The Edk package needs to be installed before installing any other packages.");\r
504 } catch (VerNotEqual vne) {\r
505 //\r
506 // show modal GUI PkgInstallTypeChooser with user selected package name, \r
507 // current workspace location and the list of package info with same base name\r
508 //\r
509 ModalFrameUtil.showAsModal(new PkgInstallTypeChooser(jTextField.getText(),\r
510 jTextField1.getText(), vne.getVersion()),\r
511 pThis);\r
512\r
513 } catch (GuidNotEqual gne) {\r
514 //\r
515 // show modal GUI PkgInstallTypeChooser with user selected package name, \r
516 // current workspace location and the list of package info with same base name and version\r
517 //\r
518 ModalFrameUtil.showAsModal(new PkgInstallTypeChooser(jTextField.getText(),\r
519 jTextField1.getText(), gne.getGuid()),\r
520 pThis);\r
521\r
522 } catch (SameAll sa) {\r
523 //\r
524 // the package with same (base, version, guid) already exists. confirm user action.\r
525 // quit or replace the original info. (So only one package info entry in db file that may be triple same)\r
526 //\r
527 int retVal = JOptionPane\r
528 .showConfirmDialog(\r
529 frame,\r
530 "Package already exists. Would you like to replace it?",\r
531 "Package Installation", JOptionPane.YES_NO_OPTION);\r
532 if (retVal == JOptionPane.YES_OPTION) {\r
533 String installDir = sa.getVersion().listIterator().next().getPathArray(0).getStringValue();\r
534 try {\r
535 ForceInstallPkg f = new ForceInstallPkg(jTextField.getText(), jTextField1.getText());\r
536 //\r
537 // Get old packag info to meet the calling parameter layout of DbFileContents.updatePkgInfo\r
538 // ForceInstallPkg will call it after installation to update package info.\r
539 //\r
540 f.setOldVersion(sa.getVersion().listIterator().next().getVersionArray(0));\r
541 f.setOldGuid(sa.getVersion().listIterator().next().getGuidArray(0).getStringValue());\r
542 int i = f.install(jTextField1.getText() + System.getProperty("file.separator") + installDir);\r
543 if (i == 0) {\r
544 JOptionPane.showMessageDialog(frame, "Package" + jTextField.getText()\r
545 + " Installed Successfully!");\r
546 }\r
547 } catch (Exception sae) {\r
548 System.out.println(sae.toString());\r
549 JOptionPane.showMessageDialog(frame, "Extraction Error!");\r
550 }\r
551 }\r
552 return;\r
553 } catch (XmlException xmle) {\r
554 System.out.println(xmle.toString());\r
555 JOptionPane.showMessageDialog(frame, "Package Format Error!");\r
556 } catch (DirSame ds) {\r
557 //\r
558 // You cannot install different packages into the same directory.\r
559 //\r
560 System.out.println(ds.toString());\r
561 JOptionPane.showMessageDialog(frame,\r
562 "Another Package Exists There, Please Select Another Directory!");\r
563 } catch (Exception ext) {\r
564 System.out.println(ext.toString());\r
565 JOptionPane.showMessageDialog(frame, "Extraction Error!");\r
566 }\r
567 }\r
568 });\r
569 }\r
570 return jButton2;\r
571 }\r
572\r
573 /**\r
574 * This method initializes jButton3 \r
575 * \r
576 * @return javax.swing.JButton \r
577 */\r
578 private JButton getJButton3() {\r
579 if (jButton3 == null) {\r
580 jButton3 = new JButton();\r
581 jButton3.setPreferredSize(new java.awt.Dimension(80, 20));\r
582 jButton3.setText("Cancel");\r
583 jButton3.addMouseListener(this);\r
584 }\r
585 return jButton3;\r
586\r
587 }\r
588\r
589 /**\r
590 This method initializes jPanel3 \r
591 \r
592 @return javax.swing.JPanel \r
593 */\r
594 private JPanel getJPanel3() {\r
595 if (jPanel3 == null) {\r
596 jLabel = new JLabel();\r
597 jLabel.setComponentOrientation(ComponentOrientation.UNKNOWN);\r
598 jLabel.setHorizontalTextPosition(SwingConstants.TRAILING);\r
599 jLabel.setText("Enter Package Location");\r
600 jLabel.setHorizontalAlignment(SwingConstants.TRAILING);\r
601 FlowLayout flowLayout6 = new FlowLayout();\r
602 flowLayout6.setVgap(20);\r
603 flowLayout6.setAlignment(FlowLayout.LEFT);\r
604 jPanel3 = new JPanel();\r
605 jPanel3.setLayout(flowLayout6);\r
606 jPanel3.add(jLabel, null);\r
607 }\r
608 return jPanel3;\r
609 }\r
610\r
611 /**\r
612 check user input validity\r
613 \r
614 @param s package path\r
615 @param s1 workspace path\r
616 @param s2 installation path\r
617 @throws Exception\r
618 **/\r
619 private void locationcheck(String s, String s1, String s2) throws Exception {\r
620 if (new File(s).isFile() == false)\r
621 throw new Exception();\r
622 if (new File(s1).isDirectory() == false)\r
623 throw new Exception();\r
624 if (s2.startsWith(s1) == false)\r
625 throw new Exception();\r
626 }\r
627\r
628 \r
629 public void mouseClicked(MouseEvent arg0) {\r
630 // TODO Auto-generated method stub\r
631 int retVal = JOptionPane.showConfirmDialog(frame, "Are you sure to exit?", "Quit", JOptionPane.YES_NO_OPTION);\r
632 if (retVal == JOptionPane.YES_OPTION) {\r
633 this.dispose();\r
634 }\r
635 return;\r
636 }\r
637\r
638 public void mouseEntered(MouseEvent arg0) {\r
639 // TODO Auto-generated method stub\r
640\r
641 }\r
642\r
643 public void mouseExited(MouseEvent arg0) {\r
644 // TODO Auto-generated method stub\r
645\r
646 }\r
647\r
648 public void mousePressed(MouseEvent arg0) {\r
649 // TODO Auto-generated method stub\r
650\r
651 }\r
652\r
653 public void mouseReleased(MouseEvent arg0) {\r
654 // TODO Auto-generated method stub\r
655\r
656 }\r
657\r
658 /**\r
659 This method initializes jProgressBar \r
660 \r
661 @return javax.swing.JProgressBar \r
662 **/\r
663 private JProgressBar getJProgressBar() {\r
664 if (jProgressBar == null) {\r
665 jProgressBar = new JProgressBar();\r
666 jProgressBar.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);\r
667 jProgressBar.setVisible(false);\r
668 }\r
669 return jProgressBar;\r
670 }\r
671\r
672 \r
673\r
674} // @jve:decl-index=0:visual-constraint="24,82"\r
675\r
676/**\r
677Derived from WindowAdapter, Event adapter for windowClosing event\r
678 \r
679@since PackageEditor 1.0\r
680**/\r
681class GuiPkgInstallAdapter extends WindowAdapter {\r
682\r
683 private JFrame frame = null;\r
684\r
685 GuiPkgInstallAdapter(JFrame f) {\r
686 super();\r
687 frame = f;\r
688 }\r
689\r
690 /* (non-Javadoc)\r
691 * @see java.awt.event.WindowAdapter#windowClosing(java.awt.event.WindowEvent)\r
692 */\r
693 @Override\r
694 public void windowClosing(WindowEvent arg0) {\r
695 // TODO Auto-generated method stub\r
696 super.windowClosing(arg0);\r
697 int retVal = JOptionPane.showConfirmDialog(frame, "Are you sure to exit?", "Quit",\r
698 JOptionPane.YES_NO_OPTION);\r
699 if (retVal == JOptionPane.YES_OPTION) {\r
700 frame.dispose();\r
701 }\r
702\r
703 }\r
704\r
705}\r
706\r
707/**\r
708 Filter out some specific type of file\r
709 \r
710 @since PackageEditor 1.0\r
711**/\r
712class PkgFileFilter extends FileFilter {\r
713\r
714 ///\r
715 /// hash table used to store filter info.\r
716 ///\r
717 private Hashtable<String, String> filters = null;\r
718 \r
719\r
720 public PkgFileFilter() {\r
721 this.filters = new Hashtable<String, String>();\r
722 }\r
723 \r
724 /**\r
725 Create filter and add extension to hash table\r
726 \r
727 @param extension file extension string (e.g. "exe")\r
728 **/\r
729 public PkgFileFilter(String extension) {\r
730 this();\r
731 if(extension!=null) {\r
732 addExtension(extension);\r
733 }\r
734 \r
735 }\r
736\r
737 public PkgFileFilter(String[] fileFilters) {\r
738 this();\r
739 int i = 0; \r
740 while (i < fileFilters.length) {\r
741 // add filters one by one\r
742 addExtension(fileFilters[i]);\r
743 i++;\r
744 }\r
745 \r
746 }\r
747\r
748 \r
749 /* (non-Javadoc)\r
750 * @see javax.swing.filechooser.FileFilter#accept(java.io.File)\r
751 */\r
752 public boolean accept(File f) {\r
753 if (f != null) {\r
754 if (f.isDirectory()) {\r
755 return true;\r
756 }\r
757 \r
758 if (getExtension(f) != null && filters.get(getExtension(f)) != null) {\r
759 return true;\r
760 }\r
761 }\r
762 return false;\r
763 }\r
764\r
765 \r
766 /**\r
767 Get the extension string of file\r
768 \r
769 @param f target file\r
770 @return String\r
771 **/\r
772 public String getExtension(File f) {\r
773 if (f != null) {\r
774 int i = f.getName().lastIndexOf('.');\r
775 if (i>0 && i<f.getName().length()-1) {\r
776 return f.getName().substring(i+1).toLowerCase();\r
777 }\r
778 }\r
779 return null;\r
780 }\r
781\r
782 \r
783 /**\r
784 Add extension info into hash table\r
785 \r
786 @param ext extension string for file name\r
787 **/\r
788 public void addExtension(String ext) {\r
789 if (filters == null) {\r
790 filters = new Hashtable<String, String>(5);\r
791 }\r
792 filters.put(ext.toLowerCase(), "ext");\r
793 \r
794 }\r
795 \r
796 /* (non-Javadoc)\r
797 * @see javax.swing.filechooser.FileFilter#getDescription()\r
798 */\r
799 public String getDescription() {\r
800 return null;\r
801 }\r
802\r
803}\r
804\r