<!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 Sample Module Tutorial for NetBeans Platform 7.2</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 creating project samples."/>
        <!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
        <!--     Use is subject to license terms.-->
    </head>
    <body>
        <h1>NetBeans Project Sample Module Tutorial</h1>

        <p>This tutorial demonstrates how to create a module that adds a sample
            to the New Project wizard. The sample could function either as an example
            to the user or as a new project template that provides the basic files needed to
            get started working on a technology of some kind.</p>

        <p><strong class="notes">Note: </strong>This document uses NetBeans Platform 7.2 and
            NetBeans IDE 7.2. If you
            are using an earlier version, see <a href="71/nbm-projectsamples.html">the previous version
                of this document</a>.</p>

        <p><b>Contents</b></p>

        <p><img src="../images/articles/72/netbeans-stamp.gif" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 7.2" title="Content on this page applies to NetBeans IDE 7.2"/></p>
        <ul class="toc">
            <li><a href="#into">Introduction to Project Samples</a></li>
            <li><a href="#creatingthemoduleproject">Creating the Module Project</a></li>
            <li><a href="#creatingandgettingtoknowthemainfiles">Bundling the Sample Application</a></li>
            <li><a href="#building">Building and Installing the Module</a>
                <ul>
                    <li><a href="#installing-the-nbm">Installing the NetBeans Module</a></li>
                    <li><a href="#using-the-nbm">Using the NetBeans Module</a></li>
                    <li><a href="#creating-the-nbm">Creating a Shareable Module Binary</a></li>
                </ul></li>
            <li><a href="#tweaking">Tweaking the Module</a>
                <ul>
                    <li><a href="#icon">Changing the Icon</a></li>
                    <li><a href="#category">Changing the Category</a></li>
                    <li><a href="#description">Changing the Description</a></li>
                    <li><a href="#panel">Adding a Panel</a></li>
                    <li><a href="#sources">Updating the Sources</a></li>
                </ul></li>

        </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 7.2 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 above</td>
                </tr>
            </tbody>
        </table>

        <h2><a name="intro"></a>Introduction to Project Samples</h2>

        <p>Using two wizards in the IDE&#8212;the New Module Project wizard and the
            New Project Template wizard&#8212;you can very easily create a module that
            contains your technology's project samples. No coding of any kind is needed in
            order to do this. The wizards do all the work for you. In fact, if you find yourself
            doing any coding at all, you are possibly doing something wrong. Coding should only
            be necessary in a small set of corner cases.</p>
        <p>When you complete this tutorial, you will have a module that contains
            your samples. The intended users of your samples
            can then simply use the Plugin Manager to install the module. As a result, the samples
            will appear in the New Project wizard.</p>

        <p>At the end of this tutorial, the New Project wizard will contain a new sample,
            called "My Sample Application":</p>

        <p><img alt="" src="../images/tutorials/mysample/72/proj-temp-4.png" alt="changing the description"/></p></li>

        <p>In addition to showing how to create a module containing a sample,
            you will be instructed on some ancillary topics, such as how to change
            the icon and description in the New Project wizard, and how to regenerate
            the sample after modifying its sources.</p>

        <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.</p>
        <div class="indent">

            <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>AdditionalSamples</tt> in the Project Name field.
                    Change the Project Location to any directory on your computer. Click Next.</li>
                <li>In the Basic Module Configuration panel, type <tt>org.myorg.additionalsamples</tt>
                    in Code Name Base. Click Finish.</li>
            </ol>
        </div>
        <p> The IDE creates the <tt>AdditionalSamples</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).</p>

        <!-- ===================================================================================== -->
        <h2><a name="creatingandgettingtoknowthemainfiles"></a>Bundling the Sample Application</h2>
        <p>Now that we have a module project, which gives us our source structure,
            we simply run through another wizard that will bundle our sample. You simply
            need to select it in the wizard and then the wizard will
            generate all the required classes and registration
            details for you.</p>
        <div class="indent">
            <ol>

                <li>Right-click the project node and 
                    choose New &gt; Other. Under Categories, select NetBeans Module Development. Under Projects, 
                    select Project Template. Click Next.</li>
                <li><p>In the Select Project panel, select the project
                        that you want to bundle as a sample, as shown below.</p>
                    <br/>
                    <p><img alt="" src="../images/tutorials/mysample/72/proj-temp-5.png" alt="changing the description"/></p>
                    <br/>
                    <p><b class="notes">Note:</b> Only projects that
                        are open in the IDE are shown in
                        the Project drop-down above. To bundle
                        an external project as a sample, use the
                        Browse button to locate it in your
                        filesystem.</p>
                    <br/>
                    <p>Click Next.</p></li>

                <li><p>In the Name and Location panel, type <tt>MySampleApplication</tt> as the template name,
                        type <tt>My Sample Application</tt> as the display name,
                        and select Samples | Java in the Category drop-down, as 
                        shown below:</p>
                    <br/>
                    <p><img alt="" src="../images/tutorials/mysample/72/proj-temp-6.png" alt="Name and location panel."/></p>
                    <br/></li>
                <li>Click Finish.</li>
            </ol>
        </div>

        <p> The IDE creates the following:</p>
        <p><img alt="" src="../images/tutorials/mysample/72/proj-temp-2.png" alt="Name and location panel."/></p></li>

        <ul>
            
            <li><tt>MySampleApplication.png.</tt> Image copied from the icon of the sample.</li>
            <li><tt>MySampleApplicationDescription.html.</tt> Description text to be displayed in the
                New Project dialog's description field.</li>
            <li><tt>MySampleApplicationPanelVisual.</tt>
                <br><tt>MySampleApplicationWizardIterator.java.</tt>
                    <br><tt>MySampleApplicationWizardPanel.java.</tt> A <tt>JPanel</tt>, with a supporting wizard class, and an iterator
                    used in the New Project wizard to create the sample. You do not need
                    to understand how these work, unless you want to. Later in this tutorial,
                    these classes are discussed, although they are not necessary to understand
                    in most scenarios involving the creation of project samples.</li>
            <li><tt>MySampleApplicationProject.zip.</tt> A ZIP file containing your sample.</li>
        </ul>

        <!-- ======================================================================================= -->

        <h2><a name="building"></a>Building and Installing the Module</h2>
        <p>The IDE uses an Ant build script to build and install your module. The build script is created for you
            when you create the module project.</p>
        <div class="indent">

            <h3 class="tutorial"><a name="installing-the-nbm"></a>Installing the NetBeans Module</h3>

            <p>In the Projects window, right-click the <tt>AdditionalSamples</tt> project and choose Install/Reload
                in Target Platform.</p>
            <p>The module is built and installed in a new instance of NetBeans IDE or
                other application created on the NetBeans Platform. The application opens so that you
                can try out the functionality provided by your new module.</p>

            <h3 class="tutorial"><a name="using-the-nbm"></a>Using the NetBeans Module</h3>

            <p>In this section, we take on the role of the user of our sample. After a user
                installs our module, either explicitly or because it is part of the application
                they started up, they will typically take the steps outlined below.</p>
            <div class="indent">
                <ol>
                    <li><p>Choose File &gt; New Project (Ctrl-Shift-N). The New Project wizard opens and displays
                            the new project sample:</p>
                        <br/>
                        <p><img alt="" src="../images/tutorials/mysample/72/proj-temp-4.png" alt="changing the description"/></p></li>
                    <li><p>Select the new project sample and click Next. 
                            Type a name in the project name field and define a project location.</p> 
                        <br/>
                        <p><img alt="" src="../images/tutorials/mysample/72/proj-temp-4a.png" alt="changing the description"/></p></li>
                            
                            <p>Click Finish.
                            The Projects window opens and
                            displays the newly created project sample.</p></li>
                </ol>
            </div>
            <h3 class="tutorial"><a name="creating-the-nbm"></a>Creating a Shareable Module Binary</h3>

            <p>To make our sample available to our users, we need to create an NBM file, which
                is a binary NetBeans module file, containing our sample.</p>
            <div class="indent">
                <ol>
                    <li><p>In the Projects window, right-click the <tt>AdditionalSamples</tt> 
                            project and choose Create NBM. The NBM file is created
                            and you can view it in the Files window (Ctrl-2):</p>
                        <br/>
                        <p><img alt="" src="../images/tutorials/mysample/72/proj-temp-7.png" alt="changing the description"/></p></li>
                    <li>Make it available to others via, for example, e-mail. Or create your own NetBeans
                        Update Center and publish it there. Or publish it in the <a href="http://plugins.netbeans.org/PluginPortal/">NetBeans Plugin Portal</a>.</li>
                </ol>
            </div>
        </div>

        <!-- ======================================================================================= -->

        <h2><a name="tweaking"></a>Tweaking the Sample</h2>

        <p>In this section, we perform some typical tasks
            that you might want to perform after completing
            the New Project Template wizard, in order to finetune
            your sample. For example, you might want to change the
            sample's icon, description, and similar items.</p>
        <div class="indent">
            <h3 class="tutorial"><a name="icon"></a>Changing the Icon</h3>
            <p>Optionally, you can change the icon you chose when
                you worked through the New Project Template wizard.</p>
            <p>
                Within the annotation at the top of the iterator class,
                the <tt>iconBase</tt> attribute reflects your icon choice:</p>
            <pre class=examplecode>@TemplateRegistration(
        folder = "Project/Samples/Standard", 
        displayName = "#MySampleApplication_displayName", 
        description = "MySampleApplicationDescription.html", 
        <b>iconBase = "org/myorg/additionalsamples/MySampleApplication.png",</b> 
        content = "MySampleApplicationProject.zip")</pre>          

            <p>Manually change the icon, by adding it to your module,
                and changing its name and location in the annotation
                shown above.</p>

            </p>


            <h3 class="tutorial"><a name="category"></a>Changing the Category</h3>
            <p>When we used the New Project Template wizard, we assigned the
                sample to a category. Afterwards, we can put it in a different category,
                using the <tt>folder</tt> attribute to do so:</p>
            <p>
                Within the annotation at the top of the iterator class,
                the <tt>iconBase</tt> attribute reflects your icon choice:</p>
            <pre class=examplecode>@TemplateRegistration(
        <b>folder = "Project/Samples/Standard"</b>, 
        displayName = "#MySampleApplication_displayName", 
        description = "MySampleApplicationDescription.html", 
        iconBase = "org/myorg/additionalsamples/MySampleApplication.png",
        content = "MySampleApplicationProject.zip")</pre>          

            </p>


            <h3 class="tutorial"><a name="description"></a>Changing the Description</h3>
            <p>Next, we can change the sample's description, which is shown
                in the New Project wizard. As with the icon, a default
                description is provided when you create a module containing
                a sample. However, you can easily change that description.</p>
            <div class="indent">

                <ol>
                    <li><p>Open the file shown below and notice the default text shown in the editor:</p>
                        <br/>
                        <p><img alt="" src="../images/tutorials/mysample/72/proj-temp-3.png" alt="changing the description"/></p></li>
                    <li>Change the text, reinstall the module, and notice the changed
                        description in the New Project wizard.</li>
                </ol>
            </div>

            <h3 class="tutorial"><a name="description"></a>Adding a Panel</h3>
            <p>In the previous section, we changed the iterator,
                which resulted in a different panel being shown. Possibly,
                however, there is no existing iterator to cater to your
                specific needs. In this section, we learn how to
                add a new panel to the wizard. We do this by reusing the
                iterator that the New Project Template wizard creates
                for us.</p>
            <div class="indent">
                <ol>
                    <li>Use the Wizard wizard to create a new wizard panel
                        which, just like the panel created by the New Project Template
                        wizard, consists of a <tt>JPanel</tt> and a wizard class.</li>
                    <li>Instantiate the new wizard panel in the iterator's 
                        <tt>createPanels()</tt> method, as shown here:

                        <pre class=examplecode>private WizardDescriptor.Panel[] createPanels() {
    return new WizardDescriptor.Panel[] {
        <b>//This is the wizard panel, created by the
        //New Project Template wizard:</b>
        new MySampleApplicationWizardPanel()
        <b>//This is the new wizard panel, created by the
        //New Wizard wizard:</b>
        //new MySampleApplicationWizardPanel1()
    };
}</pre>

                        <p>You only need to add your new wizard panel to the method
                            above, and then it will be instantiated when the
                            sample's wizard is invoked by the user in the New
                            Project wizard.</p></li>

                    <li>Finally, you need to add a new string
                        to the iterator's <tt>createSteps()</tt> method,
                        so that your new wizard panel is accompanied
                        by a string in the left sidebar of the wizard:

                        <pre class=examplecode>private String[] createSteps() {
    return new String[] {
        NbBundle.getMessage(MySampleApplicationWizardIterator.class, "LBL_CreateProjectStep"),
        <b>NbBundle.getMessage(MySampleApplicationWizardIterator.class, "LBL_CreateProjectStep1")</b>
    };
}</pre> 

                        <p>You only need to add the line in bold above, and then
                            define the key/value pair in the <tt>Bundle.properties</tt> file.</p></li>

                </ol>
            </div>

            <h3 class="tutorial"><a name="sources"></a>Updating the Sources</h3>
            <p>When you change the sample's sources, how do you update the module
                that bundles the sample? Do you need to recreate the module project, work
                through the New Project Template wizard again, and then recreate the NBM file?
                No. The only part of the sample module project that is impacted by changes
                in the original sample's sources is the ZIP file. The ZIP file contains the sources,
                and those are the only pieces that are affected when you make changes to the
                original project. Hence, you simply need to recreate the ZIP file. To simplify this,
                if you add the following Ant target to the <tt>build.xml</tt> file of
                the project where you created the sources, you can regenerate the ZIP file from inside the IDE
                and automatically have it copied to the sample module's source structure right away.</p>

            <pre class=examplecode>&lt;target name="zipme" description="Zip the application to the sample project"&gt;
    &lt;property name="build.classes.dir" location="/home/NetBeansProjects/AdditionalSamples"/&gt;
    &lt;property name="examples" location="${build.classes.dir}/src/org/myorg/additionalsamples/"/&gt;
    &lt;zip basedir="../MySampleApplication" destfile="${examples}/MySampleApplicationProject.zip"&gt;
        &lt;exclude name="**/build/"/&gt;
        &lt;exclude name="**/dist/"/&gt;
        &lt;exclude name="**/nbproject/private/"/&gt;
    &lt;/zip&gt;
