1 19 20 package org.netbeans.modules.java.j2seproject.ui.customizer; 21 22 import java.io.File ; 23 import javax.swing.event.ListDataEvent ; 24 import javax.swing.event.ListDataListener ; 25 import org.netbeans.spi.java.project.support.ui.IncludeExcludeVisualizer; 26 import org.openide.DialogDescriptor; 27 import org.openide.DialogDisplayer; 28 import org.openide.NotifyDescriptor; 29 import org.openide.filesystems.FileObject; 30 import org.openide.filesystems.FileUtil; 31 import org.openide.util.HelpCtx; 32 import org.openide.util.NbBundle; 33 34 38 public class CustomizerSources extends javax.swing.JPanel implements HelpCtx.Provider { 39 40 private final J2SEProjectProperties uiProperties; 41 42 public CustomizerSources( J2SEProjectProperties uiProperties ) { 43 this.uiProperties = uiProperties; 44 initComponents(); 45 jScrollPane1.getViewport().setBackground( sourceRoots.getBackground() ); 46 jScrollPane2.getViewport().setBackground( testRoots.getBackground() ); 47 48 sourceRoots.setModel( uiProperties.SOURCE_ROOTS_MODEL ); 49 testRoots.setModel( uiProperties.TEST_ROOTS_MODEL ); 50 sourceRoots.getTableHeader().setReorderingAllowed(false); 51 testRoots.getTableHeader().setReorderingAllowed(false); 52 53 FileObject projectFolder = uiProperties.getProject().getProjectDirectory(); 54 File pf = FileUtil.toFile( projectFolder ); 55 this.projectLocation.setText( pf == null ? "" : pf.getPath() ); 57 58 J2SESourceRootsUi.EditMediator emSR = J2SESourceRootsUi.registerEditMediator( 59 uiProperties.getProject(), 60 uiProperties.getProject().getSourceRoots(), 61 sourceRoots, 62 addSourceRoot, 63 removeSourceRoot, 64 upSourceRoot, 65 downSourceRoot); 66 67 J2SESourceRootsUi.EditMediator emTSR = J2SESourceRootsUi.registerEditMediator( 68 uiProperties.getProject(), 69 uiProperties.getProject().getTestSourceRoots(), 70 testRoots, 71 addTestRoot, 72 removeTestRoot, 73 upTestRoot, 74 downTestRoot); 75 76 emSR.setRelatedEditMediator( emTSR ); 77 emTSR.setRelatedEditMediator( emSR ); 78 this.sourceLevel.setEditable(false); 79 this.sourceLevel.setModel(uiProperties.JAVAC_SOURCE_MODEL); 80 this.sourceLevel.setRenderer(uiProperties.JAVAC_SOURCE_RENDERER); 81 uiProperties.JAVAC_SOURCE_MODEL.addListDataListener(new ListDataListener () { 82 public void intervalAdded(ListDataEvent e) { 83 enableSourceLevel (); 84 } 85 86 public void intervalRemoved(ListDataEvent e) { 87 enableSourceLevel (); 88 } 89 90 public void contentsChanged(ListDataEvent e) { 91 enableSourceLevel (); 92 } 93 }); 94 enableSourceLevel (); 95 } 96 97 public HelpCtx getHelpCtx() { 98 return new HelpCtx (CustomizerSources.class); 99 } 100 101 private void enableSourceLevel () { 102 this.sourceLevel.setEnabled(sourceLevel.getItemCount()>0); 103 } 104 105 110 private void initComponents() { 112 java.awt.GridBagConstraints gridBagConstraints; 113 114 jLabel1 = new javax.swing.JLabel (); 115 projectLocation = new javax.swing.JTextField (); 116 sourceRootsPanel = new javax.swing.JPanel (); 117 jLabel2 = new javax.swing.JLabel (); 118 jScrollPane1 = new javax.swing.JScrollPane (); 119 sourceRoots = new javax.swing.JTable (); 120 addSourceRoot = new javax.swing.JButton (); 121 removeSourceRoot = new javax.swing.JButton (); 122 upSourceRoot = new javax.swing.JButton (); 123 downSourceRoot = new javax.swing.JButton (); 124 testRootsPanel = new javax.swing.JPanel (); 125 jLabel3 = new javax.swing.JLabel (); 126 jScrollPane2 = new javax.swing.JScrollPane (); 127 testRoots = new javax.swing.JTable (); 128 addTestRoot = new javax.swing.JButton (); 129 removeTestRoot = new javax.swing.JButton (); 130 upTestRoot = new javax.swing.JButton (); 131 downTestRoot = new javax.swing.JButton (); 132 jPanel1 = new javax.swing.JPanel (); 133 jLabel4 = new javax.swing.JLabel (); 134 sourceLevel = new javax.swing.JComboBox (); 135 includeExcludeButton = new javax.swing.JButton (); 136 137 setLayout(new java.awt.GridBagLayout ()); 138 139 jLabel1.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_ProjectFolder").charAt(0)); 140 jLabel1.setLabelFor(projectLocation); 141 java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle"); jLabel1.setText(bundle.getString("CTL_ProjectFolder")); gridBagConstraints = new java.awt.GridBagConstraints (); 144 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 145 gridBagConstraints.insets = new java.awt.Insets (0, 0, 0, 12); 146 add(jLabel1, gridBagConstraints); 147 148 projectLocation.setEditable(false); 149 gridBagConstraints = new java.awt.GridBagConstraints (); 150 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 151 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 152 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 153 gridBagConstraints.weightx = 1.0; 154 add(projectLocation, gridBagConstraints); 155 projectLocation.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_projectLocation")); 157 sourceRootsPanel.setLayout(new java.awt.GridBagLayout ()); 158 159 jLabel2.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_SourceRoots").charAt(0)); 160 jLabel2.setLabelFor(sourceRoots); 161 jLabel2.setText(bundle.getString("CTL_SourceRoots")); gridBagConstraints = new java.awt.GridBagConstraints (); 163 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 164 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 165 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 166 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 0); 167 sourceRootsPanel.add(jLabel2, gridBagConstraints); 168 169 sourceRoots.setModel(new javax.swing.table.DefaultTableModel ( 170 new Object [][] { 171 {null, null}, 172 {null, null}, 173 {null, null}, 174 {null, null} 175 }, 176 new String [] { 177 "Package Folder", "Label" 178 } 179 ) { 180 Class [] types = new Class [] { 181 java.lang.Object .class, java.lang.String .class 182 }; 183 boolean[] canEdit = new boolean [] { 184 false, false 185 }; 186 187 public Class getColumnClass(int columnIndex) { 188 return types [columnIndex]; 189 } 190 191 public boolean isCellEditable(int rowIndex, int columnIndex) { 192 return canEdit [columnIndex]; 193 } 194 }); 195 jScrollPane1.setViewportView(sourceRoots); 196 sourceRoots.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_sourceRoots")); 198 gridBagConstraints = new java.awt.GridBagConstraints (); 199 gridBagConstraints.gridx = 0; 200 gridBagConstraints.gridy = 1; 201 gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER; 202 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 203 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 204 gridBagConstraints.weightx = 1.0; 205 gridBagConstraints.weighty = 1.0; 206 gridBagConstraints.insets = new java.awt.Insets (0, 0, 0, 12); 207 sourceRootsPanel.add(jScrollPane1, gridBagConstraints); 208 209 addSourceRoot.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_AddSourceRoot").charAt(0)); 210 addSourceRoot.setText(bundle.getString("CTL_AddSourceRoot")); gridBagConstraints = new java.awt.GridBagConstraints (); 212 gridBagConstraints.gridx = 1; 213 gridBagConstraints.gridy = 1; 214 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 215 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 216 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 217 sourceRootsPanel.add(addSourceRoot, gridBagConstraints); 218 addSourceRoot.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_addSourceRoot")); 220 removeSourceRoot.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_RemoveSourceRoot").charAt(0)); 221 removeSourceRoot.setText(bundle.getString("CTL_RemoveSourceRoot")); gridBagConstraints = new java.awt.GridBagConstraints (); 223 gridBagConstraints.gridx = 1; 224 gridBagConstraints.gridy = 2; 225 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 226 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 227 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 228 gridBagConstraints.insets = new java.awt.Insets (6, 0, 0, 0); 229 sourceRootsPanel.add(removeSourceRoot, gridBagConstraints); 230 removeSourceRoot.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_removeSourceRoot")); 232 upSourceRoot.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_UpSourceRoot").charAt(0)); 233 upSourceRoot.setText(bundle.getString("CTL_UpSourceRoot")); gridBagConstraints = new java.awt.GridBagConstraints (); 235 gridBagConstraints.gridx = 1; 236 gridBagConstraints.gridy = 3; 237 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 238 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 239 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 240 gridBagConstraints.insets = new java.awt.Insets (12, 0, 0, 0); 241 sourceRootsPanel.add(upSourceRoot, gridBagConstraints); 242 upSourceRoot.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_upSourceRoot")); 244 downSourceRoot.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_DownSourceRoot").charAt(0)); 245 downSourceRoot.setText(bundle.getString("CTL_DownSourceRoot")); gridBagConstraints = new java.awt.GridBagConstraints (); 247 gridBagConstraints.gridx = 1; 248 gridBagConstraints.gridy = 4; 249 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 250 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 251 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 252 gridBagConstraints.insets = new java.awt.Insets (6, 0, 0, 0); 253 sourceRootsPanel.add(downSourceRoot, gridBagConstraints); 254 downSourceRoot.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_downSourceRoot")); 256 gridBagConstraints = new java.awt.GridBagConstraints (); 257 gridBagConstraints.gridx = 0; 258 gridBagConstraints.gridy = 1; 259 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 260 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 261 gridBagConstraints.weightx = 1.0; 262 gridBagConstraints.weighty = 0.45; 263 gridBagConstraints.insets = new java.awt.Insets (12, 0, 0, 0); 264 add(sourceRootsPanel, gridBagConstraints); 265 266 testRootsPanel.setLayout(new java.awt.GridBagLayout ()); 267 268 jLabel3.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_TestRoots").charAt(0)); 269 jLabel3.setLabelFor(testRoots); 270 jLabel3.setText(bundle.getString("CTL_TestRoots")); gridBagConstraints = new java.awt.GridBagConstraints (); 272 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 273 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 274 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 275 gridBagConstraints.weightx = 1.0; 276 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 0); 277 testRootsPanel.add(jLabel3, gridBagConstraints); 278 279 testRoots.setModel(new javax.swing.table.DefaultTableModel ( 280 new Object [][] { 281 {null, null}, 282 {null, null}, 283 {null, null}, 284 {null, null} 285 }, 286 new String [] { 287 "Package Folder", "Label" 288 } 289 ) { 290 Class [] types = new Class [] { 291 java.lang.Object .class, java.lang.String .class 292 }; 293 boolean[] canEdit = new boolean [] { 294 false, false 295 }; 296 297 public Class getColumnClass(int columnIndex) { 298 return types [columnIndex]; 299 } 300 301 public boolean isCellEditable(int rowIndex, int columnIndex) { 302 return canEdit [columnIndex]; 303 } 304 }); 305 jScrollPane2.setViewportView(testRoots); 306 testRoots.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_testRoots")); 308 gridBagConstraints = new java.awt.GridBagConstraints (); 309 gridBagConstraints.gridx = 0; 310 gridBagConstraints.gridy = 1; 311 gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER; 312 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 313 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 314 gridBagConstraints.weightx = 1.0; 315 gridBagConstraints.weighty = 1.0; 316 testRootsPanel.add(jScrollPane2, gridBagConstraints); 317 318 addTestRoot.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_AddTestRoot").charAt(0)); 319 addTestRoot.setText(bundle.getString("CTL_AddTestRoot")); gridBagConstraints = new java.awt.GridBagConstraints (); 321 gridBagConstraints.gridx = 1; 322 gridBagConstraints.gridy = 1; 323 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 324 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 325 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 326 gridBagConstraints.insets = new java.awt.Insets (0, 12, 6, 0); 327 testRootsPanel.add(addTestRoot, gridBagConstraints); 328 addTestRoot.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_addTestRoot")); 330 removeTestRoot.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_RemoveTestRoot").charAt(0)); 331 removeTestRoot.setText(bundle.getString("CTL_RemoveTestRoot")); gridBagConstraints = new java.awt.GridBagConstraints (); 333 gridBagConstraints.gridx = 1; 334 gridBagConstraints.gridy = 2; 335 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 336 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 337 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 338 gridBagConstraints.insets = new java.awt.Insets (0, 12, 12, 0); 339 testRootsPanel.add(removeTestRoot, gridBagConstraints); 340 removeTestRoot.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_removeTestRoot")); 342 upTestRoot.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_UpTestRoot").charAt(0)); 343 upTestRoot.setText(bundle.getString("CTL_UpTestRoot")); gridBagConstraints = new java.awt.GridBagConstraints (); 345 gridBagConstraints.gridx = 1; 346 gridBagConstraints.gridy = 3; 347 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 348 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 349 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 350 gridBagConstraints.insets = new java.awt.Insets (0, 12, 6, 0); 351 testRootsPanel.add(upTestRoot, gridBagConstraints); 352 upTestRoot.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_upTestRoot")); 354 downTestRoot.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_DownTestRoot").charAt(0)); 355 downTestRoot.setText(bundle.getString("CTL_DownTestRoot")); gridBagConstraints = new java.awt.GridBagConstraints (); 357 gridBagConstraints.gridx = 1; 358 gridBagConstraints.gridy = 4; 359 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 360 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 361 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 362 gridBagConstraints.insets = new java.awt.Insets (0, 12, 0, 0); 363 testRootsPanel.add(downTestRoot, gridBagConstraints); 364 downTestRoot.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_CustomizerSources_downTestRoot")); 366 gridBagConstraints = new java.awt.GridBagConstraints (); 367 gridBagConstraints.gridx = 0; 368 gridBagConstraints.gridy = 2; 369 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 370 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 371 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 372 gridBagConstraints.weightx = 1.0; 373 gridBagConstraints.weighty = 0.45; 374 gridBagConstraints.insets = new java.awt.Insets (12, 0, 0, 0); 375 add(testRootsPanel, gridBagConstraints); 376 377 jPanel1.setLayout(new java.awt.GridBagLayout ()); 378 379 jLabel4.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/java/j2seproject/ui/customizer/Bundle").getString("MNE_SourceLevel").charAt(0)); 380 jLabel4.setLabelFor(sourceLevel); 381 jLabel4.setText(bundle.getString("TXT_SourceLevel")); gridBagConstraints = new java.awt.GridBagConstraints (); 383 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 384 gridBagConstraints.insets = new java.awt.Insets (0, 0, 0, 12); 385 jPanel1.add(jLabel4, gridBagConstraints); 386 387 sourceLevel.setModel(new javax.swing.DefaultComboBoxModel (new String [] { "1.4", "1.5" })); 388 sourceLevel.setMinimumSize(this.sourceLevel.getPreferredSize()); 389 gridBagConstraints = new java.awt.GridBagConstraints (); 390 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 391 gridBagConstraints.weightx = 1.0; 392 jPanel1.add(sourceLevel, gridBagConstraints); 393 sourceLevel.getAccessibleContext().setAccessibleName(bundle.getString("AN_SourceLevel")); sourceLevel.getAccessibleContext().setAccessibleDescription(bundle.getString("AD_SourceLevel")); 396 org.openide.awt.Mnemonics.setLocalizedText(includeExcludeButton, org.openide.util.NbBundle.getMessage(CustomizerSources.class, "CustomizerSources.includeExcludeButton")); includeExcludeButton.addActionListener(new java.awt.event.ActionListener () { 398 public void actionPerformed(java.awt.event.ActionEvent evt) { 399 includeExcludeButtonActionPerformed(evt); 400 } 401 }); 402 gridBagConstraints = new java.awt.GridBagConstraints (); 403 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 404 jPanel1.add(includeExcludeButton, gridBagConstraints); 405 406 gridBagConstraints = new java.awt.GridBagConstraints (); 407 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 408 gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER; 409 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 410 gridBagConstraints.weightx = 1.0; 411 gridBagConstraints.insets = new java.awt.Insets (12, 0, 0, 0); 412 add(jPanel1, gridBagConstraints); 413 } 415 private void includeExcludeButtonActionPerformed(java.awt.event.ActionEvent evt) { IncludeExcludeVisualizer v = new IncludeExcludeVisualizer(); 417 uiProperties.loadIncludesExcludes(v); 418 DialogDescriptor dd = new DialogDescriptor(v.getVisualizerPanel(), 419 NbBundle.getMessage(CustomizerSources.class, "CustomizerSources.title.includeExclude")); 420 dd.setOptionType(NotifyDescriptor.OK_CANCEL_OPTION); 421 if (NotifyDescriptor.OK_OPTION.equals(DialogDisplayer.getDefault().notify(dd))) { 422 uiProperties.storeIncludesExcludes(v); 423 } 424 } 426 427 private javax.swing.JButton addSourceRoot; 429 private javax.swing.JButton addTestRoot; 430 private javax.swing.JButton downSourceRoot; 431 private javax.swing.JButton downTestRoot; 432 private javax.swing.JButton includeExcludeButton; 433 private javax.swing.JLabel jLabel1; 434 private javax.swing.JLabel jLabel2; 435 private javax.swing.JLabel jLabel3; 436 private javax.swing.JLabel jLabel4; 437 private javax.swing.JPanel jPanel1; 438 private javax.swing.JScrollPane jScrollPane1; 439 private javax.swing.JScrollPane jScrollPane2; 440 private javax.swing.JTextField projectLocation; 441 private javax.swing.JButton removeSourceRoot; 442 private javax.swing.JButton removeTestRoot; 443 private javax.swing.JComboBox sourceLevel; 444 private javax.swing.JTable sourceRoots; 445 private javax.swing.JPanel sourceRootsPanel; 446 private javax.swing.JTable testRoots; 447 private javax.swing.JPanel testRootsPanel; 448 private javax.swing.JButton upSourceRoot; 449 private javax.swing.JButton upTestRoot; 450 452 } 453 | Popular Tags |