KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > edu > umd > cs > findbugs > gui2 > NewProjectWizard


1 /*
2  * FindBugs - Find Bugs in Java programs
3  * Copyright (C) 2006, University of Maryland
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307, USA
18  */

19
20 package edu.umd.cs.findbugs.gui2;
21
22 import java.awt.BorderLayout JavaDoc;
23 import java.awt.GridLayout JavaDoc;
24 import java.awt.Dimension JavaDoc;
25 import java.awt.GridBagConstraints JavaDoc;
26 import java.awt.GridBagLayout JavaDoc;
27 import java.awt.Insets JavaDoc;
28 import java.awt.event.ActionEvent JavaDoc;
29 import java.awt.event.ActionListener JavaDoc;
30 import java.io.File JavaDoc;
31 import java.io.FilenameFilter JavaDoc;
32
33 import javax.swing.Box JavaDoc;
34 import javax.swing.BoxLayout JavaDoc;
35 import javax.swing.DefaultListModel JavaDoc;
36 import javax.swing.JButton JavaDoc;
37 import javax.swing.JDialog JavaDoc;
38 import javax.swing.JFileChooser JavaDoc;
39 import javax.swing.JLabel JavaDoc;
40 import javax.swing.JList JavaDoc;
41 import javax.swing.JOptionPane JavaDoc;
42 import javax.swing.JPanel JavaDoc;
43 import javax.swing.JScrollPane JavaDoc;
44 import javax.swing.JSeparator JavaDoc;
45 import javax.swing.JTextField JavaDoc;
46 import javax.swing.SwingUtilities JavaDoc;
47 import javax.swing.border.EmptyBorder JavaDoc;
48 import javax.swing.event.DocumentEvent JavaDoc;
49 import javax.swing.event.DocumentListener JavaDoc;
50 import javax.swing.filechooser.FileFilter JavaDoc;
51
52 import edu.umd.cs.findbugs.Project;
53
54 /**
55  * The User Interface for creating a Project and editing it after the fact.
56  * @author Reuven
57  *
58  */

