1 19 20 package edu.umd.cs.findbugs.gui2; 21 22 import java.awt.BorderLayout ; 23 import java.awt.GridLayout ; 24 import java.awt.Dimension ; 25 import java.awt.GridBagConstraints ; 26 import java.awt.GridBagLayout ; 27 import java.awt.Insets ; 28 import java.awt.event.ActionEvent ; 29 import java.awt.event.ActionListener ; 30 import java.io.File ; 31 import java.io.FilenameFilter ; 32 33 import javax.swing.Box ; 34 import javax.swing.BoxLayout ; 35 import javax.swing.DefaultListModel ; 36 import javax.swing.JButton ; 37 import javax.swing.JDialog ; 38 import javax.swing.JFileChooser ; 39 import javax.swing.JLabel ; 40 import javax.swing.JList ; 41 import javax.swing.JOptionPane ; 42 import javax.swing.JPanel ; 43 import javax.swing.JScrollPane ; 44 import javax.swing.JSeparator ; 45 import javax.swing.JTextField ; 46 import javax.swing.SwingUtilities ; 47 import javax.swing.border.EmptyBorder ; 48 import javax.swing.event.DocumentEvent ; 49 import javax.swing.event.DocumentListener ; 50 import javax.swing.filechooser.FileFilter ; 51 52 import edu.umd.cs.findbugs.Project; 53 54 59 @SuppressWarnings ("serial") 60 public class NewProjectWizard extends FBDialog 61 { 62 private EmptyBorder border = new EmptyBorder (5, 5, 5, 5); 63 64 private Project project; 65 private boolean projectChanged = false; 66 private FBFileChooser chooser = new FBFileChooser(); 67 private FileFilter directoryOrJar = new FileFilter () 68 { 69 70 @Override 71 public boolean accept(File f) 72 { 73 return f.isDirectory() || f.getName().endsWith(".jar") || f.getName().endsWith(".zip"); 74 } 75 76 @Override 77 public String 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 analyzeList = new JList (); 84 private DefaultListModel analyzeModel = new DefaultListModel (); 85 86 private JList auxList = new JList (); 87 private DefaultListModel auxModel = new DefaultListModel (); 88 89 private JList sourceList = new JList (); 90 private DefaultListModel sourceModel = new DefaultListModel (); 91 92 private JButton finishButton = new JButton (edu.umd.cs.findbugs.L10N.getLocalString("dlg.finish_btn", "Finish")); 93 private JButton cancelButton = new JButton (edu.umd.cs.findbugs.L10N.getLocalString("dlg.cancel_btn", "Cancel")); 94 95 private JPanel [] wizardPanels = new JPanel [3]; 96 private int currentPanel; 97 98 public NewProjectWizard() 99 { 100 this(null); 101 } 102 103 106 public NewProjectWizard(Project curProject) 107 { 108 project = curProject; 109 110 JPanel mainPanel = new JPanel (); 111 mainPanel.setLayout(new GridLayout (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 buttons = new JPanel (); 123 buttons.setLayout(new BoxLayout (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 () 129 { 130 public void actionPerformed(ActionEvent evt) 131 { 132 for (int i = 0; i < analyzeModel.getSize(); i++){ 133 File temp = new File ((String )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 temp = new File ((String )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 ) analyzeModel.get(i)); 156 for (int i = 0; i < auxModel.getSize(); i++) 157 p.addAuxClasspathEntry((String ) auxModel.get(i)); 158 for (int i = 0; i < sourceModel.getSize(); i++) 159 p.addSourceDir((String ) 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 () 168 { 169 public void actionPerformed(ActionEvent evt) 170 { 171 dispose(); 172 } 173 }); 174 175 JPanel south = new JPanel (new BorderLayout ()); 176 south.add(new JSeparator (), BorderLayout.NORTH); 177 south.add(buttons, BorderLayout.EAST); 178 179 180 if (curProject != null) 181 { 182 for (String i : curProject.getFileList()) 183 analyzeModel.addElement(i); 184 for (String i : curProject.getAuxClasspathEntryList()) 185 auxModel.addElement(i); 186 for (String i : curProject.getSourceDirList()) 187 sourceModel.addElement(i); 188 } 189 190 loadAllPanels(mainPanel); 192 add(mainPanel, BorderLayout.CENTER); 193 add(south, BorderLayout.SOUTH); 194 195 setDefaultCloseOperation(DISPOSE_ON_CLOSE); 196 197 setTitle(edu.umd.cs.findbugs.L10N.getLocalString("dlg.new_item", "New Project")); 199 setModal(true); 200 setVisible(true); 201 } 202 203 207 private JPanel createFilePanel(String label, final JList list, 208 final DefaultListModel listModel, final int fileSelectionMode, final FileFilter filter) { 209 JPanel myPanel = new JPanel (new GridBagLayout ()); 210 GridBagConstraints gbc = new GridBagConstraints (); 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 (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 (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 addButton = new JButton (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 (5, 0, 0, 0); 240 final JButton removeButton = new JButton (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 (0, 0, 0, 0); 245 myPanel.add(Box.createGlue(), gbc); 246 myPanel.setBorder(border); 247 addButton.addActionListener(new ActionListener () 248 { 249 public void actionPerformed(ActionEvent 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 () 261 { 262 public void actionPerformed(ActionEvent evt) 263 { 264 if (list.getSelectedValues().length > 0) 265 projectChanged = true; 266 for (Object i : list.getSelectedValues()) 267 listModel.removeElement(i); 268 } 269 }); 270 return myPanel; 271 } 272 290 private void loadAllPanels(final JPanel mainPanel) 291 { 292 SwingUtilities.invokeLater(new Runnable () 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 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 (width, 500)); 321 setLocationRelativeTo(MainFrame.getInstance()); 322 } 323 } | Popular Tags |