blob: 571d5e58aec93af0d2c60cb7a53c4ec110e6e56a [file] [log] [blame]
<!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>