<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <!-- -*- xhtml -*- -->
    <title>NetBeans Project Type Extension Module Tutorial for NetBeans Platform 6.5</title>
    <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css">
    <meta name="AUDIENCE" content="NBUSER">
    <meta name="TYPE" content="ARTICLE">
    <meta name="EXPIRES" content="N">
    <meta name="developer" content="gwielenga@netbeans.org">
    <meta name="indexed" content="y">
    <meta name="description"
          content="A short guide to using the Nodes API.">
    <!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
    <!--     Use is subject to license terms.-->
</head>
<body>
    <h1>NetBeans Project Type Extension Module Tutorial</h1>
    
    <p>This tutorial demonstrates how to extend an existing project type. 


     <p><strong class="notes">Note: </strong>This document uses the NetBeans IDE 6.5 Release. If you
    are using an earlier version, see <a href="60/nbm-projectextension.html">the 6.0/6.1 version
    of this document</a>.

     <p><b>Contents</b></p>
   
   <img  src="../images/articles/68/netbeans-stamp-65-67-68.gif" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 6.5, 6.7, 6.8" title="Content on this page applies to NetBeans IDE 6.5, 6.7, 6.8"> </p>
      <ul class="toc">
        <li><a href="#intro">Introduction to Project Extensions</a></li>
        <li><a href="#creatingthemoduleproject">Creating the Module Project</a></li>
        <li><a href="#settingdependencies">Setting Dependencies</a>
        <li><a href="#registeringextensions">Registering the New Extensions</a>
        <li><a href="#extendingthelookup">Extending the Lookup</a>
        <li><a href="#extendingthelogicalview">Extending the Logical View</a>
        <li><a href="#building">Installing the Module</a>
       </ul>
         
<p><b>To follow this tutorial, you need the software and resources listed in the following 
table.</b></p>

    <table>
        <tbody>
            <tr>
                <th class="tblheader" scope="col">Software or Resource</th>
                <th class="tblheader" scope="col">Version Required</th>
            </tr>
            <tr>
                <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
                <td class="tbltd1">version 6.5 or above</td>
            </tr>
            <tr>
                <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td>
                <td class="tbltd1">Version 6 or<br/>version 5</td>
            </tr>
        </tbody>
    </table>

    <p>You will also make use of this icon, which you
    can right-click here and download: <img src="../images/tutorials/projectextensions/webPagesBadge.gif" />

   <p class="tips">Optionally, for troubleshooting purposes, you can <a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=14034">download the
   completed sample</a> and inspect the sources.

    <h2 class="tutorial"><a name="intro"></a>Introduction to Project Extensions</h2>
    
    <p>New APIs since NetBeans IDE 6.0
        enable you to add new nodes to an existing project type's logical view, additions to an
        existing project type's lookup, and new panels to an existing project type's Project
        Properties dialog box. To illustrate these extensions, we extend the web application
        project type, by adding a new 'Important Files' node, exposing the content of the
    project's 'nbproject' folder, as shown here:</p>
    
    <p><img src="../images/tutorials/projectextensions/result-65.png" alt="New node">
    
    <p>Prior to NetBeans IDE 6.0, no APIs existed for extending existing project types.
    Instead, you would need to create new project types from scratch. From 6.0 onwards, you are
    recommended to extend existing project types rather than create new ones. This will
    keep the number of project types to a minimum and avoid a large number of project
    types with very small differences. However, it is still possible to create project
    types from scratch, as before.
    
    <h2 class="tutorial"><a name="creatingthemoduleproject"></a>Creating the Module Project</h2>
    
        <p>We begin by working through the New Module Project
            wizard. At the end of it, we will have a basic
            source structure, with some default files, that
            every NetBeans module requires.

            <ol>
    <li>Choose File &gt; New Project (Ctrl+Shift+N). Under Categories, select NetBeans Modules.
        Under Projects, select Module. Click Next.</li>
    <li>In the Name and Location panel, type <tt>ImportantWebFiles</tt> in the Project Name field.
        Change the Project Location to any directory on your computer. Leave the Standalone Module option
        and Set as Main Project checkbox selected. Click Next.</li>
    <li>In the Basic Module Configuration panel, type <tt>org.netbeans.modules.importantwebfiles</tt>
     in Code Name Base.
    <li>Select "Generate XML Layer". Leave the
        locations of both the localizing bundle and the XML layer file
        so that they will be stored in a package with
        the name <tt>org/netbeans/modules/importantwebfiles</tt>. Click Finish.</li>
