×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Java
Posted by: Gian James
Added: Sep 21, 2015 6:42 PM
Views: 11
Tags: no tags
NB Platform IDE Project skeleton
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package org.convoluted.project.droid;
  7. import java.awt.Image;
  8. import java.beans.PropertyChangeListener;
  9. import javax.swing.Action;
  10. import javax.swing.Icon;
  11. import javax.swing.ImageIcon;
  12. import org.netbeans.api.annotations.common.StaticResource;
  13. import org.netbeans.api.project.Project;
  14. import org.netbeans.api.project.ProjectInformation;
  15. import org.netbeans.spi.project.ProjectState;
  16. import org.netbeans.spi.project.ui.LogicalViewProvider;
  17. import org.netbeans.spi.project.ui.support.CommonProjectActions;
  18. import org.netbeans.spi.project.ui.support.NodeFactorySupport;
  19. import org.openide.filesystems.FileObject;
  20. import org.openide.loaders.DataFolder;
  21. import org.openide.loaders.DataObjectNotFoundException;
  22. import org.openide.nodes.AbstractNode;
  23. import org.openide.nodes.Children;
  24. import org.openide.nodes.FilterNode;
  25. import org.openide.nodes.Node;
  26. import org.openide.util.Exceptions;
  27. import org.openide.util.ImageUtilities;
  28. import org.openide.util.Lookup;
  29. import org.openide.util.lookup.Lookups;
  30. import org.openide.util.lookup.ProxyLookup;
  31. //import org.w3c.dom.Node;
  32.  
  33. /**
  34.  *
  35.  * @author bjames
  36.  */
  37. public class DroidProject implements Project {
  38.    
  39.     private final FileObject projectDir;
  40.     private final ProjectState state;
  41.     private Lookup lookup;
  42.    
  43.     // Inner Logical View class
  44.     // defines logical view of project as shown in projects window
  45.     class DroidProjectLogicalView implements LogicalViewProvider {
  46.        
  47.         @StaticResource()
  48.         public static final String DROID_ICON = "org/convoluted/project/droid/icon.png";
  49.        
  50.         private final DroidProject project;
  51.        
  52.         public DroidProjectLogicalView(DroidProject project) {
  53.             this.project = project;
  54.         }
  55.        
  56.         @Override
  57.         public Node createLogicalView() {
  58.             try {
  59.                 //Obtain the project directory's node:
  60.                 FileObject projectDirectory = project.getProjectDirectory();
  61.                 DataFolder projectFolder = DataFolder.findFolder(projectDir);
  62.                 Node nodeOfProjectFolder = projectFolder.getNodeDelegate();
  63.                 //Decorate the project directory's node:
  64.                 return new ProjectNode(nodeOfProjectFolder, project);
  65.             } catch (DataObjectNotFoundException donfe) {
  66.                 Exceptions.printStackTrace(donfe);
  67.             } //Fallback-the directory couldn't be created - //read-only filesystem or something evil happened
  68.             return new AbstractNode(Children.LEAF);
  69.         }
  70.        
  71.         // DroidProject>DroidProjectLogicalView>ProjectNode
  72.         private final class ProjectNode extends FilterNode {
  73.             final DroidProject project;
  74.            
  75.             public ProjectNode(Node node, DroidProject project)
  76.                 throws DataObjectNotFoundException {
  77.                     super(node,
  78.                         NodeFactorySupport.createCompositeChildren(
  79.                             project,
  80.                             "Projects/org-convoluted-botcodestudio/Nodes"
  81.                         ),
  82.                         //new FilterNode.Children(node),
  83.                         new ProxyLookup(
  84.                             new Lookup[] {
  85.                                 Lookups.singleton(project),
  86.                                 node.getLookup()
  87.                             }
  88.                     ));
  89.                 this.project = project;
  90.             }
  91.  
  92.             @Override
  93.             public Action[] getActions(boolean arg0) {
  94.                 return new Action[]{
  95.                     CommonProjectActions.newFileAction(),
  96.                     CommonProjectActions.copyProjectAction(),
  97.                     CommonProjectActions.deleteProjectAction(),
  98.                     CommonProjectActions.customizeProjectAction(),
  99.                     CommonProjectActions.closeProjectAction(),
  100.                     //
  101.                     CommonProjectActions.renameProjectAction(),
  102.                     CommonProjectActions.setAsMainProjectAction(),
  103.                     CommonProjectActions.setProjectConfigurationAction()
  104.                 };
  105.             }
  106.  
  107.             @Override
  108.             public Image getIcon(int type) {
  109.                 return ImageUtilities.loadImage(DROID_ICON);
  110.             }
  111.  
  112.             @Override
  113.             public Image getOpenedIcon(int type) {
  114.                 return getIcon(type);
  115.             }
  116.  
  117.             @Override
  118.             public String getDisplayName() {
  119.                 return project.getProjectDirectory().getName();
  120.             }
  121.     }
  122.        
  123.     @Override
  124.     public Node findPath(Node root, Object target) {
  125.         //leave unimplemented for now
  126.         return null;
  127.     }
  128. }
  129.    
  130.     // Inner Info class
  131.     private final class Info implements ProjectInformation {
  132.         @StaticResource()
  133.         public static final String DROID_ICON = "org/convoluted/project/droid/icon.png";
  134.        
  135.         @Override
  136.         public Icon getIcon() {
  137.             return new ImageIcon(ImageUtilities.loadImage(DROID_ICON, true));
  138.         }
  139.        
  140.         @Override
  141.         public String getName() {
  142.             return getProjectDirectory().getName();
  143.         }
  144.        
  145.         @Override
  146.         public String getDisplayName() {
  147.             return getName();
  148.         }
  149.        
  150.         @Override
  151.         public void addPropertyChangeListener(PropertyChangeListener pcl) {
  152.             //do nothing, won't change
  153.         }
  154.        
  155.         @Override
  156.         public void removePropertyChangeListener(PropertyChangeListener pcl) {
  157.             //do nothing, won't change
  158.         }
  159.        
  160.         @Override
  161.         public Project getProject() {
  162.             return DroidProject.this;
  163.         }      
  164.     }
  165.  
  166.    
  167.  DroidProject(FileObject dir, ProjectState state) {
  168.      //throw new UnsupportedOperationException("Not yet implemented");
  169.      this.projectDir = dir;
  170.      this.state  = state;
  171.  }
  172.  
  173.  @Override public FileObject getProjectDirectory() {
  174.      //throw new UnsupportedOperationException("Not supported yet.");
  175.      return projectDir;
  176.  }
  177.  
  178.  @Override public Lookup getLookup() {
  179.      //throw new UnsupportedOperationException("Not supported yet.");
  180.      if (lookup == null) {
  181.          lookup = Lookups.fixed(new Object[] {
  182.              this,
  183.              new Info(),
  184.              new DroidProjectLogicalView(this),
  185.              new DroidCustomizerProvider(this)
  186.          });
  187.      }
  188.      return lookup;
  189.  }
  190. }
  191.