package com.babel17.netbeans; import org.netbeans.spi.project.*; import org.netbeans.spi.project.ui.*; import org.netbeans.spi.project.ui.support.*; import org.netbeans.api.project.*; import org.openide.filesystems.*; import org.openide.loaders.*; import org.openide.util.lookup.*; import org.openide.util.*; import org.openide.nodes.*; import java.io.*; import java.util.*; import javax.swing.*; import java.awt.Image; class Babel17ProjectLogicalView implements LogicalViewProvider { private final Babel17Project project; public Babel17ProjectLogicalView(Babel17Project project) { this.project = project; } @Override public org.openide.nodes.Node createLogicalView() { try { //Get the Text directory, creating if deleted FileObject text = project.getSrcFolder(true); //Get the DataObject that represents it DataFolder textDataObject = DataFolder.findFolder(text); //Get its default node-we'll wrap our node around it to change the //display name, icon, etc Node realTextFolderNode = textDataObject.getNodeDelegate(); //This FilterNode will be our project node return new TextNode(realTextFolderNode, project); } catch (DataObjectNotFoundException donfe) { Exceptions.printStackTrace(donfe); //Fallback-the directory couldn't be created - //read-only filesystem or something evil happened return new AbstractNode(Children.LEAF); } } /** This is the node you actually see in the project tab for the project */ private static final class TextNode extends FilterNode { final Babel17Project project; public TextNode(Node node, Babel17Project project) throws DataObjectNotFoundException { super(node, new FilterNode.Children(node), //The projects system wants the project in the Node's lookup. //NewAction and friends want the original Node's lookup. //Make a merge of both new ProxyLookup(new Lookup[]{Lookups.singleton(project), node.getLookup() })); this.project = project; } @Override public Action[] getActions(boolean arg0) { Action[] nodeActions = new Action[9]; nodeActions[0] = CommonProjectActions.newFileAction(); nodeActions[1] = CommonProjectActions.copyProjectAction(); nodeActions[2] = CommonProjectActions.deleteProjectAction(); nodeActions[5] = CommonProjectActions.setAsMainProjectAction(); nodeActions[6] = CommonProjectActions.closeProjectAction(); nodeActions[8] = CommonProjectActions.customizeProjectAction(); return nodeActions; } @Override public Image getIcon(int type) { return ImageUtilities.loadImage("com/babel17/netbeans/b17projecticon.png"); } @Override public Image getOpenedIcon(int type) { return getIcon(type); } @Override public String getDisplayName() { return project.getProjectDirectory().getName(); } } @Override public Node findPath(Node root, Object target) { //leave unimplemented for now return null; } }