</ol>
    
    <p> The IDE creates the <tt>ImportantWebFiles</tt>
        project. The project contains all of your sources and
        project metadata, such as the project's Ant build script. The project
        opens in the IDE. You can view its logical structure in the Projects window (Ctrl-1) and its
    file structure in the Files window (Ctrl-2). 
    
    <!-- ===================================================================================== -->
    <h2><a name="settingdependencies"></a>Setting Dependencies</h2>
        <p>We will need to make use of several NetBeans APIs. In this
        step, we select the modules that provide the NetBeans APIs
        that we will need.
            
            <ol>
            
            <li>Right-click the project node and 
        choose Properties. The Project Properties dialog box opens.</li>
        <li>In the Libraries panel, add dependencies on the
        following modules:
        
        <ul>
            <li>Datasystems API</li>
            <li>File System API</li>
            <li>Nodes API</li>
            <li>Project API</li>
            <li>Project UI API</li>
            <li>Utilities API</li>
            <li>Web APIs</li>
        </ul>
        
        <p>The Libraries panel should now look as follows:</p>
        
        <p><img border="1" src="../images/tutorials/projectextensions/add-deps.png" alt="Select Project panel.">
        
        <li>Click OK.
            
            </ol>
            
            <!-- ===================================================================================== -->
            <h2><a name="registeringextensions"></a>Registering the New Extensions</h2>
            <p>Before we create the classes that implement
            the APIs that we registered above, we will add
            entries to the layer file.
                
                <ol>
                
                <li><p>Expand the Important Files node and
                double-click the XML Layer node to open
                the file in the editor.</p>
        <li><p>Add the following entries to the layer file:</p>
        
        <pre class=examplecode>&lt;folder name="Projects"&gt;
    
    &lt;folder name="org-netbeans-modules-web-project"&gt;
        
        &lt;folder name="Lookup"&gt;
            &lt;file name="org.netbeans.modules.importantwebfiles.LookupProviderImpl.instance"/&gt;
        &lt;/folder&gt;
        
        &lt;folder name="Nodes"&gt;
            &lt;file name="org.netbeans.modules.importantwebfiles.ImportantFilesNodeFactoryImpl.instance"&gt;
                &lt;attr name="position" intvalue="1200"/&gt;
            &lt;/file&gt;
        &lt;/folder&gt;
        
    &lt;/folder&gt;
    