&lt;/target&gt;</pre>

            <p>In the above Ant target, the <tt>build.classes.dir</tt> property points to the location
                of your sample module project, which is probably different in your scenario than is
                indicated above. </p>

            <p><b class="notes">Note:</b> We exclude some folders from the ZIP file, because these are
                not needed in the sample module project and, in fact, would cause problems if they were
                not excluded.</p>

        </div>

        <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Project%20Sample%20Module%207.2%20Tutorial">Send Us Your Feedback</a></div>
        <!-- ======================================================================================== -->

        <h2><a name="nextsteps"></a>Next Steps</h2>

        <p>For more information about creating and developing NetBeans modules, see the following resources:</p>
        <ul>
            <li><a href="https://netbeans.org/kb/trails/platform.html">Other Related Tutorials</a></li>
            <li><a href="http://bits.netbeans.org/dev/javadoc/">NetBeans API Javadoc</a></li>
        </ul>

        <!-- ======================================================================================== -->
        <!--
        <h2><a name="version"></a>Versioning </h2>
        
        <p>
        
        <table width="76%" border="1">
            <tbody>
                <tr>
                    <td>
                        <div align="left"><b>Version</b></div>
                    </td>
                    <td>
                        <div align="left"><b>Date</b></div>
                    </td>
                    <td>
                        <div align="left"><b>Changes</b></div>
                    </td>
                </tr>
                <tr>
                    <td>
                        1
                    </td>
                    <td>
                        9 July 2005
                    </td>
                    <td>
                        Initial version
                    </td>
                </tr>
                <tr>
                    <td>
                        2
                    </td>
                    <td>
                        10 July 2005
                    </td>
                    <td>
                        <ul><li>Added the <tt>org.netbeans.modules.java.examples.J2SESampleProjectIterator</tt> wizard
                        as an alternative -- less strict than the web wizard.
                        <li>Expanded the Ant script that zips the project sample, so that it now excludes
                        build, dist, and nbproject/private folders.      
                    </td>
                </tr>
                <tr>
                    <td>
                        3
                    </td>
                    <td>
                        23 August 2005
                    </td>
                    <td>
                        <ul><li>Completely rewrote the tutorial, because of the Project Template wizard.
                        <li>Questions: 
                        <ul><li>What's the Category drop-down for? Select the category
                            in the New Project wizard where the sample will be registered, but
                            not implemented yet. 
                        <li>Layer file indicates that no Bundle file exists, but it does.</ul>
                        <li>To do: 
                        <ul><li>Add details on each of the created files (currently there's only a sentence,
                            this should be expanded).
                            <li>Explain relationship between generated files and resulting project template wizard.
                            <li>Add some post-processing customization steps (e.g., how to put the sample in a 
                            different category in the New Project wizard).
                            <li>Add introductory sentences to each section.
                        <li>Info about XML layer file to be added.</ul>
                    </td>
                </tr>
                <tr>
                    <td>
                        4
                    </td>
                    <td>
                        1 October 2005
                    </td>
                    <td><ul>
                            <li>Worked through the tutorial with today's build and tweaked here and there.
                            <ul>	      <li>No major changes (except, used the Category to put the sample in a category).
                                <li>Created <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=65595">http://netbeans.org/bugzilla/show_bug.cgi?id=65595</a>.
                            </ul>
                            <li>To do: 
                            <ul><li>Add details on each of the created files (currently there's only a sentence,
                                this should be expanded).
                                <li>Explain relationship between generated files and resulting project template wizard.
                                <li>Add some post-processing customization steps (e.g., how to put the sample in a 
                                different category in the New Project wizard).
                                <li>Add introductory sentences to each section.
                        <li>Info about XML layer file to be added.</ul></ul>
                    </td>
                </tr>
                <tr>
                    <td>
                        5
                    </td>
                    <td>
                        8 June 2007
                    </td>
                    <td>Began updating to 6.0. Everything works,
                        just changed screenshots (which were still
                        from 5.0 in some cases, where icons were
                        different), removed references
                        to 5.x, replaced with 6.0, neatened things
                        up here and there.
                        <p>To do:
                        <ul>
                            <li>How to change the icon
                            <li>How to change the description
                            <li>How to change the category
                            <li>How to change the name
                            <li>How to regenerate the sample ZIP
                            <li>How and why to use the panel
                            <li>How to bundle external JARs and <tt>javadoc</tt>
                            <li>Multiple samples in same module
                            <li>Intro sentences in sections
                            <li>Better intro, with New Project wizard
                            screeshot, in the tutorial's introduction
                        </ul>    
                    </td>
                </tr>
                <tr>
                    <td>
                        6
                    </td>
                    <td>
                        April 2008
                    </td>
                    <td>Began and completed updating updating to 6.1, 
                     only new styles needed. In the meantime,
                        most of the above items have been added.                
                         <p>To do:
                        <ul>
                            <li>Multiple samples in same module
                            <li>Discuss existing sample modules in the NetBeans
                            sources and how things have been done, and why.
                        </ul>    
                        </td>
                </tr>
                <tr>
                    <td>
                        7
                    </td>
                    <td>
                        1 November 2008
                    </td>
                    <td>Fixed for 6.5, badge, table. To do: same as above.</td>
                </tr>
                <tr>
                    <td>
                        8
                    </td>
                    <td>
                        July 2010
                    </td>
                    <td>Fixed for 6.9, badge, table. To do: same as above.</td>
                    <td>Fixed error marks.</td>
                </tr>
                <tr>
                    <td>
                        9
                    </td>
                    <td>
                        20 November 2011
                    </td>
                    <td>Updating for 7.2.</td>
                </tr>
                <tr>
                    <td>
                        10
                    </td>
                    <td>
                        30 December 2011
                    </td>
                    <td>Updating for 7.1: Changed all screenshots, removed layer entries,
                        added annotations.</td>
                        - need to show how to remove the other templates
                        - need to show how to add a layer and tweak from there
                        - need to show that the annotation becomes a layer entry
                </tr>
                <tr>
                    <td>
                        11
                    </td>
                    <td>
                        21 July 2012
                    </td>
                    <td>Updating for 7.2: Changed all screenshots, to Windows.</td>
                </tr>
            </tbody>
        </table>-->
    </body>
</html>
