<!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 File Template Module Tutorial for NetBeans Platform 7.1</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 File Template Module Tutorial</h1>

        <p>This tutorial demonstrates how to create a NetBeans module providing file templates. Once your users have installed
            the module in the IDE, the file templates are available to them in the New File wizard. Sharing file templates is easy once you have a module that
            contains them&#8212;the IDE lets you create a binary that you can make available to others, who can then install it through the
            Plugin Manager.</p>

        <p>A file template consists of a template file, an HTML description file, and an icon. The HTML description file
            displays information about the template in the New File wizard. The icon identifies the template and
            distinguishes it from other templates in the New File wizard. In this tutorial,
            you create a new file template by copying the content of an existing file template into an empty file.
            Then, once you have set up a description file for the New File wizard and a distinguishing icon, you
            register the template, the HTML description file, and the icon in the NetBeans configuration file, that is,
            in the <tt>layer.xml</tt> file.</p>


        <p><b class="notes">Note:</b> This document uses NetBeans IDE 7.1 and NetBeans Platform 7.1. If you
            are using an earlier version, see <a href="70/nbm-filetemplates.html">the previous version
                of this document</a>.</p>

        <p><b>Contents</b></p>

        <p><img src="../images/articles/74/netbeans_stamp_74_73_72.png" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 7.1" title="Content on this page applies to NetBeans IDE 7.1"/></p>
        <ul class="toc">
            <li><a href="#freemarker">Introduction to FreeMarker</a></li>
            <li><a href="#creatingthemoduleproject">Creating the Module Project</a></li>
            <li><a href="#creatingandgettingtoknowthemainfiles">Creating the File Template</a>
                <ul>
                    <li><a href="#creating-the-template-file">Creating the Template File</a></li>
                    <li><a href="#creating-the-description-file">Creating the Description File</a></li>
                    <li><a href="#getting-an-icon">Getting an Icon</a></li>
                </ul></li>
            <li><a href="#registering">Registering the File Template</a></li>
            <!--        <li><a href="#multiview">Creating & Registering a MultiView File Template</a></li>-->
            <li><a href="#building">Building and Installing the Module</a></li>
            <li><a href="#additional">Providing Additional Variables</a></li>
            <li><a href="#license">Providing a Project License</a></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.1 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 7 or above</td>
                </tr>
            </tbody>
        </table>

        <h2 class="tutorial"><a name="freemarker"></a>Introduction to FreeMarker</h2>

        <p>Since NetBeans IDE 6.0, you have been able to optionally use the <a href="http://freemarker.org/">FreeMarker</a>
            template language to define your file templates. Several of the templates that are bundled
            with the IDE are defined in this way. For example, the Java class template is defined as
            follows:</p>

        <pre class="examplecode">&lt;#assign licenseFirst = "/*"&gt;
&lt;#assign licensePrefix = " * "&gt;
&lt;#assign licenseLast = " */"&gt;
&lt;#include "../Licenses/license-${project.license}.txt"&gt;

&lt;#if package?? && package != ""&gt;
package ${package};

&lt;/#if&gt;
/**
 *
 * @author ${user}
 */
