<!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>File Template Module Tutorial for NetBeans Platform</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, 2011, 2012, 2013, 2014 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><strong class="notes">Note: </strong>This document uses NetBeans Platform 8.0 and
            NetBeans IDE 8.0. If you
            are using an earlier version, see <a href="74/nbm-filetemplates.html">the previous version
                of this document</a>.</p>

        <p><b>Contents</b></p>

        <p><img src="../images/articles/81/netbeans-stamp.png" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 8.0" title="Content on this page applies to NetBeans IDE 8.0"/></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 8.0 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>

        <p class="tips">For troubleshooting purposes, you are welcome to download the <a href="http://java.net/projects/nb-api-samples/sources/api-samples/show/versions/8.0/tutorials/AdditionalFileTemplates">completed tutorial source code</a>.</p>

        <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>Right-click the <tt>org.myorg.additionalfiletemplates</tt> node 
                        and choose New > Other. Under Categories, choose Java. 
                        Under File Types, choose Java Package Info. 
                        Click Next. Click Finish. A Java class named <tt>package-info.java</tt>
                        is created. Redefine 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>
