1 19 20 package org.netbeans.modules.junit.output; 21 22 import java.awt.event.ComponentEvent ; 23 import java.awt.event.ComponentListener ; 24 import java.lang.ref.Reference ; 25 import java.lang.ref.WeakReference ; 26 import java.util.Map ; 27 import java.util.WeakHashMap ; 28 import org.apache.tools.ant.module.spi.AntSession; 29 import org.openide.util.Mutex; 30 import org.openide.util.NbBundle; 31 32 39 final class Manager { 40 41 46 private static Reference <Manager> instanceRef; 47 48 49 51 53 63 private final Map <AntSession, TaskType> junitSessions 64 = new WeakHashMap <AntSession, TaskType>(5); 65 66 67 73 static Manager getInstance() { 74 Manager instance = (instanceRef != null) ? instanceRef.get() : null; 75 if (instance == null) { 76 instance = new Manager(); 77 instanceRef = new WeakReference <Manager>(instance); 78 } 79 return instance; 80 } 81 82 86 void testStarted(final AntSession session, final TaskType sessionType) { 87 displayMessage( 88 session, 89 sessionType, 90 NbBundle.getMessage(getClass(), "LBL_RunningTests")); } 92 93 95 void sessionFinished(final AntSession session, 96 final TaskType sessionType) { 97 Object o = junitSessions.get(session); 98 if (o == null) { 99 100 return; 101 } 102 103 displayMessage(session, sessionType, null); junitSessions.remove(session); 108 124 125 129 136 138 160 162 163 191 } 193 194 196 void displayOutput(final AntSession session, 197 final TaskType sessionType, 198 final String text, 199 final boolean error) { 200 201 202 203 final ResultDisplayHandler displayHandler = getDisplayHandler(session); 204 displayHandler.displayOutput(text, error); 205 displayInWindow(session, sessionType, displayHandler); 206 } 207 208 213 void displaySuiteRunning(final AntSession session, 214 final TaskType sessionType, 215 final String suiteName) { 216 217 218 219 final ResultDisplayHandler displayHandler = getDisplayHandler(session); 220 displayHandler.displaySuiteRunning(suiteName); 221 displayInWindow(session, sessionType, displayHandler); 222 } 223 224 226 void displayReport(final AntSession session, 227 final TaskType sessionType, 228 final Report report) { 229 230 231 232 final ResultDisplayHandler displayHandler = getDisplayHandler(session); 233 displayHandler.displayReport(report); 234 displayInWindow(session, sessionType, displayHandler); 235 } 236 237 244 private void displayMessage(final AntSession session, 245 final TaskType sessionType, 246 final String message) { 247 248 249 250 final ResultDisplayHandler displayHandler = getDisplayHandler(session); 251 displayHandler.displayMessage(message); 252 displayInWindow(session, sessionType, displayHandler); 253 254 259 260 266 267 268 306 } 308 309 311 private void displayInWindow(final AntSession session, 312 final TaskType sessionType, 313 final ResultDisplayHandler displayHandler) { 314 final boolean promote = 315 (junitSessions.put(session, sessionType) == null) 316 && (sessionType == TaskType.TEST_TASK); 317 318 int displayIndex = getDisplayIndex(session); 319 if (displayIndex == -1) { 320 addDisplay(session); 321 322 Mutex.EVENT.writeAccess(new Displayer(displayHandler, promote)); 323 } else if (promote) { 324 Mutex.EVENT.writeAccess(new Displayer(null, promote)); 325 } 326 } 327 328 331 private class Displayer implements Runnable { 332 private final ResultDisplayHandler displayHandler; 333 private final boolean promote; 334 Displayer(final ResultDisplayHandler displayHandler, 335 final boolean promote) { 336 this.displayHandler = displayHandler; 337 this.promote = promote; 338 } 339 public void run() { 340 final ResultWindow window = ResultWindow.getInstance(); 341 if (displayHandler != null) { 342 window.addDisplayComponent(displayHandler.getDisplayComponent()); 343 } 344 if (promote) { 345 window.promote(); 346 } 347 } 348 } 349 350 351 private Map <AntSession,ResultDisplayHandler> displayHandlers; 352 353 355 private ResultDisplayHandler getDisplayHandler(final AntSession session) { 356 ResultDisplayHandler displayHandler = (displayHandlers != null) 357 ? displayHandlers.get(session) 358 : null; 359 if (displayHandler == null) { 360 if (displayHandlers == null) { 361 displayHandlers = new WeakHashMap <AntSession,ResultDisplayHandler>(7); 362 } 363 displayHandler = new ResultDisplayHandler(); 364 displayHandlers.put(session, displayHandler); 365 } 366 return displayHandler; 367 } 368 369 370 private Map <AntSession,Boolean > displaysMap; 371 372 374 private int getDisplayIndex(final AntSession session) { 375 if (displaysMap == null) { 376 return -1; 377 } 378 Boolean o = displaysMap.get(session); 379 return (o != null) ? 0 : -1; 380 } 381 382 384 private void addDisplay(final AntSession session) { 385 if (displaysMap == null) { 386 displaysMap = new WeakHashMap <AntSession,Boolean >(4); 387 } 388 displaysMap.put(session, Boolean.TRUE); 389 } 390 391 } 392 | Popular Tags |