public class ${name} {

}</pre>

        <p>The benefit of using FreeMarker can be seen in the template above, that is, you can
            add <i>logic</i> to your templates, via <i>directives</i> such as
            if/elseif/else and loop constructs. For a full description of FreeMarker template
            language, see the <a href="http://freemarker.org/docs/index.html">FreeMarker Manual</a>,
            in particular, the <a href="http://freemarker.org/docs/dgui_template_directives.html">Directives</a>
            chapter. In
            this tutorial, you will be shown, among other things, the steps you need to take to incorporate FreeMarker
            into your file templates.</p>



        <!-- ===================================================================================== -->

        <h2 class="tutorial"><a name="creatingthemoduleproject"></a>Creating the Module Project</h2>


        <p>We begin by going through the New Module Project wizard,
            which will create a source structure, with all the minimum
            requirements, for our new module.</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>AdditionalFileTemplates</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.additionalfiletemplates</tt>
                    in Code Name Base. Click Finish.</li>
            </ol>

        </div>

        <p> The IDE creates the <tt>AdditionalFileTemplates</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="creating-the-file-template"></a>Creating the File Template</h2>
        <p>A file template consists of a template file, an HTML description file, and an icon. An easy way to
            create a new file template is to copy the content of an existing file template into an empty file.
            Then, once you have set up a description file for the New File wizard and a distinguishing icon, you
            are ready to register the template in the <tt>layer.xml</tt> file.</p>

        <div class="indent">
            <h3 class="tutorial">Creating the Template File</h3><a name="creating-the-template-file"></a>
            <p>The template file defines the content that the template will generate for the user.</p>
            <div class="indent">

                <ol>
                    <li>Right-click the <tt>AdditionalFileTemplates</tt> node and choose New &gt; Other.
                        In the New File wizard, under Categories, choose Other and under File Types, choose HTML. Click Next.</li>
                    <li><p>Type <tt>HTML</tt>
                            in File Name. Click Browse and browse to <tt>src/org/myorg/additionalfiletemplates</tt>. Click Select Folder. 
                            Click Finish. A new HTML file, named <tt>HTML.html</tt>,
                            opens in the Source Editor, containing the standard
                            HTML file's content shown below:</p>

                        <pre class="examplecode">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
  &lt;/head&gt;
  &lt;body&gt;
     TODO write content
  &lt;/body&gt;
&lt;/html&gt;</pre></li>


                    <li>Change the HTML file according to your needs. You can add the following predefined variables, if needed:

                        <ul>
                            <li>${date} inserts the current date, in this format: Feb 16, 2008</li>
                            <li>${encoding} inserts the default encoding, such as: UTF-8</li>
                            <li>${name} inserts the name of the file.</li>
                            <li>${nameAndExt} inserts the name of the file, together with its extension.</li>
                            <li>${package} inserts the name of the package where the file is created.</li>
                            <li>${time} inserts the current time, in this format: 7:37:58 PM</li>
                            <li>${user} inserts the user name.</li>
                        </ul>

                        <p><b class="notes">Note:</b> Your users will be able to set values for these
                            variables in the Template Manager, which is under the Tools menu.
                            There, they will click the Settings button and a file named
                            <tt>user.properties</tt> will open in the Source Editor. In this file,
                            users can set the above values, to override those provided by default. Typically,
                            however, they will not do this, because the default values of the above
                            variables will do the job fine.</p>

                        <p class="tips"> In addition to the predefined variables, you can provide additional variables to your users,
                            via your module. This is explained later in this tutorial. The full 
                            list of FreeMarker directives can also be used to add logic to the template:</p>

                        <ul>
                            <li>#assign</li>
                            <li>#else</li>
                            <li>#elseif</li>
                            <li>#end</li>
                            <li>#foreach</li>
                            <li>#if</li>
                            <li>#include</li>
                            <li>#list</li>
                            <li>#macro</li>
                            <li>#parse</li>
                            <li>#set</li>
                            <li>#stop</li>
                        </ul>

                        <p>As an example, look at the definition of the Java class template:</p>

                        <pre class="examplecode">&lt;#assign licenseFirst = "/*"&gt;
&lt;#assign licensePrefix = " * "&gt;
&lt;#assign licenseLast = " */"&gt;
&lt;#include "../Licenses/license-${project.license}.txt"&gt;

&lt;#if package?? && package != ""&gt;
package ${package};

&lt;/#if&gt;
/**
 *
 * @author ${user}
 */
