<!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>Platform HTML Editor for NetBeans Platform 7.3</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.3 and NetBeans Platform 7.3. If you
            are using an earlier version of these products, see <a href="72/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/73/netbeans-stamp.png" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 7.3" title="Content on this page applies to NetBeans IDE 7.3"/></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.3 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>-->
        <p>At the end of this tutorial, you will have an 
            HTML Editor that looks like this:</p>

        <p><img src="../images/tutorials/htmleditor/73/pic10.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/73/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/73/pic2.png" alt="New Project wizard"/></p>
                    <br/>
                    <p>Click Finish. The skeleton application is created:</p>
                    <br/>
                    <p><img src="../images/tutorials/htmleditor/73/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/73/pic4.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/73/pic5.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
                        the application's 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/73/pic7.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></li>
                <li><p>Also select the "Lexer to NetBeans Bridge" module in the <tt>ide</tt> cluster, as shown below:</p>
                    <br/>
                    <p><img src="../images/tutorials/htmleditor/73/pic8.png" alt="Application panel"/></p>
                </li>
                <li><p>Finally select the "User Utilities" module in the <tt>ide</tt> cluster, as shown below:</p>
                    <br/>
                    <p><img src="../images/tutorials/htmleditor/73/pic9.png" alt="Application panel"/></p>
                    <p>Now you have the subset of NetBeans modules relevant to your HTML Editor. Click OK
                        to exit the Project Properties dialog.</p></li>
                <li><p>Right-click
                        the application and run it. Choose File | Open File and then
                        open some HTML files. You should see a fully functional HTML editor:</p>
                    <br/>
                    <p><img src="../images/tutorials/htmleditor/73/pic10.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/73/pic11.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.3">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>
