Newer
Older
NBFolderOpener / src / nz / ac / otago / infosci / folderopener / FileSystem.java
Mark George on 13 Mar 2020 1 KB Refactoring.
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;
	}

}