public class ${name} {

}</pre>

                        <p>For information on the #assign directive, see <a href="#license">Providing a Project License</a>.
                            For a full description of FreeMarker template
                            language, see the <a href="http://freemarker.org/docs/index.html">FreeMarker Manual</a>,
                            in particular, the <a href="http://freemarker.org/docs/dgui_template_directives.html">Directives</a>
                            chapter.
                        </p></li>
                </ol>

            </div>

            <h3 class="tutorial"><a name="creating-the-description-file"></a>Creating the Description File</h3>
            <p>The description file is an HTML file displayed in the New File  dialog for the template.</p>
            <div class="indent">

                <ol>
                    <li>Right-click the <tt>org.myorg.additionalfiletemplates</tt> node and choose New &gt; Other.
                        Under Categories, choose Other. Under File Types, choose HTML File. Click Next. Type <tt>Description</tt>
                        in File Name. Click Browse and browse to <tt>src/org/myorg/additionalfiletemplates</tt>. Click Select Folder. 
                        Click Finish. An empty HTML file opens in the Source Editor and its node appears in the Projects window.</p></li>

                    <li>Type "<tt>Creates a new HTML file.</tt>" (without the quotation marks)
                        between the <tt>&lt;body&gt;</tt> tags, so
                        that the file looks as follows:

                        <pre class="examplecode">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
  &lt;/head&gt;
  &lt;body&gt;
     Creates a new HTML file.
  &lt;/body&gt;
&lt;/html&gt;</pre></li>

                </ol>

            </div>

            <h3 class="tutorial"><a name="getting-an-icon"></a>Getting an Icon</h3>

            <p>The icon accompanies the file template in the New File wizard. It identifies it
                and distinguishes it from other file templates. The icon must have a dimension of 16x16 pixels.</p>
            <div class="indent">
                <ol>
                    <li>Name the icon, for example, <tt>icon.png</tt>. Below, the name "Datasource.gif" is used.</li>
                    <li>Paste it in the <tt>org.myorg.additionalfiletemplates</tt> package.</li>
                </ol>
            </div>
        </div>

        <!-- ===================================================================================== -->

        <h2><a name="registering"></a>Registering the File Template</h2>
        <p>Once you have defined the file template, the description file, and the icon,
            you register them in the NetBeans virtual filesystem. 
            The <tt>layer.xml</tt> file
            is made for this purpose. The file is automatically created and populated via
            the @TemplateRegistration annotation used in the steps below.</p>
        <div class="indent">
            <ol>
                <li>Right-click the module in the Projects window, choose Properties,
                    and use the Libraries tab to add dependencies on Datasystems API
                    and Utilities API.</li>
                <li><p>Create a new Java class named <tt>package-info.java</tt> and define its content as
                        follows:</p>
                    <pre class="examplecode">@TemplateRegistration(
        folder = "Other",
        iconBase="org/myorg/additionalfiletemplates/Datasource.gif", 
        displayName = "#HTMLtemplate_displayName", 
        content = "HTML.html",
        description = "Description.html",
        scriptEngine="freemarker")
@Messages(value = "HTMLtemplate_displayName=Empty HTML file")
package org.myorg.additionalfiletemplates;

