1 19 20 package org.apache.tools.ant.module.run; 21 22 import java.awt.Component ; 23 import java.text.Collator ; 24 import java.util.Comparator ; 25 import java.util.Map ; 26 import java.util.SortedSet ; 27 import java.util.TreeSet ; 28 import javax.swing.DefaultListCellRenderer ; 29 import javax.swing.DefaultListModel ; 30 import javax.swing.JButton ; 31 import javax.swing.JList ; 32 import javax.swing.JPanel ; 33 import javax.swing.event.ListSelectionEvent ; 34 import javax.swing.event.ListSelectionListener ; 35 import org.openide.DialogDescriptor; 36 import org.openide.DialogDisplayer; 37 import org.openide.NotifyDescriptor; 38 import org.openide.util.NbBundle; 39 40 44 final class StopBuildingAlert extends JPanel { 45 46 51 public static Thread [] selectProcessToKill(final Map <Thread ,String > processesWithDisplayNames) { 52 StopBuildingAlert alert = new StopBuildingAlert(processesWithDisplayNames); 53 final JList list = alert.buildsList; 54 DefaultListModel model = new DefaultListModel (); 56 Comparator <Thread > comp = new Comparator <Thread >() { 57 private final Collator coll = Collator.getInstance(); 58 public int compare(Thread t1, Thread t2) { 59 String n1 = processesWithDisplayNames.get(t1); 60 String n2 = processesWithDisplayNames.get(t2); 61 int r = coll.compare(n1, n2); 62 if (r != 0) { 63 return r; 64 } else { 65 return System.identityHashCode(t1) - System.identityHashCode(t2); 69 } 70 } 71 }; 72 SortedSet <Thread > threads = new TreeSet <Thread >(comp); 73 threads.addAll(processesWithDisplayNames.keySet()); 74 for (Thread t : threads) { 75 model.addElement(t); 76 } 77 list.setModel(model); 78 list.setSelectedIndex(0); 79 DialogDescriptor dd = new DialogDescriptor(alert, NbBundle.getMessage(StopBuildingAlert.class, "TITLE_SBA")); 81 dd.setMessageType(NotifyDescriptor.PLAIN_MESSAGE); 82 final JButton stopButton = new JButton (NbBundle.getMessage(StopBuildingAlert.class, "LBL_SBA_stop")); 83 list.addListSelectionListener(new ListSelectionListener () { 84 public void valueChanged(ListSelectionEvent e) { 85 stopButton.setEnabled(list.getSelectedValue() != null); 86 } 87 }); 88 dd.setOptions(new Object [] {stopButton, DialogDescriptor.CANCEL_OPTION}); 89 DialogDisplayer.getDefault().createDialog(dd).setVisible(true); 90 if (dd.getValue() == stopButton) { 91 Object [] _selectedThreads = list.getSelectedValues(); 92 Thread [] selectedThreads = new Thread [_selectedThreads.length]; 93 for (int i = 0; i < _selectedThreads.length; i++) { 94 selectedThreads[i] = (Thread ) _selectedThreads[i]; 95 } 96 return selectedThreads; 97 } else { 98 return new Thread [0]; 99 } 100 } 101 102 private final Map <Thread ,String > processesWithDisplayNames; 103 104 private StopBuildingAlert(Map <Thread ,String > processesWithDisplayNames) { 105 this.processesWithDisplayNames = processesWithDisplayNames; 106 initComponents(); 107 buildsList.setCellRenderer(new ProcessCellRenderer()); 108 } 109 110 private void initComponents() { 112 java.awt.GridBagConstraints gridBagConstraints; 113 114 introLabel = new javax.swing.JLabel (); 115 buildsLabel = new javax.swing.JLabel (); 116 buildsScrollPane = new javax.swing.JScrollPane (); 117 buildsList = new javax.swing.JList (); 118 119 org.openide.awt.Mnemonics.setLocalizedText(introLabel, org.openide.util.NbBundle.getMessage(StopBuildingAlert.class, "LBL_SBA_intro")); 120 121 buildsLabel.setLabelFor(buildsList); 122 org.openide.awt.Mnemonics.setLocalizedText(buildsLabel, org.openide.util.NbBundle.getMessage(StopBuildingAlert.class, "LBL_SBA_select")); 123 124 buildsScrollPane.setViewportView(buildsList); 125 126 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); 127 this.setLayout(layout); 128 layout.setHorizontalGroup( 129 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 130 .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() 131 .addContainerGap() 132 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) 133 .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() 134 .add(buildsScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE) 135 .addContainerGap()) 136 .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() 137 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) 138 .add(buildsLabel) 139 .add(introLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 140 .add(28, 28, 28)))) 141 ); 142 layout.setVerticalGroup( 143 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 144 .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() 145 .addContainerGap() 146 .add(introLabel) 147 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 148 .add(buildsLabel) 149 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 150 .add(buildsScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE) 151 .addContainerGap()) 152 ); 153 } 154 156 157 public javax.swing.JLabel buildsLabel; 159 public javax.swing.JList buildsList; 160 public javax.swing.JScrollPane buildsScrollPane; 161 public javax.swing.JLabel introLabel; 162 164 private final class ProcessCellRenderer extends DefaultListCellRenderer { 165 166 public ProcessCellRenderer() {} 167 168 @Override 169 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 170 Thread t = (Thread ) value; 171 String displayName = processesWithDisplayNames.get(t); 172 return super.getListCellRendererComponent(list, displayName, index, isSelected, cellHasFocus); 173 } 174 175 } 176 177 } 178 | Popular Tags |