package com.tomwheeler.nbide.enhancements.setasfreemarkertemplate; import java.awt.event.ActionEvent; import java.io.IOException; import javax.swing.AbstractAction; import javax.swing.Action; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileSystem; import org.openide.filesystems.Repository; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; import org.openide.nodes.NodeOperation; import org.openide.util.Exceptions; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; public final class SetFreeMarkerTemplateAttributeAction extends CallableSystemAction { public void performAction() { FileSystem sfs = Repository.getDefault().getDefaultFileSystem(); FileObject sfsRoot = sfs.getRoot(); FileObject templatesRoot = sfsRoot.getFileObject("Templates"); DataObject templatesDataObj = null; try { templatesDataObj = DataObject.find(templatesRoot); } catch (DataObjectNotFoundException ex) { Exceptions.printStackTrace(ex); } Node templatesRootNode = templatesDataObj.getNodeDelegate(); Node filteredNode = new TemplateDecorationNode(templatesRootNode); NodeOperation.getDefault().explore(filteredNode); } public String getName() { return "Mark Templates as FreeMarker Templates"; } @Override protected void initialize() { super.initialize(); putValue("noIconInMenu", Boolean.TRUE); } public HelpCtx getHelpCtx() { return HelpCtx.DEFAULT_HELP; } @Override protected boolean asynchronous() { return false; } private class TemplateDecorationNode extends FilterNode { public TemplateDecorationNode(Node original) { super(original, new TemplateDecorationChildren(original)); } @Override public Action[] getActions(boolean context) { return new Action[]{new SetAsFreeMarkerTemplateAction(this)}; } } private class TemplateDecorationChildren extends FilterNode.Children { public TemplateDecorationChildren(Node owner) { super(owner); } @Override protected Node copyNode(Node original) { return new TemplateDecorationNode(original); } } private class SetAsFreeMarkerTemplateAction extends AbstractAction { private Node node; public SetAsFreeMarkerTemplateAction(Node n) { super("Set as a FreeMarker Template"); this.node = n; } public void actionPerformed(ActionEvent e) { FileObject fileObj = node.getLookup().lookup(FileObject.class); if (fileObj == null) { throw new IllegalArgumentException("Could not get file object from node"); } String msg = "Are you sure you want to set this as a FreeMarker template?"; final String title = "Set as FreeMarker Template"; NotifyDescriptor nd = new NotifyDescriptor.Confirmation(msg, title, NotifyDescriptor.YES_NO_OPTION); Object choice = DialogDisplayer.getDefault().notify(nd); if (choice != NotifyDescriptor.YES_OPTION) { return; } try { fileObj.setAttribute("javax.script.ScriptEngine", "freemarker"); } catch (IOException ex) { Exceptions.printStackTrace(ex); } } } }