import org.netbeans.api.templates.TemplateRegistration;
import org.openide.util.NbBundle.Messages;
                    </pre></li>
                <li><p>Make sure that the structure of the module is as follows:</p>
                    <p><img src="../images/tutorials/filetemplates/71/module-structure.png" alt="New File wizard."></img></p></li>
                </li>
            </ol>
        </div>

        <!-- ======================================================================================= -->
        <!--
            <h2><a name="multiview"></a>Creating & Registering a MultiView File Template</h2>
            <p>In this section, you learn how to create a template that will
                 produce a file that can be used in the "Matisse" GUI Builder.</p>
        
            <p><b>Note:</b> For troubleshooting purposes, <a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=14239">download</a>
                the related plugin which provides the module described in this section.</p>
        
            <div class="indent">
        
                <ol>
        
                    <li>In the IDE, create the file that you want to turn into a file template.
                        For example, create a JPanel Form from the New File wizard in the IDE.</li>
        
                    <li>Outside the IDE, in your file system, you will find two files that, together,
                        consitute the file you created in the IDE. Copy the content of the two files
                        into empty files in your module. For example, in your module,
                        create a file named "NewJPanel_form"
                        and another file named "NewJPanel_java". Then copy the content of the two
                        files from outside the IDE into your two files in your module.</li>
        
                    <li>In your module, create an HTML file for the description text to be displayed
                        in the New File wizard. For example, create a file named "MyJPanel.html"
                        containing the file template descroption.</li>
        
                    <li>In the layer.xml file, register the files described
                        above as follows,
                         instead of the approach taken in the previous section:
        
        <pre class="examplecode">&lt;folder name="Templates"&gt;
            &lt;folder name="Java"&gt;
                &lt;file name="MyDemoJPanel.java" url="NewJPanel_java"&gt;
                    &lt;attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.form.resources.Bundle"/&gt;
                    &lt;attr name="position" intvalue="200"/&gt;
                    &lt;attr name="template" boolvalue="true"/&gt;
                    &lt;attr name="instantiatingWizardURL" urlvalue="nbresloc:/org/demo/jpaneltemplate/MyJPanel.html"/&gt;
                    &lt;attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/form/resources/palette/frame_16.png"/&gt;
                    &lt;attr name="SystemFileSystem.icon32" urlvalue="nbresloc:/org/netbeans/modules/form/resources/palette/frame_32.png"/&gt;
                    &lt;attr name="instantiatingIterator" methodvalue="org.netbeans.modules.form.wizard.TemplateWizardIterator.create"/&gt;
                    &lt;attr name="javax.script.ScriptEngine" stringvalue="freemarker"/&gt;
                    &lt;attr name="templateCategory" stringvalue="java-forms"/&gt;
                &lt;/file&gt;
                &lt;file name="MyDemoJPanel.form" url="NewJPanel_form"&gt;
                    &lt;attr name="template" boolvalue="true"/&gt;
                &lt;/file&gt;
            &lt;/folder&gt;
        &lt;/folder&gt;</pre>
        
                    </li>
                </ol>
         
        </div>
        -->
        <!-- ======================================================================================= -->

        <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">
            <ol>
                <li>In the Projects window, right-click the project and choose Run. 
                    The module is built and installed in a new
                    instance of the development IDE. </li>

                <li>Choose File &gt; New Project (Ctrl-Shift-N) and create a new project.</li>
                <li><p>Right-click the project and choose New &gt; Other. The New File dialog opens and displays
                        the new file template. It should look something like this, although
                        your icon will probably be different:</p>
                    <p><img src="../images/tutorials/filetemplates/71/new-file.png" alt="New File wizard."></img></p></li>
                <li>Select the new file template and complete the wizard. When you click Finish, the Source Editor
                    displays the newly created template.</li>
            </ol>
        </div>
        <!-- ===================================================================================== -->

        <h2><a name="additional"></a>Providing Additional Variables</h2>
        <p>As discussed earlier, you can supplement
            predefined variables such as ${user} and ${time}, with your own. For example,
            you can define your template like this, if you want to pass in a variable
            representing a list of names:</p>

        <pre class="examplecode">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;

&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  
        &lt;#list names as oneName&gt;
            &lt;b&gt${oneName}&lt;/b&gt
        &lt;/#list&gt;

  &lt;/body&gt;
&lt;/html&gt;</pre>

        <p>Above, the FreeMarker #list directive iterates through a variable called "names",
            with each instance being called "oneName". Each value of the iteration is then
            printed in the file, between bold tags. The value of "names" could come from a variety
            of places, typically from a wizard panel, where the user, in this case, would
            have selected a set of names from a list.</p>

        <p>To enable the above, that is, to iterate through
            a new variable, see 
            <a href="http://netbeans.dzone.com/news/freemarker-netbeans-ide-60-first-scenario">FreeMarker in NetBeans IDE 6.0: First Scenario</a>
            and then see the discussion of <tt>DataObject.createFromTemplate(df, targetName, hashMap)</tt> in
            <a href="http://blogs.oracle.com/geertjan/entry/freemarker_baked_into_netbeans_ide1">this blog entry</a>.</p>

        <!-- ===================================================================================== -->

        <h2><a name="license"></a>Providing a Project License</h2>


        <p>One point that has not been discussed yet relates to the FreeMarker #assign directive,
            which is only relevant if you are interested in enabling the user to generate a project license when
            the file is created. To cater to your user's licensing needs, you can provide licensing
            directives in the file template. Then all files within the user's project will be created with
            the licensing directives that you have provided. </p>

        <p>To make sense of this, take the following steps:</p>
        <div class="indent">

            <ol>
                <li>Go to the Tools menu. Choose Templates. Open the Java | Java Class template 
                    in the editor:
                    <p><img  alt="" src="http://blogs.oracle.com/geertjan/resource/freemarker-in-nb-2.png"/></p></li>

                <li>The template above, and the ramifications of defining it 
                    in FreeMarker, have been discussed above. However, let's look
                    specifically at the first four lines:

                    <pre>&lt;#assign licenseFirst = "/*"&gt;
