<!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 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 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><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-projectsamples.html">the 6.0/6.1 version
    of this document</a>.

     <p><b>Contents</b></p>
   
       <img  src="../images/articles/65/netbeans-stamp65.gif" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 6.5" title="Content on this page applies to NetBeans IDE 6.5"> </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><a href="#building">Building and Installing the Module</a></li>
        <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>
        </ul>
        <li><a href="#tweaking">Tweaking the Module</a></li>
        <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="#iterator">Changing the Iterator</a>
            <li><a href="#panel">Adding a Panel</a>
            <li><a href="#sources">Updating the Sources</a>
        </ul>

       </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</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>

    <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>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>At the end of this tutorial, the New Project wizard will contain a new sample,
    called "My Sample Application":
    
    <p><img border="1" src="../images/tutorials/mysample/new-project-wizard-60.png" alt="New Project wizard.">
    
    <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.
    
    <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>AdditionalSamples</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.myorg.additionalsamples</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/myorg/additionalsamples</tt>. Click Finish.</li>
</ol>
    
    <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>
    
    
    <br />
    
    <!-- ===================================================================================== -->
    <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.
    
    
    <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>In the Select Project panel, select the project that you want to bundle as a sample, as shown below.</p>
        
        <p><img border="1" src="../images/tutorials/mysample/select-project-panel-60.png" alt="Select Project panel.">
        
        <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>Click Next.
        
        <li>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|General in the Category drop-down, as shown below:</p> 
        
        <p><img border="1" src="../images/tutorials/mysample/name-and-location-panel-60.png" alt="Name and location panel.">
        
    <li>Click Finish.</ol>
    
    <p> The IDE creates the following:
        <ul><li><tt>MySampleApplicationProject.zip.</tt> A ZIP file containing your sample.
            <li><tt>MySampleApplicationDescription.html.</tt> An HTML file for the description
            displayed in the New Project wizard's description field.
            <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.
        </ul>
    <p>In addition, the IDE registers the sample in the XML layer file and adds
    localization strings to the <tt>Bundle.properties</tt> file.</ul>
    
    <p>The Projects window should now look as follows:</p>
    
    <p><img border="1" src="../images/tutorials/mysample/final-projects-window-60.png" alt="Initial Projects window.">
    
    
    <br />
    
    
        <!-- ======================================================================================= -->
            
        <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 the target IDE or Platform. The target IDE or Platform opens so that you
            can try out your new module. The default target IDE or Platform is the 
            installation used by the current instance of the development IDE. 
            <p><b class="notes">Note:</b> When you run your module, you will be using 
        a temporary test user directory, not the development IDE's user directory.</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, they typically take the steps outlined below.
            
            <ol>
        <li>Choose File &gt; New Project (Ctrl-Shift-N).</p>
        
        <p>The New Project wizard opens and displays
        the new project sample:</tt>
        <p align="left"><img border="1" src="../images/tutorials/mysample/new-project-wizard-60.png" alt="New Project wizard.">
        <li>Select the new project sample and click Next. The wizard panel appears:</p>
        
        <p><img border="1" src="../images/tutorials/mysample/new-project-wizard2-60.png" alt="New File wizard.">
        <li>Type a name in the project name field. Click Finish.</p>
        <p>The Projects window opens and
        displays the newly created project sample.
        </ol>
        <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, together with supporting
            files such as the <tt>layer.xml</tt> file.
            
        <li>In the Projects window, right-click the <tt>AdditionalSamples</tt> project and choose Create NBM.</p>
        
        <p>The NBM file is created and you can view it in the Files window (Ctrl-2):</p>
        <p><img border="1" src="../images/tutorials/mysample/shareable-nbm-60.png" alt="Shareable NBM.">
        <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>.
        </ol>
    
     </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>First, we change the default icon, after looking at how
                    the icon is defined for other samples.
                    <ol>
                    <li>When you expand the Important Files node, and then
                    the XML Layer node, a node is found, representing the sample's
                    registration in the <tt>layer.xml</tt> file. By right-clicking
                    the node, you can choose Pick Icon, which lets you choose an
                icon to replace that which is provided by default:</p>
                <p><img border="1" src="../images/tutorials/mysample/image-picker-60.png" alt="Picking an image">
                <li>Choose a new icon. When you do so,
                the <tt>layer.xml</tt> file reflects your new choice:
      <pre class=examplecode>&lt;folder name="Templates"&gt;
    &lt;folder name="Project"&gt;
        &lt;folder name="Samples"&gt;
            &lt;folder name="Standard"&gt;
                &lt;file name="MySampleApplicationProject.zip" 
                                url="MySampleApplicationProject.zip"&gt;
                    <b>&lt;attr name="SystemFileSystem.icon" 
                                urlvalue="nbresloc:/org/myorg/additionalsamples/new_icon.png"/&gt;</b>
                    &lt;attr name="SystemFileSystem.localizingBundle" 
                                stringvalue="org.myorg.additionalsamples.Bundle"/&gt;
                    &lt;attr name="instantiatingIterator" 
                                methodvalue="org.myorg.additionalsamples.
                                MySampleApplicationWizardIterator.createIterator"/&gt;
                    &lt;attr name="instantiatingWizardURL" 
                                urlvalue="nbresloc:/org/myorg/additionalsamples/
                                MySampleApplicationDescription.html"/&gt;
                    &lt;attr name="template" boolvalue="true"/&gt;
                &lt;/file&gt;
            &lt;/folder&gt;
        &lt;/folder&gt;
    &lt;/folder&gt;
&lt;/folder&gt;</pre>          

