<!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 Platform HTML Editor for NetBeans Platform 7.2</title>
        <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/>
        <meta name="AUDIENCE" content="NBUSER"/>
        <meta name="TYPE" content="ARTICLE"/>
        <meta name="EXPIRES" content="N"/>
        <meta name="developer" content="jtulach@netbeans.org"/>
        <meta name="indexed" content="y"/>
        <meta name="description"
              content="A short guide to creating an HTML editor on the NetBeans Platform."/>
        <!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
        <!--     Use is subject to license terms.-->
    </head>
    <body>
        <h1>NetBeans Platform HTML Editor</h1>

        <p>This tutorial provides a very simple and quick introduction to 
            the NetBeans Platform workflow by walking you through the creation 
            of a simple HTML Editor. Though simple to create, the HTML Editor you create
            will be a mature application because it will reuse the infrastructure provided
            by the NetBeans Platform, as well as several modules from NetBeans IDE.
            For example, without any coding, your
            HTML Editor will have a mature window system, which it reuses
            from the NetBeans Platform.
            Once you are done with this tutorial, you 
            will have a general understanding of how to create, build, and run 
            applications on top of the NetBeans Platform.</p>

        <p>After you finish this tutorial, you can move on to the 
            <a href="https://netbeans.org/kb/trails/platform.html">NetBeans Platform learning trail</a>.
            The learning trail provides comprehensive tutorials 
            that highlight a wide range of NetBeans APIs for a variety of application types. 
            If you do not want to do a "Hello World" application, you can skip this 
            tutorial and jump straight to the learning trail.</p>

        <p><b class="notes">Note:</b> This document uses NetBeans IDE 7.2 and NetBeans Platform 7.2. If you
            are using an earlier version of these products, see <a href="71/nbm-htmleditor.html">the 
                previous version
                of this document</a>.
            If this is your first encounter with the NetBeans Platform,
            you are recommended to work through the <a href="nbm-quick-start.html">NetBeans Platform Quick Start</a> before
            continuing with this one. If, instead of learning how to create a NetBeans Platform
            application, you would like to learn how to create a NetBeans plugin,
            see the <a href="nbm-google.html">NetBeans Plugin Quick Start</a>.</p>

        <p><b>Contents</b></p>

        <p><img src="../../images/articles/72/netbeans-stamp.gif" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 7.2" title="Content on this page applies to NetBeans IDE 7.2"/></p>
        <ul class="toc">
            <li><a href="#generating">Generating the Skeleton Application</a></li>
            <!--            <li><a href="#tweakingthemenuitems">Tweaking the User Interface: Removing Menus and Toolbars</a></li>
                        <li><a href="#tweakingthewindowlayout">Tweaking the Window Layout: Opening Windows by Default</a></li>
                        <li><a href="#tweakingthefavorites">Tweaking the Favorites Window: Customizing Predefined Strings</a></li>
                        <li><a href="#tweakingthefeatures">Tweaking the Feature Set: Adding Versioning Support</a></li>-->
            <li><a href="#distributingtheapplication">Distributing the Application</a>
                <ul>
                    <li><a href="#zip">Distributing the HTML Editor via a ZIP File</a></li>
                    <li><a href="#webstart">Distributing the HTML Editor via the Shared NetBeans Web Start Repository</a></li>
                </ul>
            </li>
        </ul>

        <p><b>To follow this tutorial, you need the software and resources listed in the following 
                table.</b></p>

        <table>
            <tbody>
                <tr>
                    <th class="tblheader" scope="col">Software or Resource</th>
                    <th class="tblheader" scope="col">Version Required</th>
                </tr> 
                <tr>
                    <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
                    <td class="tbltd1">version 7.2 or above</td>
                </tr>
                <tr>
                    <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td>
                    <td class="tbltd1">version 6 or above</td>
                </tr>
            </tbody>
        </table>

        <!--  <p class="tips">Optionally, for troubleshooting purposes, you can <a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=6635">download the
                  completed sample</a> and inspect the sources.</p>-->
        <br/>
        <p>At the end of this tutorial, you will have an 
            HTML Editor that looks like this:</p>

        <p><img src="../../images/tutorials/htmleditor/72/result-1.png" alt="Finding the Favorites window"/></p>

        <p><b class="notes">Note:</b> Although this a very simple demo application, it is not a toy! It is a <i>real</i>
            program that supports easy editing of HTML pages, with features such as code completion,
            validation, and predefined HTML snippets.</p>

        <p>The HTML Editor that you create in this tutorial is a rich-client application built "on top of the NetBeans Platform". What this
            means is that the core of the IDE, which is what the NetBeans Platform <i>is</i>, will be the base
            of your application. On top of the NetBeans Platform, you add the modules that you need
            and exclude the ones that the IDE needs but that your application doesn't.
            Here you see some of the IDE's modules, added to the NetBeans Platform, which is its base:</p>

        <p><img src="../../images/tutorials/htmleditor/diagram.png" alt="Structure of NetBeans Platform applications"/></p>

        <p>Creating this HTML Editor means generating an application skeleton, excluding the modules
            and user interface items that you do not need, and then setting the NetBeans IDE's Favorites window
            as the window that will open by default when the IDE starts. The Favorites window will
            be rebranded so that it will be a browser for HTML documents. All of these activities
            are supported by user interface elements in the IDE, as you will learn in this tutorial. </p>

        <p>You will see for yourself how simple
            and easy it is to build, or to be more precise, to <em>assemble</em> a
            full-featured application on top of the NetBeans Platform. At the end, you are shown how
            to make the final product easily downloadable and launchable using WebStart.
        </p>


        <p><b class="notes">Note:</b> Even though it is a separate product, there is no need to download the NetBeans Platform separately
            for purposes of this tutorial. You will develop the rich-client application in the IDE and then exclude the modules
            that are specific to the IDE but that are superfluous to you application.</p>

        <!-- ===================================================================================== -->

        <h2 class="tutorial"><a name="generating"></a>Generating the Skeleton Application</h2>

        <p>When creating an application on the NetBeans Platform,
            the very first step is to create a NetBeans Platform Application project.
            The template we will use to create our new NetBeans Platform Application project
            includes a subset of the modules provided by the NetBeans Platform.</p>

        <div class="indent">

            <ol>
                <li><p>Using the New Project wizard (Ctrl-Shift-N), create a NetBeans Platform Application Project from the template
                        in 
                        the NetBeans modules category, as shown below:</p>
                    <br/>
                    <p><img src="../../images/tutorials/htmleditor/72/pic1.png" alt="New Project wizard"/></p>
                </li>

                <li><p>Click Next and name the NetBeans Platform Application project "NetBeansHTMLEditor":</p>
                    <br/>
                    <p><img src="../../images/tutorials/htmleditor/72/pic2.png" alt="New Project wizard"/></p>
                    <br/>
                    <p>Click Finish. The skeleton application is created:</p>
                    <br/>
                    <p><img src="../../images/tutorials/htmleditor/72/pic3.png" alt="New Project wizard"/></p>
                </li>

                <li><p>We'll start by using the IDE to brand
                        our new application. Right-click the project node, choose Branding,
                        and then make a few changes in the Branding Editor:</p>
                    <br/>
                    <ul><li><p>In the Basic panel, make
                                sure that you like the application title for the titlebar,
                                as well as the icons, as shown below:</p>
                            <br/>
                            <p><img src="../../images/tutorials/htmleditor/72/pic-props-1.png" alt="Application panel"/></p></li>
                        <li><p>In the Splash Screen panel, notice that
                                you can provide the application's splash screen, and progress
                                bar brandings, as shown below:</p>
                            <br/>
                            <p><img src="../../images/tutorials/htmleditor/72/pic-props-2.png" alt="Splash Screen panel"/></p>
                            <br/>
                            <p><b class="notes">Note:</b> If you do not have a splash screen, use <a href="../images/tutorials/htmleditor/splash.gif">this one</a></p>.
                        </li>
                    </ul>
                </li>

                <li><p>Now that the application has been branded, let's make
                        sure that the modules we need for our HTML editor are
                        available to the application. Right-click the project node,
                        choose Properties, and then go to the Libraries panel
                        in the Project Properties
                        dialog box. Here you see a list of "clusters". A cluster is
                        a collection of related modules and represents a folder in
                        your installation directory. The only clusters that need to be 
                        selected are, in the first place, <tt>platform</tt>, which is already selected,
                        but expand it and <i>also</i> select "favorites", which provides the
                        Favorites window that you will use to open HTML files later.
                        Next, expand the <tt>ide</tt> cluster, and
                        select all the HTML modules in the "ide" cluster, as shown below:</p>
                    <br/>
                    <p><img src="../../images/tutorials/htmleditor/72/pic-lib-1.png" alt="Application panel"/></p>
                    <br/>
                    <p>Next, click the "Resolve" button and the required modules
                        will be added to the set of modules needed by
                        modules that you have already selected to be
                        part of the application.</p>
                    <p>Finally, also select the "Lexer to NetBeans Bridge" module, as shown below:</p>
                    <br/>
                    <p><img src="../../images/tutorials/htmleditor/72/pic-lib-2.png" alt="Application panel"/></p>
                </li>

                <li><p>Now you have the subset of NetBeans modules relevant to your HTML Editor. Right-click
                        the application and run it, open the Favorites window (from the Window menu), and then
                        open an HTML file. You should see a fully functional HTML editor:</p>
                    <br/>
                    <p><img src="../../images/tutorials/htmleditor/72/result-1.png" alt="Application panel"/></p>
                </li>

            </ol>

        </div>

        <!--        <p>Even though you need all the NetBeans modules that you now have, you probably do not
                    need all of the user interface elements, such as all the elements in the Run menu
                    and the Debug menu, that these modules give you. In the next sections,
                    you tweak the user interface and customize the window layout specifically for the HTML Editor
                    that you are creating.</p>-->
        <!--
                 ===================================================================================== 
        
                <h2 class="tutorial"><a name="tweakingthemenuitems"></a>Tweaking the User Interface: Removing Menus and Toolbars</h2>
        
                <p>You can keep or reject as much of the user interface that your selected modules give you. For example, your HTML Editor probably
                    does not need any or all of the items under the Tools menu. Similarly, maybe there are toolbars
                    or toolbar buttons that you can do without. In this section, you prune the IDE's user interface
                    until you are left with a subset that is useful to your specific rich-client application.</p>
        
                <div class="indent">
        
                    <ol><li><p>Expand the NetBeans Platform Application project, right-click the Modules node
                                and choose Add New, as shown below:</p>
        
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz9.png" alt="New Project wizard"/></p>
        
                            <p>The New Project wizard (Ctrl-Shift-N) appears.</p></li>
                        <li>Name the project <tt>BrandingModule</tt>. Click Next.</li>
        
                        <li>In the Code Name Base field, type <tt>org.netbeans.brandingmodule</tt> and then
                            complete the wizard.</li>
                        <li><p>Next, you need a "layer.xml" file, which the NetBeans Platform will merge with its
                                virtual filesystem. The layer.xml file will declare the items 
                                that should be added to or removed
                                from the virtual filesystem of your HTML Editor.</p>
                            <p>Right-click the module, choose New, and then Other, as shown below:</p>
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz91.png" alt="New Project wizard"/></p>
                            <p>In the New File dialog, choose "Module Development | XML Layer" and then complete the wizard.</p>
                            <p>Notice that you can expand the newly created layer.xml file and show all the
                                folders and files declared in the NetBeans Platform's virtual filesystem.</p>
                        </li>
                        <li><p>In the <tt>&lt;this layer in context&gt;</tt> node,
                                the IDE shows you a merged view of all folders and files that all modules register in their
                                layers. To exclude items, you can right-click them and choose 'Delete', as shown below:
                            </p>
                            <p><img style="border:1px solid black" src="../../images/tutorials/htmleditor/71/new-nb-app-wiz92.png" alt="Application panel"/></p>
        
                            <p>The IDE then adds
                                tags to the module's <tt>layer.xml</tt> file which, when the module is installed,
                                hides the items that you have deleted. For example, by right-clicking within <tt>Menu Bar/Edit</tt>, you can remove
                                menu items from the Edit menu that are not necessary for the HTML Editor. 
                                By doing this, you generate snippets such as the following in the <tt>layer.xml</tt> file:</p>
        
                            <pre class="examplecode">&lt;folder name="Menu"&gt;
            &lt;folder name="Edit"&gt;
                &lt;file name="org-netbeans-modules-editor-MainMenuAction$StartMacroRecordingAction.instance_hidden"/&gt;
                &lt;file name="org-netbeans-modules-editor-MainMenuAction$StopMacroRecordingAction.instance_hidden"/&gt;
            &lt;/folder&gt;       
        &lt;/folder&gt;</pre>
        
                            <p>
                                The result of the above snippet is that the <tt>Start Macro Recording</tt> and <tt>Stop Macro Recording</tt>
                                actions provided by another module are removed from the menu by your branding module.
                                To show them again, simply delete the tags above from the <tt>layer.xml</tt> file.</p></li>
                        <li>Use the approach described in the previous step to hide as many toolbars, toolbar buttons,
                            menus, and menu items as you want. When you have completed this stage, look in the <tt>layer.xml</tt> file. When you do so,
                            you should see something similar to the following, depending on the items that you have deleted:
        
                            <pre class="examplecode">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
        &lt;!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "https://netbeans.org/dtds/filesystem-1_2.dtd"&gt;
        &lt;filesystem&gt;
            &lt;folder name="Menu"&gt;
                &lt;file name="BuildProject_hidden"/&gt;
                &lt;folder name="File"&gt;
                    &lt;file name="Separator2.instance_hidden"/&gt;
                    &lt;file name="SeparatorNew.instance_hidden"/&gt;
                    &lt;file name="SeparatorOpen.instance_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-CloseProject.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-CustomizeProject.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-NewFile.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-NewProject.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-OpenProject.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-RecentProjects.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-SetMainProject.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-groups-GroupsMenu.shadow_hidden"/&gt;
                &lt;/folder&gt;
                &lt;file name="Refactoring_hidden"/&gt;
                &lt;file name="RunProject_hidden"/&gt;
                &lt;folder name="Window"&gt;
                    &lt;file name="ViewRuntimeTabAction.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-logical-tab-action.shadow_hidden"/&gt;
                    &lt;file name="org-netbeans-modules-project-ui-physical-tab-action.shadow_hidden"/&gt;
                &lt;/folder&gt;
            &lt;/folder&gt;
            &lt;folder name="Toolbars"&gt;
                &lt;file name="Build_hidden"/&gt;
                &lt;file name="Debug_hidden"/&gt;
            &lt;/folder&gt;
        &lt;/filesystem&gt;</pre>
                        </li>
                        <li><p>Run the application again and notice that you now have less menus and toolbar
                                buttons than you had before:</p>
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz93.png" alt="New Project wizard"/></p>
        
                        </li>
                    </ol>
        
                </div>
        
                 =====================================================================================         
        
                <h2 class="tutorial"><a name="tweakingthewindowlayout"></a>Tweaking the Window Layout: Opening Windows by Default</h2>
                <p>
                    By using the  <tt>&lt;this layer in context&gt;</tt> node, you can not only delete existing
                    user interface elements, but you can also change their content. For example, the
                    HTML Editor works on HTML files, so in contrast to the regular IDE, which works with Java source files and projects as well,
                    it makes sense to show the <tt>Favorites</tt> window in the initial layout.
                </p>
        
                <p>
                    The definition of the window layout is also described as files in layers,
                    all stored under the <tt>Windows2</tt> folder. The files in the <tt>Windows2</tt> folder are
                    pseudo-human readable XML files defined by the 
                    <a href="http://bits.netbeans.org/dev/javadoc/org-openide-windows/org/openide/windows/doc-files/api.html">
                        Window System APIs</a>. They are quite complex but the good news is
                    that, for purposes of our HTML Editor, it is not necessary
                    to understand them fully, as shown below.
                </p>
        
                <div class="indent">
        
                    <ol><li><p>In your branding module, find the "layer.xml" file,
                                in the main package of the module. Expand the file,
                                in the Projects window. One of the subfolders is
                                name <tt>&lt;this layer in context&gt;</tt>. Expand
                                the folder and find the <tt>Windows2/Modes</tt> subfolder.
                                Within it, find the file highlighted below, named "favorites.wstcref":</p>
        
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz94.png" alt="Finding the Favorites window"/></p>
        
                            <p>
                                The file contains the following:
                            </p>
                            <pre class="examplecode">
        &lt;tc-ref version="2.0"&gt;
            &lt;module name="org.netbeans.modules.favorites/1" spec="1.1" /&gt;
            &lt;tc-id id="favorites" /&gt;
            &lt;state opened="false" /&gt;
        &lt;/tc-ref&gt;</pre>    
                            <p>Even though most of the XML is cryptic, there is one line which 
                                seems promising&#8212;without needing to read 
                                any kind of documentation, it seems likely that
                                changing the <tt>false</tt> to <tt>true</tt> is going to make the component
                                opened by default. Do so now.</p></li>
        
                        <li>
                            <p>You should now see that your branding module contains a new file,
                                one for each of the files that you changed. In effect, these files
                                override the ones that you found in the previous steps. These have
                                been automatically registered in your module's <tt>layer.xml</tt> file.</p>
                            <p>Run the application again and you should see the following, that is,
                                the Favorites window should be opened automatically when the
                                application has started up:</p>
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz95.png" alt="Finding the Favorites window"/></p>
                        </li>
        
                    </ol>
        
                </div>
        
        
                 =====================================================================================      
        
                <h2 class="tutorial"><a name="tweakingthefavorites"></a>Tweaking the Favorites Window: Customizing Predefined Strings</h2>
                <p>
                    In the subfolders of a NetBeans Platform Application project's <tt>branding</tt>
                    folder, which
                    is visible in the Files window, you
                    can override strings defined in the NetBeans Platform sources. In
                    this section, you override strings that define
                    labels used in the Favorites window. For example, you
                    change the "Favorites" label to "HTML Files",
                    because you will use that window specifically for
                    HTML files.
                </p>
        
                <div class="indent">
        
                    <ol><li><p>Right-click the project node and choose "Branding", as you did
                                earlier in this tutorial. This time, open the Resource Bundles
                                tab of the Branding Editor, as shown below:</p>
        
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz96.png" alt="Finding the Favorites window"/></p>
        
                        </li>
                        <li><p>Type "favorites" in the "Search" field, after which the
                                list of strings filters down to those that
                                contain the entered string, as shown below:</p>
        
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz97.png" alt="Finding the Favorites window"/></p>
        
                        </li>
                        <li><p>For each string you want to brand, right-click it in
                                the dialog shown in the previous step and choose
                                "Add To Branding". Then type the new string
                                for the selected item.</p>
                            <p>When you complete your work in the Branding Editor, switch to
                                the Files window and notice that a new "bundle.properties"
                                file has been created within the application branding folder,
                                overriding the related "bundle.properties" file within the
                                NetBeans Platform:</p>
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz98.png" alt="Finding the Favorites window"/></p>
        
                        </li>
        
                        <li><p>Run the application again and you will see that
                                the texts and labels in the Favorites window have changed
                                to those you have defined:</p>
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz99.png" alt="Finding the Favorites window"/></p>
                        </li>
        
                    </ol>
        
                </div>
        
                <p>This illustrates the point that you can take
                    a component from the NetBeans Platform and then brand it to
                    meet your business requirements.</p>
        
        
                 =====================================================================================      
        
                <h2 class="tutorial"><a name="tweakingthefeatures"></a>Tweaking the Feature Set: Adding Versioning Support</h2>
                <p>
                    We now have a complete HTML Editor. However, since the editor is based
                    on top of NetBeans IDE, we can include as many of the IDE's features
                    as we need. 
                </p>
                <p>As an example, let's add versioning support in our application. It would
                    be a useful feature for our users, who are likely to have a repository
                    where HTML files can be stored. By integrating the IDE's versioning tools
                    into our HTML editor, we enable our users to interact with their
                    repositories.</p>
        
                <div class="indent">
        
                    <ol><li><p>Right-click the application, choose Properties, and
                                use the Libraries tab to add the "Local History" module, 
                                which is in the "ide" cluster:</p>
        
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz992.png" alt="Finding the Favorites window"/></p>
                            <p>Now click the "Resolve" button, so that any related
                                modules will also be included in the application.</p>
                        </li>
                        <li><p>Run the application again and notice that
                                you now have a History tab for each HTML document,
                                as well as a new "Team" menu, currently
                                containing one item, for Local History:</p>
        
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz993.png" alt="Finding the Favorites window"/></p>
        
                        </li>
                        <li><p>Repeat step 1 above, this time selecting "Mercurial":</p>
        
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz994.png" alt="Finding the Favorites window"/></p>
                            <p>Again, click the "Resolve" button, so that any related
                                modules will also be included in the application.
                                Also find the Subversion modules and add them to the
                                application. When you run the application again, the Team
                                menu shows the additional versioning tools that
                                have been included:</p>
                            <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz995.png" alt="Finding the Favorites window"/></p>
                        </li>
                    </ol>
        
                </div>
        
                <p>This illustrates the point that you can include additional
                    modules from NetBeans IDE and the NetBeans Platform to
                    include new features in your application.</p>
                 =====================================================================================      
        -->
        <h2 class="tutorial"><a name="distributingtheapplication"></a>Distributing the Application</h2>
        <p>
            Choose one of two approaches for distributing
            your application. If you want to maintain as much
            control over your application as possible, you will
            use web start (JNLP) to distribute your application over the web.
            In this scenario, whenever you want to update the application,
            you will do so locally and let your end users know about the
            update, which they will automatically have available next time
            they start up your application over the web. Alternatively, 
            distribute a ZIP file containing your application. The end users
            will then have the complete application locally available. You would
            then distribute updates and new features via the update mechanism,
            described below.</p>

        <div class="indent">


            <h3 class="tutorial"><a name="zip"></a>Distributing the Application via a ZIP File</h3>
            <p> To make your application extendable, you need to let your
                users install modules to enhance the application's
                functionality. To do so, your application is already bundling the Plugin Manager.
            </p>

            <div class="indent">

                <ol>
                    <li>Choose the Tools | Plugins menu item and install
                        some plugins that are useful to your HTML Editor.
                        Browse the <a href="http://plugins.netbeans.org/PluginPortal/">Plugin Portal</a>
                        to find some suitable ones. This is also how your end users will update their
                        local installation of your application.</li>

                    <li>Right-click the application's project node and
                        choose Build ZIP Distribution.</li>



                    <li><p>In the <tt>dist</tt> folder (visible in the
                            Files window), you should now be able to see
                            a ZIP file, as follows:</p>

                        <p><img src="../../images/tutorials/htmleditor/71/new-nb-app-wiz991.png" alt="Finding the Favorites window"/></p>

                        <p><b class="notes">Note:</b> The application's launcher is created in
                            the <tt>bin</tt> folder, as shown above.</p></li>
                </ol>

            </div>

        </div>

        <!-- ======================================================================================== -->

        <div class="indent">


            <h3><a name="webstart"></a>Distributing the HTML Editor via the Shared NetBeans Web Start Repository</h3>

            <p>
                Instead of distributing a ZIP file, let's prepare for
                a webstart distribution by finetuning the <tt>master.jnlp</tt> file that is
                generated the first time you start the application via "Run JNLP Application". Even though it does the job, it
                is not yet ready for distribution. At the very least, you need to change the
                information section to provide better descriptions and icons.</p>

            <p>
                Another change to the standard JNLP infrastructure is the use of a 
                shared JNLP repository on www.netbeans.org. By default, the JNLP application
                generated for a suite always contains all its modules as well as all the modules it depends on.
                This may be useful for intranet usage, but it is a bit less practical for
                wide internet use. When on the internet, it is much better if all the 
                applications built on the NetBeans Platform refer to one repository of
                NetBeans modules, which means that such modules are shared and 
                do not need to be downloaded 
                more than once.
            </p>

            <p>
                There is such a repository for NetBeans Platform. It does not contain all
                the modules that NetBeans IDE has, but
                it contains enough to make most of non-IDE applications like our HTML Editor
                possible.
                To use the repository, you only need to modify the application's
                <tt>platform.properties</tt>
                by adding the correct URL:
            </p>
            <pre class="examplecode">
