package nz.ac.otago.infosci.folderopener; import java.awt.Desktop; import java.io.File; import java.io.IOException; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; import org.openide.awt.ActionReferences; import org.openide.awt.ActionRegistration; import org.openide.awt.NotificationDisplayer; import org.openide.loaders.DataFolder; import org.openide.nodes.Node; import org.openide.util.HelpCtx; import org.openide.util.Lookup; import org.openide.util.NbBundle.Messages; import org.openide.util.actions.NodeAction; import org.openide.util.Utilities; @ActionID( category = "File", id = "nz.ac.otago.infosci.folderopener.FolderOpener" ) @ActionRegistration( lazy = false, displayName = "#CTL_FolderOpener" ) @ActionReferences({ @ActionReference(path = "Projects/Actions", position = 10000, separatorBefore = 9999), // Needed for opening project roots @ActionReference(path = "Loaders/folder/any/Actions", position = 10000, separatorBefore = 9999) // Needed for everything else }) @Messages("CTL_FolderOpener=Open in File Manager") public final class FileSystem extends NodeAction { @Override protected void performAction(Node[] nodes) { try { Lookup ctx = Utilities.actionsGlobalContext(); DataFolder folder = ctx.lookup(DataFolder.class); String path = folder.getPrimaryFile().getPath(); Desktop.getDesktop().open(new File(path)); } catch (IOException ex) { NotificationDisplayer.getDefault().notify("Error opening folder", NotificationDisplayer.Priority.NORMAL.getIcon(), ex.getMessage(), null, NotificationDisplayer.Priority.NORMAL); } } @Override protected boolean enable(Node[] nodes) { return true; } @Override public String getName() { return Bundle.CTL_FolderOpener(); } @Override public HelpCtx getHelpCtx() { return null; } @Override protected boolean asynchronous() { return false; } }