KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > launch4j > formimpl > ClassPathFormImpl


1 /*
2     Launch4j (http://launch4j.sourceforge.net/)
3     Cross-platform Java application wrapper for creating Windows native executables.
4
5     Copyright (C) 2004, 2006 Grzegorz Kowal
6
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     GNU General Public License for more details.
16
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 */

21
22 /*
23  * Created on May 1, 2006
24  */

25 package net.sf.launch4j.formimpl;
26
27 import java.awt.event.ActionEvent JavaDoc;
28 import java.awt.event.ActionListener JavaDoc;
29 import java.io.File JavaDoc;
30 import java.io.IOException JavaDoc;
31 import java.util.jar.Attributes JavaDoc;
32 import java.util.jar.JarFile JavaDoc;
33
34 import javax.swing.DefaultListModel JavaDoc;
35 import javax.swing.JFileChooser JavaDoc;
36 import javax.swing.JTextField JavaDoc;
37 import javax.swing.ListSelectionModel JavaDoc;
38 import javax.swing.event.ChangeEvent JavaDoc;
39 import javax.swing.event.ChangeListener JavaDoc;
40 import javax.swing.event.ListSelectionEvent JavaDoc;
41 import javax.swing.event.ListSelectionListener JavaDoc;
42
43 import net.sf.launch4j.FileChooserFilter;
44 import net.sf.launch4j.binding.Bindings;
45 import net.sf.launch4j.binding.Validator;
46 import net.sf.launch4j.config.ClassPath;
47 import net.sf.launch4j.form.ClassPathForm;
48
49 /**
50  * @author Copyright (C) 2006 Grzegorz Kowal
51  */