# share the libraries from common repository on netbeans.org
# this URL is for release72 JNLP files:
jnlp.platform.codebase=http://bits.netbeans.org/7.2/jnlp/
            </pre>    
            <p>Similarly, for 7.1:</p>
            <pre class="examplecode">
# share the libraries from common repository on netbeans.org
# this URL is for release71 JNLP files:
jnlp.platform.codebase=http://bits.netbeans.org/7.1/jnlp/
            </pre>    
            <p>Similarly, for 7.0:</p>
            <pre class="examplecode">
# share the libraries from common repository on netbeans.org
# this URL is for release70 JNLP files:
jnlp.platform.codebase=http://bits.netbeans.org/7.0/jnlp/
            </pre>    
            <p>Similarly, for 6.9:</p>
            <pre class="examplecode">
# share the libraries from common repository on netbeans.org
# this URL is for release69 JNLP files:
jnlp.platform.codebase=http://bits.netbeans.org/6.9/jnlp/
            </pre>    
            <p>
                As soon as the application is started as a JNLP application, all its shared plug-in modules
                are going to be loaded from netbeans.org and shared with other
                applications doing the same.</p>
        </div>
        <!--========================================================================================-->
        <p></p>
        <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20NetBeans%20HTML%20Editor%20Tutorial%207.2">Send Us Your Feedback</a></div>
        <!--========================================================================================-->

        <h2><a name="nextsteps"></a>See Also</h2>

        <p>This concludes the NetBeans HTML Editor Tutorial. 
            For more information about creating and developing applications on the NetBeans Platform, 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>

        <!-- ======================================================================================== -->


    </body>
</html>