&lt;/folder&gt;</pre>  
        
        <li><p>In the Important Files node, expand the XML Layer node,
        then expand the 'this layer in context' node. Scroll to the
        Projects node and notice that the changes you made above
        are highlighted, to visually distinguish your extensions 
        from those that were there already:</p>
        
          <p><img border="1" src="../images/tutorials/projectextensions/layer-visualized.png" alt="Select Project panel.">
      
          <p><b>Note:</b> The visual view above is very useful
          in showing you the names of the project types, so
          that you can correctly register extensions to them
          in the layer file.
          
        </ol>
    
     <!-- ===================================================================================== -->
            <h2><a name="extendingthelookup"></a>Extending the Lookup</h2>
            <p>We start by implementing the <tt>LookupProviderImpl</tt>
            class, which we registered in the layer file in the
            previous section.
                
                <ol>
                <li><p>Create a Java class called <tt>LookupProviderImpl</tt>.
                <li><p>Change the default code to the following:</p>
        
        <pre class=examplecode>public class LookupProviderImpl implements LookupProvider {

    public Lookup createAdditionalLookup(Lookup lookup) {
        
        Project prj = lookup.lookup(Project.class);
        
        <b>//If there is a web module provider in the
        //project's lookup, add a new lookup item to
        //the lookup, which we will look for to determine
        //whether a node should be created:</b>
        WebModuleProvider wmp = lookup.lookup(WebModuleProvider.class);
        if (wmp != null) {
            return Lookups.fixed(new MyCoolLookupItem(prj));
        }
        
        <b>//If there is no web module in the lookup,
        //we do not add a new item to our lookup,
        //so that later a node will not be created:</b>
        return Lookups.fixed();
        
    }

}</pre>  

                <li>Create a new Java class called <tt>MyCoolLookupItem</tt>.

                <li>Change the default code to the following:</p>
        
        <pre class=examplecode>public class MyCoolLookupItem {

    public MyCoolLookupItem(Project prj) {
    }

}</pre>  
        
        </ol>
    
     <!-- ===================================================================================== -->
            <h2><a name="extendingthelogicalview"></a>Extending the Logical View</h2>
            <p>We start by implementing the <tt>LookupProviderImpl</tt>
            class, which we registered in the layer file in the
            previous section.
                
                <ol>
                <li><p>Create a Java class called <tt>ImportantFilesNodeFactoryImpl</tt>.
                <li><p>Change the default code to the following:</p>
        
                <pre class=examplecode>public class ImportantFilesNodeFactoryImpl implements <a href="https://netbeans.org/download/dev/javadoc/org-netbeans-modules-projectuiapi/org/netbeans/spi/project/ui/support/NodeFactory.html">NodeFactory</a> {

    Project proj;

    public <a href="https://netbeans.org/download/dev/javadoc/org-netbeans-modules-projectuiapi/org/netbeans/spi/project/ui/support/NodeList.html">NodeList</a> createNodes(Project project) {
      
        this.proj = project;
        
        <b>//If there is no 'nbproject' folder,
        //return an empty list of nodes:</b>
        if (proj.getProjectDirectory().getFileObject("nbproject") == null) {
            return NodeFactorySupport.fixedNodeList();
        }
        
        <b>//If our item is in the project's lookup,
        //return a new node in the node list:</b>
        MyCoolLookupItem item = project.getLookup().lookup(MyCoolLookupItem.class);
        if (item != null) {
            try {
                ImportantFilesNode nd = new ImportantFilesNode(proj);
                return NodeFactorySupport.fixedNodeList(nd);
            } catch (DataObjectNotFoundException ex) {
                Exceptions.printStackTrace(ex);
            }
        }
        
        <b>//If our item isn't in the lookup,
        //then return an empty list of nodes:</b>
        return NodeFactorySupport.fixedNodeList();
        
    }
    
}</pre>  

                <li>Create a new Java class called <tt>ImportantFilesNode</tt>.

                <li>Change the default code to the following:</p>
        
                <pre class=examplecode>public class ImportantFilesNode extends <a href="https://netbeans.org/download/dev/javadoc/org-openide-nodes/org/openide/nodes/FilterNode.html">FilterNode</a> {

    private static Image smallImage = 
          ImageUtilities.loadImage("/org/netbeans/modules/importantwebfiles/webPagesBadge.gif"); // NOI18N

    public ImportantFilesNode(Project proj) throws DataObjectNotFoundException {
        super(DataObject.find(proj.getProjectDirectory().getFileObject("nbproject")).getNodeDelegate());
    }

    public String getDisplayName() {
        return "Important Files";
    }
     
    <b>//Next, we add icons, for the default state, which is
    //closed, and the opened state; we will make them the same. 
    //Icons in project logical views are
    //based on combinations--you must combine the node's own icon
    //with a distinguishing badge that is merged with it. Here we
    //first obtain the icon from a data folder, then we add our
    //badge to it by merging it via a NetBeans API utility method:</b>
    
    public Image getIcon(int type) {
        DataFolder root = DataFolder.findFolder(Repository.getDefault().getDefaultFileSystem().getRoot());
        Image original = root.getNodeDelegate().getIcon(type);
        return ImageUtilities.mergeImages(original, smallImage, 7, 7);
    }

    public Image getOpenedIcon(int type) {
        DataFolder root = DataFolder.findFolder(Repository.getDefault().getDefaultFileSystem().getRoot());
        Image original = root.getNodeDelegate().getIcon(type);
        return ImageUtilities.mergeImages(original, smallImage, 7, 7);
    }
    
}</pre>  
        

<li>Right-click this icon and save it in the main package of your module: <img src="../images/tutorials/projectextensions/webPagesBadge.gif" />
        </ol>
    
        <!-- ======================================================================================= -->
            
        <h2><a name="building"></a>Installing the Module</h2>
        <p>Finally, we install the module and make use of the result.</p>
        <div class="indent">
        
        <ol>
            <li><p>Check that the module looks as follows
            in the Projects window:</p>
            <p><img src="../images/tutorials/projectextensions/proj-window-65.png" alt="finished project">
                <li>Right-click the module project and install it.
                <li>Create a new web application, or open an
                existing one, and notice that it
                has an Important Files node, containing the files
            from the 'nbproject' folder:</p>
            <p><img src="../images/tutorials/projectextensions/result-65.png" alt="installed result">
        </ol>
    
     </div>
      
    
    
    <br>
    <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Project%20Extension%20Module%20Tutorial">Send Us Your Feedback</a></div>
    <br style="clear:both;" />
    <!-- ======================================================================================== -->
    
    <h2><a name="nextsteps"></a>Next Steps</h2>
    
    <p>For more information about creating and developing NetBeans modules, see the following resources: 
    <ul>
        <p><li><a href="https://netbeans.org/kb/trails/platform.html">Other Related Tutorials</a></li>
        <p><li><a href="https://netbeans.org/download/dev/javadoc/">NetBeans API Javadoc</a></li>
    </ul>
</body>
</html>