52 public class ClassPathFormImpl extends ClassPathForm {
53     private final JFileChooser JavaDoc _fileChooser;
54     private final FileChooserFilter _filter
55             = new FileChooserFilter("Executable jar", ".jar");
56
57     public ClassPathFormImpl(Bindings bindings, JFileChooser JavaDoc fc) {
58         bindings.addOptComponent("classPath", ClassPath.class, _classpathCheck)
59                 .add("classPath.mainClass", _mainclassField)
60                 .add("classPath.paths", _classpathList);
61         _fileChooser = fc;
62
63         ClasspathCheckListener cpl = new ClasspathCheckListener();
64         _classpathCheck.addChangeListener(cpl);
65         cpl.stateChanged(null);
66
67         _classpathList.setModel(new DefaultListModel JavaDoc());
68         _classpathList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
69         _classpathList.addListSelectionListener(new ClasspathSelectionListener());
70
71         _newClasspathButton.addActionListener(new NewClasspathListener());
72         _acceptClasspathButton.addActionListener(
73                 new AcceptClasspathListener(_classpathField));
74         _removeClasspathButton.addActionListener(new RemoveClasspathListener());
75         _importClasspathButton.addActionListener(new ImportClasspathListener());
76         _classpathUpButton.addActionListener(new MoveUpListener());
77         _classpathDownButton.addActionListener(new MoveDownListener());
78     }
79
80     private class ClasspathCheckListener implements ChangeListener JavaDoc {
81         public void stateChanged(ChangeEvent JavaDoc e) {
82             boolean on = _classpathCheck.isSelected();
83             _importClasspathButton.setEnabled(on);
84             _classpathUpButton.setEnabled(on);
85             _classpathDownButton.setEnabled(on);
86             _classpathField.setEnabled(on);
87             _newClasspathButton.setEnabled(on);
88             _acceptClasspathButton.setEnabled(on);
89             _removeClasspathButton.setEnabled(on);
90         }
91     }
92
93     private class NewClasspathListener implements ActionListener JavaDoc {
94         public void actionPerformed(ActionEvent JavaDoc e) {
95             _classpathList.clearSelection();
96             _classpathField.setText("");
97             _classpathField.requestFocusInWindow();
98         }
99     }
100
101     private class AcceptClasspathListener extends AbstractAcceptListener {
102         public AcceptClasspathListener(JTextField JavaDoc f) {
103             super(f, true);
104         }
105
106         public void actionPerformed(ActionEvent JavaDoc e) {
107             String JavaDoc cp = getText();
108             if (Validator.isEmpty(cp)) {
109                 signalViolation(Messages.getString("specifyClassPath"));
110                 return;
111             }
112             DefaultListModel JavaDoc model = (DefaultListModel JavaDoc) _classpathList.getModel();
113             if (_classpathList.isSelectionEmpty()) {
114                 model.addElement(cp);
115                 clear();
116             } else {
117                 model.setElementAt(cp, _classpathList.getSelectedIndex());
118             }
119         }
120     }
121
122     private class ClasspathSelectionListener implements ListSelectionListener JavaDoc {
123         public void valueChanged(ListSelectionEvent JavaDoc e) {
124             if (e.getValueIsAdjusting()) {
125                 return;
126             }
127             if (_classpathList.isSelectionEmpty()) {
128                 _classpathField.setText("");
129             } else {
130                 _classpathField.setText((String JavaDoc) _classpathList.getSelectedValue());
131             }
132             _classpathField.requestFocusInWindow();
133         }
134     }
135     
136     private class RemoveClasspathListener implements ActionListener JavaDoc {
137         public void actionPerformed(ActionEvent JavaDoc e) {
138             if (_classpathList.isSelectionEmpty()
139                     || !MainFrame.getInstance().confirm(
140                             Messages.getString("confirmClassPathRemoval"))) {
141                 return;
142             }
143             DefaultListModel JavaDoc model = (DefaultListModel JavaDoc) _classpathList.getModel();
144             while (!_classpathList.isSelectionEmpty()) {
145                 model.remove(_classpathList.getSelectedIndex());
146             }
147         }
148     }
149     
150     private class MoveUpListener implements ActionListener JavaDoc {
151         public void actionPerformed(ActionEvent JavaDoc e) {
152             int x = _classpathList.getSelectedIndex();
153             if (x < 1) {
154                 return;
155             }
156             DefaultListModel JavaDoc model = (DefaultListModel JavaDoc) _classpathList.getModel();
157             Object JavaDoc o = model.get(x - 1);
158             model.set(x - 1, model.get(x));
159             model.set(x, o);
160             _classpathList.setSelectedIndex(x - 1);
161         }
162     }
163     
164     private class MoveDownListener implements ActionListener JavaDoc {
165         public void actionPerformed(ActionEvent JavaDoc e) {
166             DefaultListModel JavaDoc model = (DefaultListModel JavaDoc) _classpathList.getModel();
167             int x = _classpathList.getSelectedIndex();
168             if (x == -1 || x >= model.getSize() - 1) {
169                 return;
170             }
171             Object JavaDoc o = model.get(x + 1);
172             model.set(x + 1, model.get(x));
173             model.set(x, o);
174             _classpathList.setSelectedIndex(x + 1);
175         }
176     }
177
178     private class ImportClasspathListener implements ActionListener JavaDoc {
179         public void actionPerformed(ActionEvent JavaDoc e) {
180             try {
181                 _fileChooser.setFileFilter(_filter);
182                 _fileChooser.setSelectedFile(new File JavaDoc(""));
183                 if (_fileChooser.showOpenDialog(MainFrame.getInstance())
184                         == JFileChooser.APPROVE_OPTION) {
185                     JarFile JavaDoc jar = new JarFile JavaDoc(_fileChooser.getSelectedFile());
186                     if (jar.getManifest() == null) {
187                         jar.close();
188                         MainFrame.getInstance().info(Messages.getString("noManifest"));
189                         return;
190                     }
191                     Attributes JavaDoc attr = jar.getManifest().getMainAttributes();
192                     String JavaDoc mainClass = (String JavaDoc) attr.getValue("Main-Class");
193                     String JavaDoc classPath = (String JavaDoc) attr.getValue("Class-Path");
194                     jar.close();
195                     _mainclassField.setText(mainClass != null ? mainClass : "");
196                     DefaultListModel JavaDoc model = new DefaultListModel JavaDoc();
197                     if (classPath != null) {
198                         String JavaDoc[] paths = classPath.split(" ");
199                         for (int i = 0; i < paths.length; i++) {
200                             model.addElement(paths[i]);
201                         }
202                     }
203                     _classpathList.setModel(model);
204                 }
205             } catch (IOException JavaDoc ex) {
206                 MainFrame.getInstance().warn(ex.getMessage());
207             }
208         }
209     }
210 }
211
Popular Tags