Index: FileCommandAction.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/actions/FileCommandAction.java,v retrieving revision 1.14 diff -u -r1.14 FileCommandAction.java --- FileCommandAction.java 30 Jun 2006 21:27:22 -0000 1.14 +++ FileCommandAction.java 22 Apr 2007 06:41:47 -0000 @@ -19,12 +19,17 @@ package org.netbeans.modules.project.ui.actions; +import java.util.Collection; +import java.util.HashSet; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.Action; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JMenuItem; import org.netbeans.api.project.Project; import org.netbeans.spi.project.ActionProvider; +import org.netbeans.spi.project.ui.support.FileCommandActionProvider; import org.openide.awt.Actions; import org.openide.awt.Mnemonics; import org.openide.filesystems.FileObject; @@ -37,7 +42,9 @@ public final class FileCommandAction extends ProjectAction { private String presenterName; - + private Collection providers = new HashSet(); + Logger LOGGER = Logger.getLogger(FileCommandActionProvider.class.getName()); + public FileCommandAction( String command, String namePattern, String iconResource, Lookup lookup ) { this( command, namePattern, new ImageIcon( Utilities.loadImage( iconResource ) ), lookup ); } @@ -48,14 +55,38 @@ presenterName = ActionsUtil.formatName( getNamePattern(), 0, "" ); setDisplayName( presenterName ); putValue(SHORT_DESCRIPTION, Actions.cutAmpersand(presenterName)); + + Collection registeredProviders = Lookup.getDefault().lookupAll(FileCommandActionProvider.class); + LOGGER.log(Level.INFO, "Found providers:" + registeredProviders.size()); + for (FileCommandActionProvider p : registeredProviders) { + for (String action : p.getSupportedActions()) { + if (action.equals(getCommand())) { + LOGGER.log(Level.INFO, "Provider added for " + action + " : " + p.getClass().getName()); + providers.add(p); + } + } + } } protected void refresh( Lookup context ) { Project[] projects = ActionsUtil.getProjectsFromLookup( context, getCommand() ); if ( projects.length != 1 ) { - setEnabled( false ); // Zero or more than one projects found or command not supported - presenterName = ActionsUtil.formatName( getNamePattern(), 0, "" ); + boolean supportedByProvider = false; + for (FileCommandActionProvider provider : providers) { + LOGGER.log(Level.INFO, "checkign if enabled: " + getCommand() + " on " + provider.getClass().getName()); + if (provider.isActionEnabled(getCommand(), context)) { + LOGGER.log(Level.INFO, "enabled"); + setEnabled( true ); + presenterName = ActionsUtil.formatName( getNamePattern(), 0, "" ); + supportedByProvider = true; + break; + } + } + if (!supportedByProvider) { + setEnabled( false ); // Zero or more than one projects found or command not supported + presenterName = ActionsUtil.formatName( getNamePattern(), 0, "" ); + } } else { FileObject[] files = ActionsUtil.getFilesFromLookup( context, projects[0] ); @@ -76,7 +107,15 @@ ActionProvider ap = (ActionProvider)projects[0].getLookup().lookup( ActionProvider.class ); ap.invokeAction( getCommand(), context ); } - + + LOGGER.log(Level.INFO, "actionPerformed - FileCommandActionProviders"); + for (FileCommandActionProvider provider : providers) { + LOGGER.log(Level.INFO, "provider: " + provider.getClass().getName()); + if (provider.isActionEnabled(getCommand(), context)) { + LOGGER.log(Level.INFO, "enabled- calling"); + provider.invokeAction(getCommand(), context); + } + } }