1 19 20 package org.netbeans.modules.junit.output; 21 22 import java.awt.EventQueue ; 23 import java.beans.PropertyChangeEvent ; 24 import java.beans.PropertyChangeListener ; 25 import java.beans.PropertyVetoException ; 26 import java.util.List ; 27 import javax.accessibility.AccessibleContext ; 28 import javax.swing.JPanel ; 29 import javax.swing.event.ChangeEvent ; 30 import javax.swing.event.ChangeListener ; 31 import org.openide.ErrorManager; 32 import org.openide.explorer.ExplorerManager; 33 import org.openide.nodes.Node; 34 import org.openide.util.NbBundle; 35 36 40 final class ResultPanelTree extends JPanel 41 implements ExplorerManager.Provider, 42 PropertyChangeListener { 43 44 45 private final ExplorerManager explorerManager; 46 47 private final RootNode rootNode; 48 49 private final ResultTreeView treeView; 50 51 private boolean filtered = false; 52 53 private ChangeListener changeListener; 54 55 private ChangeEvent changeEvent; 56 61 private final RegexpUtils regexpUtils = RegexpUtils.getInstance(); 62 63 private final ResultDisplayHandler displayHandler; 64 65 ResultPanelTree(ResultDisplayHandler displayHandler) { 66 super(new java.awt.BorderLayout ()); 67 68 add(treeView = new ResultTreeView(), java.awt.BorderLayout.CENTER); 69 70 explorerManager = new ExplorerManager(); 71 explorerManager.setRootContext(rootNode = new RootNode(filtered)); 72 explorerManager.addPropertyChangeListener(this); 73 74 initAccessibility(); 75 76 this.displayHandler = displayHandler; 77 } 78 79 81 private void initAccessibility() { 82 AccessibleContext accessCtx; 83 84 accessCtx = getAccessibleContext(); 85 accessCtx.setAccessibleName( 86 NbBundle.getMessage(getClass(), "ACSN_ResultPanelTree")); accessCtx.setAccessibleDescription( 88 NbBundle.getMessage(getClass(), "ACSD_ResultPanelTree")); 90 accessCtx = treeView.getHorizontalScrollBar().getAccessibleContext(); 91 accessCtx.setAccessibleName( 92 NbBundle.getMessage(getClass(), 93 "ACSN_HorizontalScrollbar")); 95 accessCtx = treeView.getVerticalScrollBar().getAccessibleContext(); 96 accessCtx.setAccessibleName( 97 NbBundle.getMessage(getClass(), 98 "ACSN_HorizontalScrollbar")); 100 } 101 102 104 void displayMsg(String msg) { 105 assert EventQueue.isDispatchThread(); 106 107 108 109 rootNode.displayMessage(msg); 110 } 111 112 114 public void addNotify() { 115 super.addNotify(); 116 117 final Object [] pendingOutput; 118 119 displayHandler.setTreePanel(this); 120 } 121 122 129 void displaySuiteRunning(final String suiteName) { 130 assert EventQueue.isDispatchThread(); 131 132 133 134 rootNode.displaySuiteRunning(suiteName); 135 } 136 137 139 void displayReport(final Report report) { 140 assert EventQueue.isDispatchThread(); 141 142 143 144 TestsuiteNode node = rootNode.displayReport(report); 145 if ((node != null) && report.containsFailed()) { 146 treeView.expandReportNode(node); 147 } 148 } 149 150 153 void displayReports(final List <Report> reports) { 154 assert EventQueue.isDispatchThread(); 155 156 157 158 if (reports.size() == 1) { 159 displayReport(reports.get(0)); 160 } else { 161 rootNode.displayReports(reports); 162 } 163 } 164 165 167 int getSuccessDisplayedLevel() { 168 return rootNode.getSuccessDisplayedLevel(); 169 } 170 171 173 void viewOpened() { 174 assert EventQueue.isDispatchThread(); 175 176 } 179 180 182 void setFiltered(final boolean filtered) { 183 if (filtered == this.filtered) { 184 return; 185 } 186 187 this.filtered = filtered; 188 189 rootNode.setFiltered(filtered); 190 } 191 192 194 public void propertyChange(PropertyChangeEvent e) { 195 if (ExplorerManager.PROP_SELECTED_NODES.equals( 196 e.getPropertyName())) { 197 nodeSelectionChanged(); 198 } 199 } 200 201 203 private void nodeSelectionChanged() { 204 assert EventQueue.isDispatchThread(); 205 206 fireChange(); 207 } 208 209 211 void setChangeListener(ChangeListener l) { 212 assert EventQueue.isDispatchThread(); 213 214 this.changeListener = l; 215 if (changeListener == null) { 216 changeEvent = null; 217 } else if (changeEvent == null) { 218 changeEvent = new ChangeEvent (this); 219 } 220 } 221 222 224 private void fireNodeSelectionChange() { 225 fireChange(); 226 } 227 228 230 private void fireChange() { 231 assert EventQueue.isDispatchThread(); 232 233 if (changeListener != null) { 234 changeListener.stateChanged(changeEvent); 235 } 236 } 237 238 240 Node[] getSelectedNodes() { 241 return explorerManager.getSelectedNodes(); 242 } 243 244 253 private void selectAndActivateNode(final Node node) { 254 Node[] nodeArray = new Node[] {node}; 255 try { 256 explorerManager.setSelectedNodes(nodeArray); 257 fireNodeSelectionChange(); 258 } catch (PropertyVetoException ex) { 259 ErrorManager.getDefault().notify(ErrorManager.EXCEPTION, ex); 260 nodeArray = new Node[0]; 261 try { 262 explorerManager.setSelectedNodes(nodeArray); 263 fireNodeSelectionChange(); 264 } catch (PropertyVetoException ex2) { 265 ErrorManager.getDefault().notify(ErrorManager.EXCEPTION, ex2); 266 } 267 } 268 } 269 270 272 public ExplorerManager getExplorerManager() { 273 return explorerManager; 274 } 275 276 278 public boolean requestFocusInWindow() { 279 return treeView.requestFocusInWindow(); 280 } 281 282 } 283 | Popular Tags |