59 @SuppressWarnings JavaDoc("serial")
60 public class NewProjectWizard extends FBDialog
61 {
62     private EmptyBorder JavaDoc border = new EmptyBorder JavaDoc(5, 5, 5, 5);
63     
64     private Project project;
65     private boolean projectChanged = false;
66     private FBFileChooser chooser = new FBFileChooser();
67     private FileFilter JavaDoc directoryOrJar = new FileFilter JavaDoc()
68     {
69
70         @Override JavaDoc
71         public boolean accept(File JavaDoc f)
72         {
73             return f.isDirectory() || f.getName().endsWith(".jar") || f.getName().endsWith(".zip");
74         }
75
76         @Override JavaDoc
77         public String JavaDoc getDescription()
78         {
79             return edu.umd.cs.findbugs.L10N.getLocalString("file.jar_or_zip", "JAR or ZIP files (*.jar, *.zip)");
80         }
81     };
82     
83     private JList JavaDoc analyzeList = new JList JavaDoc();
84     private DefaultListModel JavaDoc analyzeModel = new DefaultListModel JavaDoc();
85
86     private JList JavaDoc auxList = new JList JavaDoc();
87     private DefaultListModel JavaDoc auxModel = new DefaultListModel JavaDoc();
88     
89     private JList JavaDoc sourceList = new JList JavaDoc();
90     private DefaultListModel JavaDoc sourceModel = new DefaultListModel JavaDoc();
91     
92     private JButton JavaDoc finishButton = new JButton JavaDoc(edu.umd.cs.findbugs.L10N.getLocalString("dlg.finish_btn", "Finish"));
93     private JButton JavaDoc cancelButton = new JButton JavaDoc(edu.umd.cs.findbugs.L10N.getLocalString("dlg.cancel_btn", "Cancel"));
94     
95     private JPanel JavaDoc[] wizardPanels = new JPanel JavaDoc[3];
96     private int currentPanel;
97     
98     public NewProjectWizard()
99     {
100         this(null);
101     }
102     
103     /**
104      * @param curProject the project to populate from, or null to start a new one
105      */

106     public NewProjectWizard(Project curProject)
107     {
108         project = curProject;
109         
110         JPanel JavaDoc mainPanel = new JPanel JavaDoc();
111         mainPanel.setLayout(new GridLayout JavaDoc(3,1));
112         
113         
114         wizardPanels[0] = createFilePanel(edu.umd.cs.findbugs.L10N.getLocalString("dlg.class_jars_dirs_lbl", "Class jars and directories to analyze:"),
115                 analyzeList, analyzeModel, JFileChooser.FILES_AND_DIRECTORIES, directoryOrJar);
116         
117         wizardPanels[1] = createFilePanel(edu.umd.cs.findbugs.L10N.getLocalString("dlg.aux_class_lbl", "Auxiliary class locations:"),
118                 auxList, auxModel, JFileChooser.FILES_AND_DIRECTORIES, directoryOrJar);
119         
120         wizardPanels[2] = createFilePanel(edu.umd.cs.findbugs.L10N.getLocalString("dlg.source_dirs_lbl", "Source directories:"), sourceList, sourceModel, JFileChooser.FILES_AND_DIRECTORIES, null);
121                 
122         JPanel JavaDoc buttons = new JPanel JavaDoc();
123         buttons.setLayout(new BoxLayout JavaDoc(buttons, BoxLayout.X_AXIS));
124         buttons.add(Box.createHorizontalStrut(5));
125         buttons.add(finishButton);
126         buttons.add(Box.createHorizontalStrut(5));
127         buttons.add(cancelButton);
128         finishButton.addActionListener(new ActionListener JavaDoc()
129         {
130             public void actionPerformed(ActionEvent JavaDoc evt)
131             {
132                     for (int i = 0; i < analyzeModel.getSize(); i++){
133                     File JavaDoc temp = new File JavaDoc((String JavaDoc)analyzeModel.get(i));
134                     if(!(temp.exists() && (temp.isDirectory() ||
135                             temp.getName().endsWith(".jar") || temp.getName().endsWith(".zip")))){
136                         JOptionPane.showMessageDialog(NewProjectWizard.this,
137                                 temp.getName()+edu.umd.cs.findbugs.L10N.getLocalString("dlg.invalid_txt", " is invalid."), edu.umd.cs.findbugs.L10N.getLocalString("dlg.error_ttl", "Error"), JOptionPane.ERROR_MESSAGE);
138                         return;
139                     }
140                 }
141             
142                 
143                 for (int i = 0; i < auxModel.getSize(); i++){
144                     File JavaDoc temp = new File JavaDoc((String JavaDoc)auxModel.get(i));
145                     if(!(temp.exists() && (temp.isDirectory() ||
146                             temp.getName().endsWith(".jar") || temp.getName().endsWith(".zip")))){
147                         JOptionPane.showMessageDialog(NewProjectWizard.this,
148                                 temp.getName()+edu.umd.cs.findbugs.L10N.getLocalString("dlg.invalid_txt", " is invalid."), edu.umd.cs.findbugs.L10N.getLocalString("dlg.error_ttl", "Error"), JOptionPane.ERROR_MESSAGE);
149                         return;
150                     }
151                 }
152                 
153                 Project p = (project == null ? new Project() : project);
154                 for (int i = 0; i < analyzeModel.getSize(); i++)
155                     p.addFile((String JavaDoc) analyzeModel.get(i));
156                 for (int i = 0; i < auxModel.getSize(); i++)
157                     p.addAuxClasspathEntry((String JavaDoc) auxModel.get(i));
158                 for (int i = 0; i < sourceModel.getSize(); i++)
159                     p.addSourceDir((String JavaDoc) sourceModel.get(i));
160                 
161                 if (project == null || (projectChanged && JOptionPane.showConfirmDialog(NewProjectWizard.this, edu.umd.cs.findbugs.L10N.getLocalString("dlg.project_settings_changed_lbl", "Project settings have been changed. Perform a new analysis with the changed files?"), edu.umd.cs.findbugs.L10N.getLocalString("dlg.redo_analysis_question_lbl", "Redo analysis?"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION))
162                     new AnalyzingDialog(p);
163                 
164                 dispose();
165             }
166         });
167         cancelButton.addActionListener(new ActionListener JavaDoc()
168         {
169             public void actionPerformed(ActionEvent JavaDoc evt)
170             {
171                 dispose();
172             }
173         });
174         
175         JPanel JavaDoc south = new JPanel JavaDoc(new BorderLayout JavaDoc());
176         south.add(new JSeparator JavaDoc(), BorderLayout.NORTH);
177         south.add(buttons, BorderLayout.EAST);
178         
179         
180         if (curProject != null)
181         {
182             for (String JavaDoc i : curProject.getFileList())
183                 analyzeModel.addElement(i);
184             for (String JavaDoc i : curProject.getAuxClasspathEntryList())
185                 auxModel.addElement(i);
186             for (String JavaDoc i : curProject.getSourceDirList())
187                 sourceModel.addElement(i);
188         }
189         
190         //loadPanel(0);
191
loadAllPanels(mainPanel);
192         add(mainPanel, BorderLayout.CENTER);
193         add(south, BorderLayout.SOUTH);
194         
195         setDefaultCloseOperation(DISPOSE_ON_CLOSE);
196         
197 // pack();
198
setTitle(edu.umd.cs.findbugs.L10N.getLocalString("dlg.new_item", "New Project"));
199         setModal(true);
200         setVisible(true);
201     }
202
203     /**
204      * @param label TODO
205      *
206      */

207     private JPanel JavaDoc createFilePanel(String JavaDoc label, final JList JavaDoc list,
208             final DefaultListModel JavaDoc listModel, final int fileSelectionMode, final FileFilter JavaDoc filter) {
209         JPanel JavaDoc myPanel = new JPanel JavaDoc(new GridBagLayout JavaDoc());
210         GridBagConstraints JavaDoc gbc = new GridBagConstraints JavaDoc();
211         gbc.gridx = 0;
212         gbc.gridy = 0;
213         gbc.gridheight = 1;
214         gbc.gridwidth = 2;
215         gbc.weightx = 1;
216         gbc.weighty = 0;
217         gbc.anchor = GridBagConstraints.WEST;
218         myPanel.add(new JLabel JavaDoc(label), gbc);
219         gbc.gridx = 0;
220         gbc.gridy = 1;
221         gbc.gridheight = 3;
222         gbc.gridwidth = 1;
223         gbc.weightx = 1;
224         gbc.weighty = 1;
225         gbc.fill = GridBagConstraints.BOTH;
226         myPanel.add(new JScrollPane JavaDoc(list), gbc);
227         list.setModel(listModel);
228         gbc.gridx = 1;
229         gbc.gridy = 1;
230         gbc.gridheight = 1;
231         gbc.gridwidth = 1;
232         gbc.weightx = 0;
233         gbc.weighty = 0;
234         gbc.fill = GridBagConstraints.HORIZONTAL;
235         final JButton JavaDoc addButton = new JButton JavaDoc(edu.umd.cs.findbugs.L10N.getLocalString("dlg.add_btn", "Add"));
236         myPanel.add(addButton, gbc);
237         gbc.gridx = 1;
238         gbc.gridy = 2;
239         gbc.insets = new Insets JavaDoc(5, 0, 0, 0);
240         final JButton JavaDoc removeButton = new JButton JavaDoc(edu.umd.cs.findbugs.L10N.getLocalString("dlg.remove_btn", "Remove"));
241         myPanel.add(removeButton, gbc);
242         gbc.gridx = 1;
243         gbc.gridy = 3;
244         gbc.insets = new Insets JavaDoc(0, 0, 0, 0);
245         myPanel.add(Box.createGlue(), gbc);
246         myPanel.setBorder(border);
247         addButton.addActionListener(new ActionListener JavaDoc()
248         {
249             public void actionPerformed(ActionEvent JavaDoc evt)
250             {
251                 chooser.setFileSelectionMode(fileSelectionMode);
252                 chooser.setFileFilter(filter);
253                 if (chooser.showOpenDialog(NewProjectWizard.this) == JFileChooser.APPROVE_OPTION)
254                 {
255                     listModel.addElement(chooser.getSelectedFile().getAbsolutePath());
256                     projectChanged = true;
257                 }
258             }
259         });
260         removeButton.addActionListener(new ActionListener JavaDoc()
261         {
262             public void actionPerformed(ActionEvent JavaDoc evt)
263             {
264                 if (list.getSelectedValues().length > 0)
265                     projectChanged = true;
266                 for (Object JavaDoc i : list.getSelectedValues())
267                     listModel.removeElement(i);
268             }
269         });
270         return myPanel;
271     }
272     /*
273     private void loadPanel(final int index)
274     {
275         SwingUtilities.invokeLater(new Runnable()
276         {
277             public void run()
278             {
279                 remove(wizardPanels[currentPanel]);
280                 currentPanel = index;
281                 add(wizardPanels[index], BorderLayout.CENTER);
282                 backButton.setEnabled(index > 0);
283                 nextButton.setEnabled(index < wizardPanels.length - 1);
284                 validate();
285                 repaint();
286             }
287         });
288     }
289     */

290     private void loadAllPanels(final JPanel JavaDoc mainPanel)
291     {
292         SwingUtilities.invokeLater(new Runnable JavaDoc()
293         {
294             public void run()
295             {
296                 int numPanels = wizardPanels.length;
297                 for(int i=0; i<numPanels; i++)
298                     mainPanel.remove(wizardPanels[i]);
299                 for(int i=0; i<numPanels; i++)
300                     mainPanel.add(wizardPanels[i]);
301                 validate();
302                 repaint();
303             }
304         });
305     }
306     
307     public void addNotify(){
308         super.addNotify();
309         
310         for(JPanel JavaDoc panel : wizardPanels){
311             setFontSizeHelper(panel.getComponents(), Driver.getFontSize());
312         }
313         
314         pack();
315         
316         int width = super.getWidth();
317         
318         if(width < 600)
319             width = 600;
320         setSize(new Dimension JavaDoc(width, 500));
321         setLocationRelativeTo(MainFrame.getInstance());
322     }
323 }
Popular Tags