/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.tvl.goworks.project; import java.awt.Image; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.Action; import org.netbeans.api.annotations.common.StaticResource; import org.netbeans.spi.project.ActionProvider; import org.netbeans.spi.project.ui.LogicalViewProvider; import org.netbeans.spi.project.ui.support.CommonProjectActions; import org.netbeans.spi.project.ui.support.NodeFactorySupport; import org.netbeans.spi.project.ui.support.ProjectSensitiveActions; import org.openide.filesystems.FileObject; import org.openide.loaders.DataFolder; import org.openide.loaders.DataObjectNotFoundException; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; /** * * @author Sam Harwell */ @NbBundle.Messages({ "LBL_BuildAction_Name=Build", "LBL_CleanBuildAction_Name=Clean and Build", "LBL_CleanAction_Name=Clean", "LBL_RunAction_Name=Run", "LBL_DebugAction_Name=Debug", "LBL_ProfileAction_Name=Profile", "LBL_TestAction_Name=Test", "LBL_SourcePackages=Source Packages", }) public class GoProjectLogicalView implements LogicalViewProvider { // -J-Dorg.tvl.goworks.project.GoProjectLogicalView.level=FINE private static final Logger LOGGER = Logger.getLogger(GoProjectLogicalView.class.getName()); @StaticResource private static final String PROJECT_ICON = "org/tvl/goworks/project/ui/resources/icon1.png"; private final GoProject project; public GoProjectLogicalView(GoProject project) { this.project = project; } @Override public Node createLogicalView() { try { //Get the Text directory, creating if deleted FileObject root = project.getProjectDirectory(); //Get the DataObject that represents it DataFolder rootDataObject = DataFolder.findFolder(root); //Get its default node-we'll wrap our node around it to change the //display name, icon, etc Node realRootFolderNode = rootDataObject.getNodeDelegate(); //This FilterNode will be our project node return new TextNode(realRootFolderNode, project); } catch (DataObjectNotFoundException donfe) { LOGGER.log(Level.WARNING, "An exception occurred while opening a project.", 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 AbstractNode { final GoProject project; public TextNode(Node node, GoProject project) throws DataObjectNotFoundException { super(NodeFactorySupport.createCompositeChildren(project, "Projects/" + GoProject.GO_PROJECT_ID + "/Nodes"), Lookups.singleton(project)); this.project = project; } @Override public Action[] getActions(boolean arg0) { Action[] nodeActions = { CommonProjectActions.newFileAction(), null, ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_BUILD, Bundle.LBL_BuildAction_Name(), null), ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_REBUILD, Bundle.LBL_CleanBuildAction_Name(), null), ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_CLEAN, Bundle.LBL_CleanAction_Name(), null), null, ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_RUN, Bundle.LBL_RunAction_Name(), null), ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_DEBUG, Bundle.LBL_DebugAction_Name(), null), ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_PROFILE, Bundle.LBL_ProfileAction_Name(), null), ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_TEST, Bundle.LBL_TestAction_Name(), null), null, CommonProjectActions.copyProjectAction(), CommonProjectActions.deleteProjectAction(), CommonProjectActions.setAsMainProjectAction(), CommonProjectActions.closeProjectAction(), }; return nodeActions; } @Override public Image getIcon(int type) { return ImageUtilities.loadImage(PROJECT_ICON); } @Override public Image getOpenedIcon(int type) { return ImageUtilities.loadImage(PROJECT_ICON); } @Override public String getDisplayName() { return project.getProjectDirectory().getName(); } } @Override public Node findPath(Node root, Object target) { //leave unimplemented for now return null; } }