--- a/hudson/src/org/netbeans/modules/hudson/api/UI.java +++ a/hudson/src/org/netbeans/modules/hudson/api/UI.java @@ -46,7 +46,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.Action; -import org.netbeans.modules.hudson.ui.actions.CreateJob; import org.netbeans.modules.hudson.ui.actions.ShowBuildConsole; import org.netbeans.modules.hudson.ui.actions.ShowChanges; import org.netbeans.modules.hudson.ui.actions.ShowFailures; @@ -55,6 +54,7 @@ import org.openide.nodes.Node; import org.openide.nodes.NodeNotFoundException; import org.openide.nodes.NodeOp; +import org.openide.util.ContextAwareAction; import org.openide.util.Mutex; import org.openide.util.RequestProcessor; import org.openide.windows.TopComponent; @@ -143,16 +143,11 @@ /** * Action to show test failures of a build. + * Context should have either a {@link HudsonJobBuild} or a {@link HudsonMavenModuleBuild}. + * Enabled according to status of build(s). */ - public static Action showFailuresAction(HudsonJobBuild build) { - return new ShowFailures(build); - } - - /** - * Action to show test failures of a Maven module build. - */ - public static Action showFailuresAction(HudsonMavenModuleBuild build) { - return new ShowFailures(build); + public static ContextAwareAction showFailuresAction() { + return ShowFailures.INSTANCE; } } --- a/hudson/src/org/netbeans/modules/hudson/ui/nodes/HudsonJobBuildNode.java +++ a/hudson/src/org/netbeans/modules/hudson/ui/nodes/HudsonJobBuildNode.java @@ -105,8 +105,8 @@ List actions = new ArrayList(); actions.add(UI.showChangesAction(build)); actions.add(UI.showConsoleAction(build)); - if (build.getResult() == HudsonJobBuild.Result.UNSTABLE && build.getMavenModules().isEmpty()) { - actions.add(UI.showFailuresAction(build)); + if (build.getResult() == HudsonJobBuild.Result.UNSTABLE && build.getMavenModules().isEmpty()) { // XXX unconditional + actions.add(UI.showFailuresAction()); } actions.add(null); if (build instanceof OpenableInBrowser) { --- a/hudson/src/org/netbeans/modules/hudson/ui/nodes/HudsonMavenModuleBuildNode.java +++ a/hudson/src/org/netbeans/modules/hudson/ui/nodes/HudsonMavenModuleBuildNode.java @@ -85,10 +85,10 @@ public @Override Action[] getActions(boolean context) { List actions = new ArrayList(); actions.add(UI.showConsoleAction(module)); - switch (module.getColor()) { + switch (module.getColor()) { // XXX unconditional case yellow: case yellow_anime: - actions.add(UI.showFailuresAction(module)); + actions.add(UI.showFailuresAction()); } actions.add(null); if (module instanceof OpenableInBrowser) { --- a/hudson/src/org/netbeans/modules/hudson/ui/notification/ProblemNotification.java +++ a/hudson/src/org/netbeans/modules/hudson/ui/notification/ProblemNotification.java @@ -58,6 +58,8 @@ import org.openide.util.NbBundle.Messages; import org.openide.util.RequestProcessor; import static org.netbeans.modules.hudson.ui.notification.Bundle.*; +import org.openide.util.Lookup; +import org.openide.util.lookup.Lookups; /** * Build failed or was unstable. @@ -107,14 +109,14 @@ if (b.getNumber() == build) { if (failed) { UI.showConsoleAction(b).actionPerformed(null); - } else if (b.getMavenModules().isEmpty()) { - UI.showFailuresAction(b).actionPerformed(null); + } else if (b.getMavenModules().isEmpty()) { // XXX unconditional? + UI.showFailuresAction().createContextAwareInstance(Lookups.singleton(b)).actionPerformed(null); } else { for (HudsonMavenModuleBuild module : b.getMavenModules()) { - switch (module.getColor()) { + switch (module.getColor()) { // XXX unconditional? case yellow: case yellow_anime: - UI.showFailuresAction(module).actionPerformed(null); + UI.showFailuresAction().createContextAwareInstance(Lookups.singleton(module)).actionPerformed(null); } } }