499132: show test results can filter the results to failures only

Change-Id: Icde09a46b387e99b48c92ba040cbb5eb059aea99
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=499132
Signed-off-by: Jaxsun McCarthy Huggan <jaxsun.mccarthy@tasktop.com>
diff --git a/org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/util/TestResultManager.java b/org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/util/TestResultManager.java
index 00499f4..9ffa810 100644
--- a/org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/util/TestResultManager.java
+++ b/org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/util/TestResultManager.java
@@ -47,6 +47,7 @@
 import org.eclipse.mylyn.commons.workbench.WorkbenchUtil;
 import org.eclipse.mylyn.internal.builds.ui.BuildsUiInternal;
 import org.eclipse.mylyn.internal.builds.ui.BuildsUiPlugin;
+import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.statushandlers.StatusManager;
 import org.xml.sax.SAXException;
 
@@ -91,16 +92,16 @@
 					// Eclipse 3.6 or later
 					Class<?> clazz;
 					try {
-						clazz = Class.forName("org.eclipse.jdt.internal.junit.JUnitCorePlugin");
+						clazz = Class.forName("org.eclipse.jdt.internal.junit.JUnitCorePlugin"); //$NON-NLS-1$
 					} catch (ClassNotFoundException e) {
 						// Eclipse 3.5 and earlier
-						clazz = Class.forName("org.eclipse.jdt.internal.junit.ui.JUnitPlugin");
+						clazz = Class.forName("org.eclipse.jdt.internal.junit.ui.JUnitPlugin"); //$NON-NLS-1$
 					}
 
-					Method method = clazz.getDeclaredMethod("getModel");
+					Method method = clazz.getDeclaredMethod("getModel"); //$NON-NLS-1$
 					junitModel = (JUnitModel) method.invoke(null);
 				} catch (Exception e) {
-					NoClassDefFoundError error = new NoClassDefFoundError("Unable to locate container for JUnitModel");
+					NoClassDefFoundError error = new NoClassDefFoundError("Unable to locate container for JUnitModel"); //$NON-NLS-1$
 					error.initCause(e);
 					throw error;
 				}
@@ -127,18 +128,20 @@
 					}
 				});
 				if (result.get() == null) {
-					StatusManager.getManager().handle(
-							new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN, "Failed to locate test in workspace."),
-							StatusManager.SHOW | StatusManager.BLOCK);
+					StatusManager.getManager()
+							.handle(new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN,
+									"Failed to locate test in workspace."), //$NON-NLS-1$
+									StatusManager.SHOW | StatusManager.BLOCK);
 					return;
 				}
 				JavaUI.openInEditor(result.get(), true, true);
 			} catch (OperationCanceledException e) {
 				return;
 			} catch (Exception e) {
-				StatusManager.getManager().handle(
-						new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN, "Failed to locate test in workspace.", e),
-						StatusManager.SHOW | StatusManager.BLOCK | StatusManager.LOG);
+				StatusManager.getManager()
+						.handle(new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN,
+								"Failed to locate test in workspace.", e), //$NON-NLS-1$
+								StatusManager.SHOW | StatusManager.BLOCK | StatusManager.LOG);
 				return;
 			}
 		}
@@ -155,24 +158,39 @@
 							generator.write(handler);
 						} catch (SAXException e) {
 							throw new CoreException(new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN,
-									"Unexpected parsing error while preparing test results", e));
+									"Unexpected parsing error while preparing test results", e)); //$NON-NLS-1$
 						}
 					}
 				});
 			} catch (OperationCanceledException e) {
 				return;
 			} catch (CoreException e) {
-				StatusManager.getManager().handle(
-						new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN,
-								"Unexpected error while processing test results", e),
-						StatusManager.SHOW | StatusManager.LOG);
+				StatusManager.getManager()
+						.handle(new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN,
+								"Unexpected error while processing test results", e), //$NON-NLS-1$
+								StatusManager.SHOW | StatusManager.LOG);
 				return;
 			}
 
 			// show results in view
-			WorkbenchUtil.showViewInActiveWindow(TestRunnerViewPart.NAME);
+			IViewPart part = WorkbenchUtil.showViewInActiveWindow(TestRunnerViewPart.NAME);
+			showFailuresOnly(part);
 			getJUnitModel().addTestRunSession(testRunSession);
 		}
+
+		static void showFailuresOnly(IViewPart part) {
+			try {
+				boolean showFailuresOnly = BuildsUiPlugin.getDefault()
+						.getPreferenceStore()
+						.getBoolean(BuildsUiInternal.PREF_SHOW_TEST_FAILURES_ONLY);
+
+				Method method = TestRunnerViewPart.class.getDeclaredMethod("setShowFailuresOnly", boolean.class); //$NON-NLS-1$
+				method.setAccessible(true);
+				method.invoke(part, showFailuresOnly);
+			} catch (Throwable t) {
+				// ignore
+			}
+		}
 	}
 
 	public static boolean isJUnitAvailable() {
@@ -205,15 +223,16 @@
 
 		if (!isJUnitAvailable()) {
 			StatusManager.getManager().handle(
-					new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN, "JUnit is not installed."),
+					new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN, "JUnit is not installed."), //$NON-NLS-1$
 					StatusManager.SHOW | StatusManager.BLOCK);
 			return;
 		}
 
 		if (build.getTestResult() == null) {
-			StatusManager.getManager().handle(
-					new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN, "The build did not produce test results."),
-					StatusManager.SHOW | StatusManager.BLOCK);
+			StatusManager.getManager()
+					.handle(new Status(IStatus.ERROR, BuildsUiPlugin.ID_PLUGIN,
+							"The build did not produce test results."), //$NON-NLS-1$
+							StatusManager.SHOW | StatusManager.BLOCK);
 			return;
 		}