<p>You can also manually change the icon, by adding it to your module,
                and changing its name in the <tt>layer.xml</tt> file
                shown above.
                
                <li>In the <tt>&lt;this layer in context&gt;</tt> node, visible
                 in the screenshot above, you can
                    see the other samples available to your platform. When you
                    do so, you can choose Open Layer File(s), which opens a node's
                    <tt>layer.xml</tt> file which, in this case, is useful in
                ascertaining how other samples' icons are defined:</p>
                <p><img border="1" src="../images/tutorials/mysample/image-picker-layers-60.png" alt="New File wizard.">
         
<p>In the case of the above, in other words, for Java SE samples,
 the icon is defined as follows:
 
<pre>&lt;attr name="SystemFileSystem.icon" 
    urlvalue="nbresloc:/org/netbeans/modules/java/examples/resources/j2seProject.gif"/&gt;</pre>

                <p>If you add the line above to your <tt>layer.xml</tt> file,
                your sample will have the same icon as the other samples
                in the New Project wizard's Samples|General category.
                
                </ol>
        
   
            <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,
         either via the user interface shown in the previous screenshot or manually
            in the <tt>layer.xml</tt> file.</p>
            
                        
                
            <h3 class="tutorial"><a name="description"></a>Changing the Description</h3>
            <p>Next, we 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>
            <ol>
        <li>Open the file shown below and notice the default text shown in the editor:</p>
        <p><img border="1" src="../images/tutorials/mysample/description-change.png" alt="changing the description">
        <li>Change the text, reinstall the module, and notice the changed
         description in the New Project wizard.
        </ol>
        
            <h3 class="tutorial"><a name="iterator"></a>Changing the Iterator</h3>
            <p>The New Project Template wizard creates a very basic
         wizard that the user will work through when getting the
         sample from the New Project wizard. The wizard is basic
         in the sense that it consists of one panel and that the
         panel contains the absolute bare minimum in terms of
         Swing components. In this section, we look at an easy yet
         powerful way of changing the single panel, without
         touching the panel itself.</p>
            <ol>
        <li>Open the <tt>layer.xml</tt> file and notice the highlighted line below:</p>
         <pre class=examplecode>&lt;folder name="Templates"&gt;
    &lt;folder name="Project"&gt;
        &lt;folder name="Samples"&gt;
            &lt;folder name="Standard"&gt;
                &lt;file name="MySampleApplicationProject.zip" 
                            url="MySampleApplicationProject.zip"&gt;
                    &lt;attr name="SystemFileSystem.icon" 
                            urlvalue="nbresloc:/org/myorg/additionalsamples/new_icon.png"/&gt;
                    &lt;attr name="SystemFileSystem.localizingBundle" 
                            stringvalue="org.myorg.additionalsamples.Bundle"/&gt;
                    <b>&lt;attr name="instantiatingIterator" 
                            methodvalue="org.myorg.additionalsamples.
                            MySampleApplicationWizardIterator.createIterator"/&gt;</b>
                    &lt;attr name="instantiatingWizardURL" 
                            urlvalue="nbresloc:/org/myorg/additionalsamples/
                            MySampleApplicationDescription.html"/&gt;
                    &lt;attr name="template" boolvalue="true"/&gt;
                &lt;/file&gt;
            &lt;/folder&gt;
        &lt;/folder&gt;
    &lt;/folder&gt;
&lt;/folder&gt;</pre>          

        <p>That line defines an <i>iterator</i>, which is a class
        that implements <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-dialogs/org/openide/WizardDescriptor.ProgressInstantiatingIterator.html">WizardDescriptor./*Progress*/InstantiatingIterator</a></tt>.
        The iterator specifies the classes that define the panels
        in the wizard, defines the text of the steps shown
        in the wizard, unzips the ZIP file, and applies the
        user-specified settings in the wizard to the unzipped
        objects in the ZIP file. 
        
        <p>The iterator that is found in our <tt>layer.xml</tt> file
        by default makes use of a <tt>JPanel</tt> and wizard class
        that are also created by the New Project template wizard.
        
        <p>In the next step, we change the iterator referenced
        in the <tt>layer.xml</tt> file to the iterator used by
        other samples. When we do so, we will make use of a 
        different iterator, which will result in the panel in
        the wizard showing different content.
        
        <li>As shown in step 3 of the section called <a href="#icon">Changing the Icon</a>,
            use the "Open Layer File(s)" menu item to open the layer file
            of one of the other Samples|General category. Replace the
            iterator defined in your <tt>layer.xml</tt> file with the
        iterator defined there.</p>
         
         <p>You should find that the iterator is defined as
          follows:

<pre>&lt;attr name="instantiatingIterator" 
    newvalue="org.netbeans.modules.java.examples.J2SESampleProjectIterator"/&gt;</pre>


<li>Having made the change outlined above, reinstall the module
and notice that the sample's wizard panel now looks as follows:</p>
 
<p><img border="1" src="../images/tutorials/mysample/set-as-main-project.png" alt="set as main project">
    
<p>Compare this panel to the screenshot in step 2
      of <a href="#using-the-nbm">Using the NetBeans Module</a>
      and notice that we now have a new "Set as Main Project"
      checkbox, which we did not have when we were using
      our default iterator. The reason for this is that our
      default iterator made use of a panel that does <i>not</i>
      have that checkbox.
      
      </ol>
        
      

            <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>
            <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.</p>
        <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.
        
 <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.
        
        </ol>
              
        
            <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><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.
         
        
            
    </div>
    
    
    <br>
    <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Project%20Sample%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>
        <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>
    
    <hr>
    <!-- ======================================================================================== -->
    
    <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/issues/show_bug.cgi?id=65595">http://www.netbeans.org/issues/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>
            
            
            
        </tbody>
    </table>
</body>
</html>