&lt;#assign licensePrefix = " * "&gt;
&lt;#assign licenseLast = " */"&gt;
&lt;#include "../Licenses/license-${project.license}.txt"&gt;</pre>

                    <p>These four lines have to do with <i>licensing</i>. The last line 
                        determines the license that will be used, per project. The first 
                        three determine the characters in front of and behind each line in the
                        license. Above are the four lines for Java source files. Here is
                        the same set of definitions that you will find at the start of the Properties file template:</p>

                    <pre>&lt;#assign licensePrefix = "# "&gt;
&lt;#include "../Licenses/license-${project.license}.txt"&gt;</pre>

                    <p>The first line tells us that each line in the license will be prefixed 
                        with a "# ", instead of with a "*", which is the prefix for Java source 
                        files (with "/*" for the first line and " */" for the last line). To verify
                        this, create a Java source file and then create a Properties file. 
                        You will see a license in both cases. However, the characters prefixing 
                        and postfixing each line is different, because of the above definitions.</p></li>

                <li>Next, let's look at the license itself. Notice this line in the templates above:

                    <pre>&lt;#include "../Licenses/license-${project.license}.txt"&gt;</pre>

                    <p>In particular, notice this part:</p>

                    <pre>${project.license}</pre>

                    <p>Put that, as a key, in your application's <tt>nbproject/project.properties</tt> file. 
                        Now add a value. For example:</p>

                    <pre>project.license=apache</pre>

                    <p>Now look in the Template Manager again, in the Licenses folder. You see 
                        some templates there. Create a new one called "<tt>license-apache.txt</tt>".
                        For now, you can just copy an existing one and paste it in the same category
                        in the Template Manager. Then, next time that you create a file that is defined
                        by a FreeMarker template that includes this line:</p>

                    <pre>&lt;#include "../Licenses/license-${project.license}.txt"&gt;</pre>

                    <p>...you will have the specified license embedded within the newly created file.</p></li>

            </ol>
        </div>

        <p>In summary, since NetBeans IDE 6.0, you are able to let the user define, per project, the license that
            each of its files should display. Plus, imagine if the user needs to create a new 
            project with a different license. Assuming the user has a set of licenses defined
            in the Template Manager, using a new license is as simple as adding that one
            key/value pair to the <tt>nbproject/project.properties</tt> file. That was not
            possible before but, thanks to FreeMarker support, 
            is possible now. For further reading about licensing, especially the comments at the end of it,
            see  <a href="http://blogs.oracle.com/geertjan/date/20071126">this blog entry</a>.</p>

        <p></p>
        <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20NetBeans%20File%20Template%20Module%20Tutorial">Send Us Your Feedback</a></div>

        <!-- ======================================================================================== -->

        <h2><a name="nextsteps"></a>Next Steps</h2>

        <p>For more information about creating and developing NetBeans Module, see the following resources:</p>
        <ul>
            <li><a href="https://netbeans.org/kb/trails/platform.html">Other Related Tutorials</a></li>
            <li><a href="https://netbeans.org/download/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>
                        26 June 2005
                    </td>
                    <td>
                        Initial version
                    </td>
                </tr>
                <tr>
                    <td>
                        2
                    </td>
                    <td>
                        28 June 2005
                    </td>
                    <td>
                        <ul>
                        <li>Added bold tags to descriptor file to show that Description box displays HTML tags
                        <li>Ordering attributes added
                        <li>Display names moved to Bundle.properties
                        <li>Screenshot in "Using the NetBeans Plug-in" changed
                        <li>Added ".template" as extension to the "BrandedJavaClass" file, because the <tt>layer.xml</tt>
                        looks for a file called "BrandedJavaClass.template". Also changed the screenshot of the Projects window
                        at the end of the "Creating the File Template" section to reflect the ".template" extension.
                    </td>
                </tr>
                <tr>
                    <td>
                        3
                    </td>
                    <td>
                        2 October 2005
                    </td>
                    <td>
                        <ul>
                        <li>Went through the whole tutorial with the latest build. Made several changes,
                        mainly because the Templates replaces the Options window for templates.
                        <li>Added new 2nd and 3rd paragraphs to the introduction, to explain that this
                        tutorial isn't necessary if you're creating a new file type.
                    </td>
                </tr>
                <tr>
                    <td>
                        4
                    </td>
                    <td>
                        3 October 2005
                    </td>
                    <td>
                        <ul>
                        <li>Changed templateWizard[Iterator|URL] in layer.xml to  instantiating[Iterator|WizardURL] 
                        because templateWizard[Iterator|URL] is going to be deprecated.</ul>
                    </td>
                </tr>
                <tr>
                    <td>
                        5
                    </td>
                    <td>
                        16 March 2006
                    </td>
                    <td>
                        <ul>
                            <li>Went through whole tutorial and tweaked line spacing a little bit, everything works fine still.
                            <li>Need to replace screenshots because icons are a bit different.
                            <li>Need to add icon to the doc, not just refer to the location.
                            <li>Need to show how multiple file templates can be created simultaneously
                            from the New File wizard. </ul>
                    </td>
                </tr>
                  <tr>
                    <td>
                        6
                    </td>
                    <td>
                        12 September 2006
                    </td>
                    <td>
                        <ul>
                            <li>Went through whole tutorial in NetBeans IDE 5.5 Beta 2.
                            <li>No problems, worked exactly as described.
                            <li>Updated some screenshots.
                            <li>Fixed indentations in code. </ul>
                    </td>
                </tr>
                <tr>
                    <td>
                        7
                    </td>
                    <td>
                        9 June 2007
                    </td>
                    <td>
                        Started updating to NetBeans 6.
                    </td>
                </tr>
                <tr>
                    <td>
                        8
                    </td>
                    <td>
                        16 February 2008
                    </td>
                    <td>
                        Started migrating the info from <a href="http://blogs.oracle.com/geertjan/entry/freemarker_baked_into_netbeans_ide1">this blog entry</a>,
                        <a href="http://blogs.oracle.com/geertjan/entry/freemarker_baked_into_netbeans_ide2">this blog entry</a>, and
                        <a href="http://blogs.oracle.com/geertjan/date/20071126">this blog entry</a>, and
                        <a href="http://netbeans.dzone.com/news/freemarker-netbeans-ide-60-first-scenario">this article</a>
                        into this tutorial.
                    </td>
                </tr>
                <tr>
                    <td>
                        9
                    </td>
                    <td>
                        15 April 2008
                    </td>
                    <td>
                        Updated the styles (badge, table of contents, required software table)
                        to the new format.
                    </td>
                </tr>
                <tr>
                    <td>
                        10
                    </td>
                    <td>
                        31 October 2008
                    </td>
                    <td>
                        Updated to 6.5 (badge, version numbers, requirement table).
                    </td>
                </tr>
                <tr>
                    <td>
                        11
                    </td>
                    <td>
                        16 February 2010
                    </td>
                    <td>
                        - Went through and made sure all tags were correct, etc,
                          using the HTML editor error marks as guidance.
                        - Added the section "Creating & Registering a MultiView File Template"
                    </td>
                </tr>
                <tr>
                    <td>
                        12
                    </td>
                    <td>
                        20 November 2011
                    </td>
                    <td>
        Updated for 7.1, with @TemplateRegistration.
                    </td>
                </tr>
            </tbody>
        </table>
        -->
    </body>
</html>
