--- a/hudson/src/org/netbeans/modules/hudson/api/UI.java +++ a/hudson/src/org/netbeans/modules/hudson/api/UI.java @@ -59,6 +59,7 @@ import org.openide.util.ImageUtilities; import org.openide.util.Mutex; import org.openide.util.RequestProcessor; +import org.openide.util.actions.SystemAction; import org.openide.windows.TopComponent; import org.openide.windows.WindowManager; @@ -147,14 +148,14 @@ * Action to show test failures of a build. */ public static Action showFailuresAction(HudsonJobBuild build) { - return new ShowFailures(build); + return SystemAction.get(ShowFailures.class); } /** * Action to show test failures of a Maven module build. */ public static Action showFailuresAction(HudsonMavenModuleBuild build) { - return new ShowFailures(build); + return SystemAction.get(ShowFailures.class); } /** --- a/hudson/src/org/netbeans/modules/hudson/ui/actions/ShowFailures.java +++ a/hudson/src/org/netbeans/modules/hudson/ui/actions/ShowFailures.java @@ -41,47 +41,30 @@ */ package org.netbeans.modules.hudson.ui.actions; -import java.awt.event.ActionEvent; import java.util.logging.Logger; -import javax.swing.AbstractAction; import org.netbeans.modules.hudson.api.HudsonInstance; import org.netbeans.modules.hudson.api.HudsonJobBuild; import org.netbeans.modules.hudson.api.HudsonMavenModuleBuild; import org.netbeans.modules.hudson.impl.HudsonInstanceImpl; import org.netbeans.modules.hudson.spi.BuilderConnector; -import static org.netbeans.modules.hudson.ui.actions.Bundle.*; +import org.openide.nodes.Node; +import org.openide.util.HelpCtx; import org.openide.util.NbBundle.Messages; import org.openide.util.RequestProcessor; +import org.openide.util.actions.NodeAction; /** * Action to display test failures. */ -public class ShowFailures extends AbstractAction { +public class ShowFailures extends NodeAction { private static final Logger LOG = Logger.getLogger(ShowFailures.class.getName()); private static final RequestProcessor RP = new RequestProcessor(ShowFailures.class); - private final HudsonJobBuild build; - private final HudsonMavenModuleBuild moduleBuild; - public ShowFailures(HudsonJobBuild build) { - this(build, null); - } - public ShowFailures(HudsonMavenModuleBuild module) { - this(module.getBuild(), module); - } - - @Messages("ShowFailures.label=Show Test Failures") - private ShowFailures(HudsonJobBuild build, + private void performAction(HudsonJobBuild build, HudsonMavenModuleBuild moduleBuild) { - this.build = build; - this.moduleBuild = moduleBuild; - putValue(NAME, ShowFailures_label()); - } - - @Override - public void actionPerformed(ActionEvent e) { HudsonInstance hudsonInstance = build.getJob().getInstance(); if (hudsonInstance instanceof HudsonInstanceImpl) { HudsonInstanceImpl hudsonInstanceImpl = @@ -95,8 +78,7 @@ } } - @Override - public boolean isEnabled() { + private boolean isEnabled(HudsonJobBuild build) { HudsonInstance instance = build.getJob().getInstance(); if (instance instanceof HudsonInstanceImpl) { BuilderConnector builderClient = @@ -105,4 +87,51 @@ } return false; } + + @Override + protected void performAction(Node[] activatedNodes) { + for (Node n : activatedNodes) { + HudsonJobBuild build; + build = n.getLookup().lookup(HudsonJobBuild.class); + if (build == null) { + HudsonMavenModuleBuild module = + n.getLookup().lookup(HudsonMavenModuleBuild.class); + if (module != null) { + performAction(module.getBuild(), module); + } + } else { + performAction(build, null); + } + } + } + + @Override + protected boolean enable(Node[] activatedNodes) { + for (Node n : activatedNodes) { + HudsonJobBuild build; + build = n.getLookup().lookup(HudsonJobBuild.class); + if (build == null) { + HudsonMavenModuleBuild module = + n.getLookup().lookup(HudsonMavenModuleBuild.class); + if (module != null) { + build = module.getBuild(); + } + } + if (build == null || !isEnabled(build)) { + return false; + } + } + return activatedNodes.length > 0; + } + + @Messages("ShowFailures.label=Show Test Failures") + @Override + public String getName() { + return Bundle.ShowFailures_label(); + } + + @Override + public HelpCtx getHelpCtx() { + return null; + } }