diff --git a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractEnableBackgroundScanningAction.java b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractEnableBackgroundScanningAction.java index d79ed22..b60621a 100644 --- a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractEnableBackgroundScanningAction.java +++ b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractEnableBackgroundScanningAction.java @@ -25,7 +25,6 @@ import org.nbheaven.sqe.codedefects.core.util.SQECodedefectSupport; import org.nbheaven.sqe.codedefects.ui.actions.AbstractQualitySessionAwareAction; import org.netbeans.api.project.Project; -import org.openide.awt.Actions; import org.openide.util.Lookup; import org.openide.util.actions.Presenter; diff --git a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractQualitySessionAwareAction.java b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractQualitySessionAwareAction.java index fcf793c..68bb535 100644 --- a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractQualitySessionAwareAction.java +++ b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractQualitySessionAwareAction.java @@ -20,12 +20,14 @@ import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.beans.PropertyChangeListener; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; import javax.swing.AbstractAction; import org.nbheaven.sqe.codedefects.core.api.QualityProvider.SessionEventProxy; import org.nbheaven.sqe.core.utilities.SQEProjectSupport; import org.netbeans.api.project.Project; import org.openide.nodes.Node; +import org.openide.util.Exceptions; import org.openide.util.Lookup; /** diff --git a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractShowProjectResultAnnotationsAction.java b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractShowProjectResultAnnotationsAction.java index 1648a82..a8130a4 100644 --- a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractShowProjectResultAnnotationsAction.java +++ b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/AbstractShowProjectResultAnnotationsAction.java @@ -23,9 +23,7 @@ import org.nbheaven.sqe.codedefects.core.api.QualityProvider; import org.nbheaven.sqe.codedefects.core.api.QualitySession; import org.nbheaven.sqe.codedefects.core.util.SQECodedefectSupport; -import org.nbheaven.sqe.codedefects.ui.actions.AbstractQualitySessionAwareAction; import org.netbeans.api.project.Project; -import org.openide.awt.Actions; import org.openide.util.Lookup; import org.openide.util.actions.Presenter; diff --git a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/QualityProvidersToolbarDropdownAction.java b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/QualityProvidersToolbarDropdownAction.java index d3dea56..e37f731 100644 --- a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/QualityProvidersToolbarDropdownAction.java +++ b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/actions/QualityProvidersToolbarDropdownAction.java @@ -21,23 +21,13 @@ import java.awt.event.ActionEvent; import java.awt.image.BufferedImage; import java.beans.PropertyChangeListener; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JButton; -import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import org.openide.awt.Actions; import org.openide.awt.DropDownButtonFactory; -import org.openide.cookies.InstanceCookie; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.loaders.DataObject; -import org.openide.loaders.DataObjectNotFoundException; import org.openide.util.ContextAwareAction; import org.openide.util.Lookup; import org.openide.util.Utilities; @@ -49,18 +39,20 @@ */ public class QualityProvidersToolbarDropdownAction implements Action, Presenter.Toolbar, ContextAwareAction { - private List providerActions; + private List actions; private final Action defaultAction; private JButton toolbarPresenter; private JPopupMenu dropdownPopup; + private Lookup context; public QualityProvidersToolbarDropdownAction() { this(Utilities.actionsGlobalContext()); } private QualityProvidersToolbarDropdownAction(Lookup context) { - providerActions = findProviderActions(context); - defaultAction = providerActions.iterator().next(); + this.context = context; + actions = findActions(context); + defaultAction = actions.iterator().next(); } @Override @@ -68,31 +60,8 @@ public Action createContextAwareInstance(Lookup actionContext) { return new QualityProvidersToolbarDropdownAction(actionContext); } - private static List findProviderActions(Lookup context) { - // XXX could probably use Utilities.actionsForPath + Utilities.actionsToPopup - FileObject actionsFO = FileUtil.getConfigFile("Menu/Quality/CodeDefects"); - ArrayList actions = new ArrayList(); - for (FileObject actionsFileObject : FileUtil.getOrder(Arrays.asList(actionsFO.getChildren()), true)) { - try { - if (actionsFileObject.isData()) { - DataObject dob = DataObject.find(actionsFileObject); - InstanceCookie cookie = dob.getLookup().lookup(InstanceCookie.class); - if (null != cookie) { - Action action = (Action) cookie.instanceCreate(); - if (null != context && action instanceof ContextAwareAction) { - actions.add(((ContextAwareAction) action).createContextAwareInstance(context)); - } else { - actions.add(action); - } - } - } - } catch (DataObjectNotFoundException donfe) { - } catch (IOException ioex) { - } catch (ClassNotFoundException cnfe) { - } - } - actions.trimToSize(); - return actions.isEmpty() ? Collections.emptyList() : actions; + private static List findActions(Lookup context) { + return Utilities.actionsForPath("Menu/Quality/CodeDefects"); } @Override @@ -133,62 +102,13 @@ public void removePropertyChangeListener(PropertyChangeListener listener) { @Override public Component getToolbarPresenter() { if (toolbarPresenter == null) { - - dropdownPopup = new DropDownPopupMenu(); - for (Action action : providerActions) { - dropdownPopup.add(createDropdownItem(action)); - } - + dropdownPopup = Utilities.actionsToPopup(actions.toArray(new Action[0]), context); JButton button = DropDownButtonFactory.createDropDownButton(new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)), dropdownPopup); Actions.connect(button, this); -// defaultAction.addPropertyChangeListener(new PropertyChangeListener() { -// -// public void propertyChange(PropertyChangeEvent evt) { -// if (defaultAction.isEnabled()) { -// toolbarPresenter.putClientProperty(DropDownButtonFactory.PROP_DROP_DOWN_MENU, dropdownPopup); -// } else { -// toolbarPresenter.putClientProperty(DropDownButtonFactory.PROP_DROP_DOWN_MENU, null); -// } -// } -// }); - toolbarPresenter = button; } return toolbarPresenter; } - private static JMenuItem createDropdownItem(final Action action) { - JMenuItem item; - if (action instanceof Presenter.Popup) { - item = ((Presenter.Popup) action).getPopupPresenter(); - } else { - item = new JMenuItem(action); - } - Actions.connect(item, action, true); - return item; - } - - private static class DropDownPopupMenu extends JPopupMenu { - - private DropDownPopupMenu() { - } - - @Override - public void setVisible(boolean visible) { - for (Component c : getComponents()) { - if (c instanceof Actions.MenuItem) { - Actions.MenuItem item = (Actions.MenuItem) c; - item.synchMenuPresenters(null); // Hack to force item state update - } else if (c instanceof JMenuItem) { - JMenuItem item = (JMenuItem) c; - Action action = item.getAction(); - if (null != action) { - item.setEnabled(action.isEnabled()); - } - } - } - super.setVisible(visible); - } - } -} \ No newline at end of file +} diff --git a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/layer.xml b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/layer.xml index 8e0ae4a..3117bc2 100644 --- a/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/layer.xml +++ b/codedefects.ui/src/org/nbheaven/sqe/codedefects/ui/layer.xml @@ -34,6 +34,14 @@ + + + + + + + + diff --git a/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/actions/EnableCheckstyleBackgroundScanningAction.java b/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/actions/EnableCheckstyleBackgroundScanningAction.java index b04f687..13f0e9a 100644 --- a/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/actions/EnableCheckstyleBackgroundScanningAction.java +++ b/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/actions/EnableCheckstyleBackgroundScanningAction.java @@ -20,11 +20,9 @@ import javax.swing.Action; import org.nbheaven.sqe.codedefects.ui.actions.AbstractEnableBackgroundScanningAction; import org.nbheaven.sqe.tools.checkstyle.codedefects.core.CheckstyleQualityProvider; -import org.nbheaven.sqe.codedefects.ui.actions.AbstractShowProjectResultAnnotationsAction; import org.nbheaven.sqe.core.utilities.SQEProjectSupport; import org.nbheaven.sqe.tools.checkstyle.codedefects.core.CheckstyleSession; import org.openide.util.ContextAwareAction; -import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.Utilities; @@ -46,8 +44,8 @@ public EnableCheckstyleBackgroundScanningAction(CheckstyleSession session) { private EnableCheckstyleBackgroundScanningAction(Lookup context) { super(context, CheckstyleQualityProvider.getDefault()); - putValue(Action.NAME, "Enable checkstyle background scanning");//NbBundle.getMessage(ShowCheckstyleProjectResultAnnotationsAction.class, "LBL_CheckstyleAction")); //NOI18N - putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/checkstyle/codedefects/core/resources/visible.png"))); + putValue(Action.NAME, "Enable Checkstyle background scanning");//NbBundle.getMessage(ShowCheckstyleProjectResultAnnotationsAction.class, "LBL_CheckstyleAction")); //NOI18N +// putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/checkstyle/codedefects/core/resources/visible.png"))); updateActionState(); } diff --git a/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/actions/RunCheckstyleAction.java b/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/actions/RunCheckstyleAction.java index 65c322b..54b8ef1 100644 --- a/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/actions/RunCheckstyleAction.java +++ b/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/actions/RunCheckstyleAction.java @@ -38,7 +38,7 @@ * * @author Florian Vogler */ -public class RunCheckstyleAction extends AbstractQualitySessionAwareAction implements ContextAwareAction { +public final class RunCheckstyleAction extends AbstractQualitySessionAwareAction implements ContextAwareAction { private final QualityProvider provider; @@ -49,10 +49,9 @@ public RunCheckstyleAction() { private RunCheckstyleAction(Lookup context) { super(context, CheckstyleQualityProvider.getDefault().getSessionEventProxy()); this.provider = CheckstyleQualityProvider.getDefault(); - - // putValue("noIconInMenu", Boolean.TRUE); // NOI18N putValue(Action.NAME, NbBundle.getMessage(RunCheckstyleAction.class, "LBL_CheckstyleAction")); //NOI18N putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/checkstyle/codedefects/core/resources/checkstyle.png"))); + updateActionState(); } @Override diff --git a/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/layer.xml b/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/layer.xml index c8e56e3..9116a7f 100644 --- a/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/layer.xml +++ b/tools.checkstyle.codedefects.core/src/org/nbheaven/sqe/tools/checkstyle/codedefects/core/layer.xml @@ -40,20 +40,14 @@ + + + + - - - - - - - - - - @@ -70,6 +64,7 @@ + diff --git a/tools.checkstyle.codedefects.hints/src/org/nbheaven/sqe/tools/checkstyle/codedefects/hints/CheckstyleHintTaskFactory.java b/tools.checkstyle.codedefects.hints/src/org/nbheaven/sqe/tools/checkstyle/codedefects/hints/CheckstyleHintTaskFactory.java index 52b2876..ebe75f7 100644 --- a/tools.checkstyle.codedefects.hints/src/org/nbheaven/sqe/tools/checkstyle/codedefects/hints/CheckstyleHintTaskFactory.java +++ b/tools.checkstyle.codedefects.hints/src/org/nbheaven/sqe/tools/checkstyle/codedefects/hints/CheckstyleHintTaskFactory.java @@ -19,9 +19,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import org.nbheaven.sqe.codedefects.core.api.QualityProvider; import org.nbheaven.sqe.codedefects.core.api.QualityProvider.SessionEventProxy; -import org.nbheaven.sqe.codedefects.core.api.QualityResult; import org.nbheaven.sqe.codedefects.core.api.QualitySession; import org.nbheaven.sqe.core.utilities.SQEProjectSupport; import org.nbheaven.sqe.tools.checkstyle.codedefects.core.CheckstyleQualityProvider; diff --git a/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/actions/EnableFindBugsBackgroundScanningAction.java b/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/actions/EnableFindBugsBackgroundScanningAction.java index 7baa040..e9ce549 100644 --- a/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/actions/EnableFindBugsBackgroundScanningAction.java +++ b/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/actions/EnableFindBugsBackgroundScanningAction.java @@ -19,12 +19,10 @@ import javax.swing.Action; import org.nbheaven.sqe.codedefects.ui.actions.AbstractEnableBackgroundScanningAction; -import org.nbheaven.sqe.codedefects.ui.actions.AbstractShowProjectResultAnnotationsAction; import org.nbheaven.sqe.core.utilities.SQEProjectSupport; import org.nbheaven.sqe.tools.findbugs.codedefects.core.FindBugsQualityProvider; import org.nbheaven.sqe.tools.findbugs.codedefects.core.FindBugsSession; import org.openide.util.ContextAwareAction; -import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.Utilities; @@ -46,8 +44,8 @@ public EnableFindBugsBackgroundScanningAction(FindBugsSession session) { private EnableFindBugsBackgroundScanningAction(Lookup context) { super(context, FindBugsQualityProvider.getDefault()); - putValue(Action.NAME, "Enable findbugs background scanning");//NbBundle.getMessage(ShowCheckstyleProjectResultAnnotationsAction.class, "LBL_CheckstyleAction")); //NOI18N - putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/findbugs/codedefects/core/resources/visible.png"))); + putValue(Action.NAME, "Enable FindBugs background scanning");//NbBundle.getMessage(ShowCheckstyleProjectResultAnnotationsAction.class, "LBL_CheckstyleAction")); //NOI18N +// putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/findbugs/codedefects/core/resources/visible.png"))); updateActionState(); } diff --git a/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/actions/RunFindBugsAction.java b/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/actions/RunFindBugsAction.java index e34c751..10e8e0b 100644 --- a/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/actions/RunFindBugsAction.java +++ b/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/actions/RunFindBugsAction.java @@ -39,7 +39,7 @@ * * @author Florian Vogler */ -public class RunFindBugsAction extends AbstractQualitySessionAwareAction implements ContextAwareAction { +public final class RunFindBugsAction extends AbstractQualitySessionAwareAction implements ContextAwareAction { private final QualityProvider provider; @@ -54,6 +54,7 @@ private RunFindBugsAction(Lookup context) { // putValue("noIconInMenu", Boolean.TRUE); // NOI18N putValue(Action.NAME, NbBundle.getMessage(RunFindBugsAction.class, "LBL_RunFindBugsAction")); //NOI18N putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/findbugs/codedefects/core/resources/findbugs.png"))); + updateActionState(); } @Override diff --git a/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/layer.xml b/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/layer.xml index 85c2953..47e7ce2 100644 --- a/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/layer.xml +++ b/tools.findbugs.codedefects.core/src/org/nbheaven/sqe/tools/findbugs/codedefects/core/layer.xml @@ -40,19 +40,14 @@ + + + + - - - - - - - - - diff --git a/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/actions/EnablePMDBackgroundScanningAction.java b/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/actions/EnablePMDBackgroundScanningAction.java index fb1cc52..5c9c915 100644 --- a/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/actions/EnablePMDBackgroundScanningAction.java +++ b/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/actions/EnablePMDBackgroundScanningAction.java @@ -19,12 +19,10 @@ import javax.swing.Action; import org.nbheaven.sqe.codedefects.ui.actions.AbstractEnableBackgroundScanningAction; -import org.nbheaven.sqe.codedefects.ui.actions.AbstractShowProjectResultAnnotationsAction; import org.nbheaven.sqe.core.utilities.SQEProjectSupport; import org.nbheaven.sqe.tools.pmd.codedefects.core.PMDQualityProvider; import org.nbheaven.sqe.tools.pmd.codedefects.core.PMDSession; import org.openide.util.ContextAwareAction; -import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.Utilities; @@ -46,8 +44,8 @@ public EnablePMDBackgroundScanningAction(PMDSession session) { private EnablePMDBackgroundScanningAction(Lookup context) { super(context, PMDQualityProvider.getDefault()); - putValue(Action.NAME, "Enable findbugs background scanning");//NbBundle.getMessage(ShowCheckstyleProjectResultAnnotationsAction.class, "LBL_CheckstyleAction")); //NOI18N - putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/findbugs/codedefects/core/resources/visible.png"))); + putValue(Action.NAME, "Enable PMD background scanning");//NbBundle.getMessage(ShowCheckstyleProjectResultAnnotationsAction.class, "LBL_CheckstyleAction")); //NOI18N +// putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/findbugs/codedefects/core/resources/visible.png"))); updateActionState(); } diff --git a/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/actions/RunPMDAction.java b/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/actions/RunPMDAction.java index 93d1355..2b9200f 100644 --- a/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/actions/RunPMDAction.java +++ b/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/actions/RunPMDAction.java @@ -39,7 +39,7 @@ * * @author Florian Vogler */ -public class RunPMDAction extends AbstractQualitySessionAwareAction implements ContextAwareAction { +public final class RunPMDAction extends AbstractQualitySessionAwareAction implements ContextAwareAction { private final QualityProvider provider; @@ -54,6 +54,7 @@ private RunPMDAction(Lookup context) { // putValue("noIconInMenu", Boolean.TRUE); // NOI18N putValue(Action.NAME, NbBundle.getMessage(RunPMDAction.class, "LBL_RunPMDAction")); //NOI18N putValue(SMALL_ICON, ImageUtilities.image2Icon(ImageUtilities.loadImage("org/nbheaven/sqe/tools/pmd/codedefects/core/resources/pmd.png"))); + updateActionState(); } @Override diff --git a/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/layer.xml b/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/layer.xml index 9373348..00b5e70 100644 --- a/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/layer.xml +++ b/tools.pmd.codedefects.core/src/org/nbheaven/sqe/tools/pmd/codedefects/core/layer.xml @@ -40,19 +40,14 @@ + + + + - - - - - - - - -