<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

  <!-- First, a list of API names you may use: -->
  <apidefs>
    <!-- Probably should not be used much: -->
    <apidef name="loaders">Loaders API</apidef>
    <apidef name="editor">Loaders Editor Extensions</apidef>
    <apidef name="awt">Loaders AWT Extensions</apidef>
  </apidefs>

<!-- ACTUAL CHANGES BEGIN HERE: -->

  <changes>
      <change id="folder.templating">
          <api name="loaders"/>
          <summary>DataFolder createFromTemplate improvements</summary>
          <version major="7" minor="82"/>
          <date day="15" month="6" year="2021"/>
          <author login="jtulach"/>
          <compatibility addition="yes" binary="compatible" source="compatible"
                         semantic="incompatible" deletion="no"
                         modification="yes"/>
          <description>
              <code>DataFolder.createFromTemplate</code> honors passed in
              parameters for all its children, unless special
              <code>CreateFromTemplateHandler</code> takes over the
              instantiation process.
          </description>
          <class package="org.openide.loaders" name="DataFolder"/>
      </change>
      <change id="ask.on.save.close.defaults">
          <api name="editor"/>
          <summary>Rebrand defaults for Save/Close Editor Dialogs</summary>
          <version major="7" minor="80"/>
          <date day="20" month="1" year="2021"/>
          <author login="jtulach"/>
          <compatibility addition="yes" binary="compatible" source="compatible"
                         semantic="incompatible" deletion="no"
                         modification="no"/>
          <description>
              A branding API to disable showing on close and on save editor dialogs
              - <a href="architecture-summary.html#group-branding">ASK_OnSaving &amp; ASK_OnClosing</a>.
          </description>
          <class package="org.openide.text" name="DataEditorSupport"/>
      </change>
      <change id="org.openide.loaders.TemplateWizard.setTargetFolderLazy">
          <api name="loaders"/>
          <summary>Support lazy creation of TargetFolder.</summary>
          <version major="7" minor="76"/>
          <date day="1" month="3" year="2020"/>
          <author login="errael"/>
          <compatibility addition="yes" binary="compatible" source="compatible"
                         semantic="compatible" deprecation="no" deletion="no"
                         modification="no"/>
          <description>
              <p>
                  Creation of TargetFolder can be deferred by using
                  <a href="@org-openide-loaders@/org/openide/loaders/TemplateWizard.html#setTargetFolderLazy-java.util.function.Supplier-">
                  TemplateWizard.setTargetFolderLazy(Supplier&lt;DataFolder&gt;)
                  </a>.
              </p>
          </description>
          <class package="org.openide.loaders" name="TemplateWizard"/>
          <issue number="NETBEANS-3918"/>
      </change>
      <change id="org.openide.awt.Toolbar.toggle">
          <api name="awt"/>
          <summary>Separate template handling</summary>
          <version major="7" minor="70"/>
          <date day="27" month="9" year="2018"/>
          <author login="mentlicher"/>
          <compatibility addition="yes" deletion="no" binary="compatible" 
                         source="compatible" deprecation="no"/>
          <description>
              Now it's possible to register actions with
              <a href="@org-openide-awt@/org/openide/awt/Actions.html#ACTION_VALUE_TOGGLE">
              toggle property</a> into Toolbar to get a toggle button.
          </description>
          <class package="org.openide.awt" name="Toolbar"/>
          <issue number=""/>
      </change>
      <change id="org.openide.loaders.DataFolder.SortMode.NATURAL">
          <api name="loaders"/>
          <summary>Introduces SortMode for natural sorting.</summary>
          <version major="7" minor="65"/>
          <date day="21" month="10" year="2015"/>
          <author login="jhavlin"/>
          <compatibility addition="yes" binary="compatible" source="compatible"
                         semantic="compatible" deprecation="no" deletion="no"
                         modification="no"/>
          <description>
              <p>
                  Added support for natural sorting of DataObjects. This means
                  that the sort is case insensitive and number sequences are
                  sorted by value rather than lexicographically.
              </p>
          </description>
          <class package="org.openide.loaders" name="DataFolder"/>
          <issue number="242226"/>
      </change>
      <change id="templates.separation">
          <api name="loaders"/>
          <summary>Separate template handling</summary>
          <version major="7" minor="59"/>
          <date day="14" month="10" year="2014"/>
          <author login="sdedic"/>
          <compatibility addition="no" deletion="no" binary="compatible" 
                         source="incompatible" deprecation="yes"/>
          <description>
              Template handling need not depend on Data System APIs, should be available
              for clients that only know FileSystems. Relevant interfaces moved to
              <code>openide.filesystems.templates</code> module; see javadoc for 
              <a href="@org-netbeans-api-templates@/org/netbeans/api/templates/FileBuilder.html">
                  FileBuilder</a> for details.
          </description>
          <class package="org.openide.loaders" name="CreateFromTemplateAttributesProvider"/>
          <class package="org.openide.loaders" name="CreateFromTemplateHandler"/>
          <issue number=""/>
      </change>
      <change id="org.netbeans.api.templates.TemplateRegistration.targetName">
          <api name="loaders"/>
          <summary>Introduce targetName for templates.</summary>
          <version major="7" minor="56"/>
          <date day="29" month="1" year="2014"/>
          <author login="jhavlin"/>
          <compatibility addition="yes" binary="compatible" source="compatible"
                         semantic="compatible" deprecation="no" deletion="no"
                         modification="no"/>
          <description>
              <p>
                  By default, files created from templates have name
                  preinitialized to "new" + template name.
                  TemplateRegistration.targetName can be used to customize how
                  the file name will be preinitialized.
              </p>
          </description>
          <class package="org.netbeans.api.templates" name="TemplateRegistration" link="no"/>
          <issue number="239028"/>
      </change>
      <change id="org.openide.loaders.DataFolder.SortMode.EXTENSIONS">
          <api name="loaders"/>
          <summary>Introduces SortMode for sorting by file extension.</summary>
          <version major="7" minor="54"/>
          <date day="10" month="10" year="2013"/>
          <author login="jhavlin"/>
          <compatibility addition="yes" binary="compatible" source="compatible"
                         semantic="compatible" deprecation="no" deletion="no"
                         modification="no"/>
          <description>
              <p>It's possible to sort files using sort mode "By Type", which
                  means using SortMode.CLASS. It may be confusing, as users
                  expect that the files will be sorted by file type, i.e. by
                  extension. "By Type" was renamed to "By Class" and new
                  sort mode "By Extension" (SortMode.EXTENSIONS) was added.
              </p>
          </description>
          <class package="org.openide.loaders" name="DataFolder"/>
          <issue number="230821"/>
      </change>
      <change id="org.openide.text.big.file.size">
          <api name="editor"/>
          <summary>Introduces system property to change file size threshold.</summary>
          <version major="7" minor="51"/>
          <date day="23" month="8" year="2013"/>
          <author login="igor_nikiforov"/>
          <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
          <description>
              <p>We need a way to replace hardcoded "1024 * 1024" constant for file size, as
                 in native space 1Mb file is rather common situation. So org.openide.text.big.file.size
                 system property is introduced, which allows to set this threshhold in megabytes.
                 The default threshold is 1Mb.
              </p>
          </description>
          <class package="org.openide.text" name="DataEditorSupport"/>
          <issue number="213882"/>
      </change>      
      <change id="TemplateRegistration.requireProject">
          <api name="loaders"/>
          <summary>Allow registration of templates which do not require a Project instance</summary>
          <version major="7" minor="46"/>
          <date day="25" month="1" year="2013"/>
          <author login="280Z28"/>
          <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
          <description>
              <p>Templates may be registered with <code>requireProject = false</code>
              in the annotation to indicate the template does not require a Project
              instance to be created. These templates show in the New File dialog
              even when no project is open in the IDE.
              </p>
          </description>
          <class package="org.netbeans.api.templates" name="TemplateRegistration" link="no"/>
          <issue number="186943"/>
      </change>
      <change id="lazymenu.properties">
          <api name="awt"/>
          <summary>Control what client properties pulldown menus have</summary>
          <version major="7" minor="44"/>
          <date day="21" month="12" year="2012"/>
          <author login="jtulach"/>
          <compatibility addition="yes"/>
          <description>
             <p>Layer declaration of a menu can influence what client properties
                 the actual <a href="@JDK@/javax/swing/JMenu.html">JMenu</a> 
                 instances will have. More 
                 <a href="architecture-summary.html#layer-Menu">details</a>.
              </p>
          </description>
          <class package="org.openide.awt" name="MenuBar"/>
          <issue number="222138"/>
      </change>      
       <change id="DataShadow.findOriginal">
          <api name="loaders"/>
          <summary>
              Introduced <code>DataShadow.findOriginal</code> which extracts the original file from
              a FileObject representing a shadow/link.
          </summary>
          <version major="7" minor="42"/>
          <date day="23" month="11" year="2012"/>
          <author login="sdedic"/>
          <compatibility addition="yes"/>
          <description>
              Target FileObject can be obtained, instead of DataObject. The target may be invalid,
              or otherwise unsuitable for DataObject creation. Use this method to just dereference
              the shadow file.
          </description>
          <class package="org.openide.loaders" name="DataShadow"/>
      </change>
      <change id="DataObjec.Registration">
          <api name="loaders"/>
          <summary>Introduced <code>DataObject.Registration</code> and <code>DataObject.Registrations</code></summary>
          <version major="7" minor="36"/>
          <date day="23" month="1" year="2012"/>
          <author login="skygo"/>
          <compatibility addition="yes"/>
          <description>
             <p>
                  Introduced a new annotation for registering DataObject.
              </p>
          </description>
          <class package="org.openide.loaders" name="DataObject"/>
          <issue number="207219"/>
          <issue number="208670"/>
      </change>
      <change id="ToolbarPool.isFinished">
          <api name="awt"/>
          <summary><code>ToolbarPool.isFinished</code></summary>
          <version major="7" minor="30"/>
          <date day="3" month="9" year="2011"/>
          <author login="jtulach"/>
          <compatibility addition="yes"/>
          <description>
              <p>
                  One can find out if <code>ToolbarPool</code> is initialized.
              </p>
          </description>
          <class package="org.openide.awt" name="ToolbarPool"/>
          <issue number="192207"/>
      </change>
      <change id="Template">
          <api name="loaders"/>
          <summary>Introduced <code>Template</code></summary>
          <version major="7" minor="29"/>
          <date day="25" month="7" year="2011"/>
          <author login="jglick"/>
          <compatibility addition="yes"/>
          <description>
              <p>
                  Introduced a new annotation for registering (file or project) templates.
              </p>
          </description>
          <class package="org.netbeans.api.templates" name="TemplateRegistration" link="no"/>
          <class package="org.netbeans.api.templates" name="TemplateRegistrations" link="no"/>
          <issue number="200175"/>
      </change>
    <change id="DataEditorSupport.constr3">
          <api name="editor"/>
          <summary>DataEditorSupport constructor with Lookup parameter</summary>
          <version major="7" minor="28"/>
          <date day="11" month="7" year="2011"/>
          <author login="jtulach"/>
          <compatibility semantic="compatible" binary="compatible" deletion="no"
            addition="yes" modification="no" source="compatible"/>
          <description>
              <p>
                  One can control what
                  <a href="@org-openide-util-lookup@/org/openide/util/Lookup.html">
                  Lookup</a> will be associated with 
                  <a href="@TOP@/org/openide/text/DataEditorSupport.html">
                  DataEditorSupport</a>.
              </p>
          </description>
          <class package="org.openide.text" name="DataEditorSupport"/>
          <issue number="199416"/>
      </change>      
    <change id="MultiDataObject.associateLookup">
          <api name="loaders"/>
          <summary>Simpler way to subclass MultiDataObject</summary>
          <version major="7" minor="27"/>
          <date day="21" month="6" year="2011"/>
          <author login="jtulach"/>
          <compatibility semantic="compatible" binary="compatible" deletion="no"
            addition="yes" modification="yes" source="incompatible">
                Added <code>registerEditor</code> method which might clash
                with some existing method in subclasses, although it is 
                hopefully not very likely.
          </compatibility>
          <description>
              <p>
                  New way to subclass <code>MultiDataObject</code>: override
                  <a href="@TOP@/org/openide/loaders/MultiDataObject.html#associateLookup--">
                  int associateLookup()
                  </a> to return <code>1</code>. In constructor call
                  <a href="@TOP@/org/openide/loaders/MultiDataObject.html#registerEditor-java.lang.String-boolean-">
                  registerEditor("your/mimetype", ...)</a> to get default
                  editor support. No need to override any other methods to get
                  well performing <code>MultiDataObject</code>.
              </p>
          </description>
          <class package="org.openide.loaders" name="MultiDataObject"/>
      </change>      
      <change id="FileSystemAction.no.nodes">
          <api name="awt"/>
          <summary>lookup(DataObject.class) fallback</summary>
          <version major="7" minor="26"/>
          <date day="21" month="6" year="2011"/>
          <author login="tstupka"/>
          <compatibility semantic="compatible" addition="yes"/>
          <description>
              <p>
                  In FileSystemAction.createMenu(boolean popUp, Lookup lookup) 
                  fallback on .lookup(DataObject.class) in case the given lookup 
                  contains no nodes. 
              </p>
          </description>
          <class package="org.openide.actions" name="FileSystemAction"/>
      </change>      
      <change id="org.openide.loaders.FolderChildren.delayedCreation">
          <api name="loaders"/>
          <summary>Children for DataFolder are more effective</summary>
          <version major="7" minor="25"/>
          <date day="10" month="6" year="2011"/>
          <author login="jtulach"/>
          <compatibility semantic="incompatible" binary="compatible" deletion="no"
            addition="yes" modification="yes" source="compatible">
                Not fully compatible. In case your application desperately
                needs the original mode, use the
                <a href="@TOP@architecture-summary.html#systemproperty-org.openide.loaders.FolderChildren.delayedCreation">
                org.openide.loaders.FolderChildren.delayedCreation    
                </a> property.
          </compatibility>
          <description>
              <p>
                  The nodes view over a <code>DataFolder</code> now creates
                  real nodes in background which provides better performance
                  on slow, remote filesystems.
              </p>
          </description>
          <class package="org.openide.loaders" name="DataFolder"/>
          <issue number="199391"/>
      </change>
      <change id="DataEditorSupport.create-callable">
          <api name="editor"/>
          <summary>DataEditorSupport.create(...., Callable&lt;Pane&gt;)</summary>
          <version major="7" minor="23"/>
          <date day="1" month="6" year="2011"/>
          <author login="jtulach"/>
          <compatibility semantic="compatible" addition="yes"/>
          <description>
              <p>
                  New <code>create</code> factory method to allow creation
                  of different <code>CloneableEditorSupport.Pane</code> implementations
                  than the default <code>CloneableEditor</code>.
              </p>
          </description>
          <class package="org.openide.text" name="DataEditorSupport"/>
      </change>
      <change id="removing.org.openide.loaders.DataFolder.lazy">
          <api name="loaders"/>
          <summary>Removed <code>org.openide.loaders.DataFolder.lazy</code></summary>
          <version major="7" minor="19"/>
          <date day="7" month="10" year="2010"/>
          <author login="jtulach"/>
          <compatibility semantic="incompatible"/>
          <description>
              <p>
                  The private API to honor
                  <code>org.openide.loaders.DataFolder.lazy</code> property
                  has been removed, as being obsolete.
              </p>
          </description>
          <class package="org.openide.loaders" name="DataFolder"/>
      </change>
      <change id="CreateFromTemplateHandler.FREE_FILE_EXTENSION">
          <api name="loaders"/>
          <summary>Added <code>CreateFromTemplateHandler.FREE_FILE_EXTENSION</code></summary>
          <version major="7" minor="16"/>
          <date day="13" month="4" year="2010"/>
          <author login="jglick"/>
          <compatibility addition="yes">
              <p>
                  Existing <code>CreateFromTemplateHandler</code> implementations
                  are encouraged to honor the parameter.
              </p>
          </compatibility>
          <description>
              <p>
                  Introduced a parameter that may be specified on templates
                  to permit the user to pick a file extension.
              </p>
          </description>
          <class package="org.openide.loaders" name="CreateFromTemplateHandler"/>
          <issue number="141886"/>
      </change>
      <change id="FileEncodingQuery-from-mime-lookup">
          <api name="awt"/>
          <summary>FileEncodingQuery registered per MIME type takes preceedence</summary>
          <version major="7" minor="14"/>
          <date day="7" month="4" year="2010"/>
          <author login="jtulach"/>
          <compatibility modification="yes" semantic="incompatible"/>
          <description>
              <p>
                  FileEncodingQuery implementations registered in
                  <code>Editors/text/mime/</code> folders are queried
                  even before the actual DataObject has been created
                  from template. This allows data loaders with static
                  encoding to register such FileEncodingQuery implementation
                  there and be active while the object is being constructed.
              </p>
          </description>
          <issue number="102629"/>
      </change>
      <change id="AcceleratorBinding">
          <api name="awt"/>
          <summary>Added <code>AcceleratorBinding</code></summary>
          <version major="7" minor="13"/>
          <date day="20" month="2" year="2010"/>
          <author login="jglick"/>
          <compatibility addition="yes"/>
          <description>
              <p>
                  Added a new class to help with action accelerators.
                  Should not be used by typical modules.
              </p>
              <p>
                  (Moved into the org.openide.awt module as of 7.34.)
              </p>
          </description>
          <class package="org.openide.awt" name="AcceleratorBinding" link="no"/>
          <issue number="180543"/>
      </change>
     <change id="XMLDataObject.subclass">
        <api name="loaders"/>
        <summary>New constructor of XMLDataObject</summary>
        <version major="7" minor="10"/>
        <date day="9" month="11" year="2009"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" source="compatible" addition="yes"
            deletion="no" deprecation="no" modification="no" semantic="compatible"/>
        <description>
            <p>
                New constructor for subclasses of <code>XMLDataObject</code>.
            </p>
        </description>
        <class package="org.openide.loaders" name="XMLDataObject"/>
        <issue number="175750"/>
    </change>
     <change id="DataEditorSupport.annotateName">
        <api name="editor"/>
        <summary>Added <code>annotateName</code> and <code>toolTip</code> to <code>DataEditorSupport</code></summary>
        <version major="7" minor="7"/>
        <date day="3" month="9" year="2009"/>
        <author login="jglick"/>
        <compatibility>
            <p>
                Overrides of <code>messageHtmlName</code> should be reconsidered.
                Calls to <code>messageName</code> should be paired with calls to
                <code>messageHtmlName</code> and <code>messageToolTip</code>.
            </p>
        </compatibility>
        <description>
            <p>
                Added two convenience methods permitting modules with nonstandard
                editor-like windows to use the regular modified and read-only status
                annotations.
            </p>
        </description>
        <class package="org.openide.text" name="DataEditorSupport"/>
        <issue number="171428"/>
    </change>
     <change id="Toolbars.DnD">
        <api name="awt"/>
        <summary>Deprecation of Toolbar drag and drop API</summary>
        <version major="7" minor="5"/>
        <date day="28" month="11" year="2008"/>
        <author login="saubrecht"/>
        <compatibility binary="compatible" deprecation="yes"/>
        <description>
        <p>
            Deprecated methods related to Toolbar drag and drop.
        </p>
        </description>
        <class package="org.openide.awt" name="Toolbar"/>
        <class package="org.openide.awt" name="ToolbarPool"/>
        <issue number="59242"/>
    </change>
     <change id="DataFilter.FileBased">
        <api name="loaders"/>
        <summary>Faster Filtering based on FileObjects</summary>
        <version major="7" minor="4"/>
        <date day="30" month="10" year="2008"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" semantic="compatible" addition="yes"/>
        <description>
        <p>
            <a href="@TOP@/org/openide/loaders/DataFilter.html">DataFilter</a>
            interface used to support filtering based on
            <a href="@TOP@/org/openide/loaders/DataObject.html">DataObject</a>s.
            With the introduction of more
            <a href="@org-openide-nodes@/apichanges.html#Children.Keys.lazy">effective nodes</a>,
            this is slowing down the visualization of folders significantly.
            That is why we introduce new 
            <a href="@TOP@/org/openide/loaders/DataFilter.FileBased.html">pre-filter</a>
            which can operate
            on <a href="@org-openide-filesystems@/org/openide/filesystems/FileObject.html">FileObject</a>s,
            whithout the need to instantiate
            <a href="@TOP@/org/openide/loaders/DataObject.html">DataObject</a>s.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataFilter"/>
        <issue number="150747"/>
    </change>
     <change id="FolderLookup.dispatch">
        <api name="loaders"/>
        <summary>Changes in <code>FolderLookup</code> are delivered in dedicated thread</summary>
        <version major="7" minor="2"/>
        <date day="27" month="6" year="2008"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" semantic="incompatible"/>
        <description>
        <p>
            Changes found in <code>FolderLookup</code> are delivered in their own
            thread. This is a change to previous behaviour which used the
            <q>Folder recognizer</q> thread for event delivery. That could
            cause deadlocks, if malicious code decided to do something wild
            in the <code>resultChanged</code> method.
        </p>
        </description>
        <class package="org.openide.loaders" name="FolderLookup" />
        <issue number="134297"/>
    </change>
     <change id="factory">
        <api name="loaders"/>
        <summary>DataObjects without DataLoaders</summary>
        <version major="7" minor="1"/>
        <date day="11" month="6" year="2008"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" />
        <description>
        <p>
            There is new method to register new DataObject types without
            the need to write own DataLoader. Use
            <a href="@TOP@/org/openide/loaders/DataLoaderPool.html#factory-java.lang.Class-java.lang.String-java.awt.Image-">
                DataLoaderPool.factory</a> method.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataLoaderPool" />
        <issue number="91665"/>
    </change>
     <change id="layer.registration">
        <api name="loaders"/>
        <summary>Loaders are registered in layer files</summary>
        <version major="7" minor="0"/>
        <date day="26" month="5" year="2008"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" />
        <description>
        <p>
            There is new 
            <a href="@TOP@/org/openide/loaders/doc-files/api.html#register">registration
            scheme</a> for <code>DataLoader</code>s.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataObject" />
        <class package="org.openide.loaders" name="DataLoader" />
        <issue number="91665"/>
    </change>
     <change id="xml.mimetypes">
        <api name="loaders"/>
        <summary>XMLDataObject no longer enforces text/xml as document mimetype</summary>
        <version major="6" minor="9"/>
        <date day="20" month="2" year="2008"/>
        <author login="mkleint"/>
        <compatibility addition="yes" binary="compatible" />
        <description>
        <p>
            Whenever possible the editor support and editor components will 
            use the underlying FileObject's mimetype (as resolved by the mimetype resolvers).
        </p>
        </description>
        <class package="org.openide.loaders" name="XMLDataObject" />
    </change>
      
     <change id="scripting.wizard.prefix">
        <api name="loaders"/>
        <summary>Prefixing attributes from TemplateWizard with <code>wizard.</code></summary>
        <version major="6" minor="7"/>
        <date day="14" month="8" year="2007"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" />
        <description>
        <p>
            When <a href="@TOP@/org/openide/loaders/TemplateWizard.html">TemplateWizard</a> invokes 
            <a href="@TOP@/org/openide/loaders/DataObject.html">DataObject</a>.createFromTemplate,
            it passes as argument all its <a href="@org-openide-dialogs@/org/openide/WizardDescriptor.html#getProperties--">properties</a>
            to it with <code>wizard.</code> as a prefix. That way they are available to
            underlying <a href="@TOP@/architecture-summary.html#loaders-script">scripting and templating
            engines</a>.
        </p>
        </description>
        <class package="org.openide.loaders" name="TemplateWizard" />
        <issue number="109569"/>
    </change>

     <change id="templates.encoding">
        <api name="loaders"/>
        <summary>Templates may use ${encoding} and ${nameAndExt} properties</summary>
        <version major="6" minor="6"/>
        <date day="1" month="8" year="2007"/>
        <author login="mfukala"/>
        <compatibility semantic="compatible"/>
        <description>
            <p>
                Templates may use ${encoding} and ${nameAndExt} properties in their 
                bodies to be substituted 
                to the real encoding of the template instance file as well
                as the actual name (with extension) of the file, being created.
            </p>
        </description>
        <issue number="110910"/>
    </change>
      
    <change id="DataFolder.position">
        <api name="loaders"/>
        <summary>Folders may be ordered by numeric position</summary>
        <version major="6" minor="5"/>
        <date day="16" month="6" year="2007"/>
        <author login="jglick"/>
        <compatibility modification="yes" semantic="compatible" deprecation="yes"/>
        <description>
            <p>
                Folders may now be ordered by setting the <code>position</code> attribute
                on files within the folder, which should have a numeric value.
                The original relative ordering constraints are now deprecated but still work.
            </p>
        </description>
        <issue number="103187"/>
    </change>

    <change id="SaveAsCapable">
        <api name="loaders"/>
        <summary>SaveAsCapable interface defines the ability to save DataObject under a different file name and/or extension</summary>
        <version major="6" minor="3"/>
        <date day="30" month="3" year="2007"/>
        <author login="saubrecht"/>
        <compatibility semantic="compatible" />
        <description>
        <p>
        The DataEditorSupport adds default implementation of SaveAsCapable interface to the CookieSet
        of DataObjects created by UniFileLoaders. The default implementation calls copyRename method
        on the DataObject.
        </p>
        </description>
        <class package="org.openide.loaders" name="SaveAsCapable"/>
        <class package="org.openide.loaders" name="DataObject"/>
        <class package="org.openide.text" name="DataEditorSupport"/>
        <issue number="20147"/>
    </change>
    
    <change id="FileEncodingQuery.loaders">
        <api name="loaders"/>
        <summary>DataEditorSupport uses FileEncodingQuery to read or write document in correct encoding</summary>
        <version major="6" minor="2"/>
        <date day="14" month="3" year="2007"/>
        <author login="tzezula"/>
        <compatibility semantic="compatible" />
        <description>
        <p>
        The DataEditorSupport overides the loadFromStreamToKit and saveFromKitToStream methods.
        In these methods it uses FileEncodingQuery to find out the encoding of the file, creates
        the Reader or Writer with obtained encoding and calls EditorKit.read or EditorKit.write.
        </p>
        </description>
        <class package="org.openide.text" name="DataEditorSupport"/>
        <issue number="42638"/>
    </change>

     <change id="scripting">
        <api name="loaders"/>
        <summary>Integration with scripting and templating</summary>
        <version major="6" minor="3"/>
        <date day="8" month="2" year="2007"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" />
        <description>
        <p>
        Two new interfaces - <code>CreateFromTemplateHandler</code> and 
        <code>CreateFromTemplateAttributesProvider</code> to enhance the abilities
        of data object to be created with parametrized values. Also new method
        <code>createFromTemplate</code> taking extra map of named arguments
        has been added, so users can pass the data object additional info
        that can be processed during instantiation of the template.
        </p>
        <p>
        This is particallary useful when using <a href="@TOP@/architecture-summary.html#loaders-script">scripting and templating
        languages</a> during create from template operation.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataObject" />
        <class package="org.openide.loaders" name="CreateFromTemplateHandler" />
        <class package="org.openide.loaders" name="CreateFromTemplateAttributesProvider" />
        <issue number="13250"/>
    </change>
    
     <change id="fileobject-in-lookup">
        <api name="loaders"/>
        <summary>DataNode.getLookup contains FileObject, DataObject has getLookup()</summary>
        <version major="6" minor="0"/>
        <date day="2" month="11" year="2006"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" />
        <description>
        <p>
            Since now, each DataNode constructed without using own lookup,
            shall have <code>FileObject</code>(s) associated with its
            <a href="@TOP@/org/openide/loaders/DataObject.html#files--">DataObject</a> 
            available in its own lookup.
            Also a 
            <a href="@TOP@/org/openide/loaders/DataObject.html">DataObject</a> 
            has been retrofitted to implement a 
            <a href="@org-openide-util-lookup@/org/openide/util/Lookup.Provider.html">Lookup.Provider</a>
            interface and thus have its
            <a href="@TOP@/org/openide/loaders/DataObject.html#getLookup--">getLookup</a> 
            method that can be used instead of the old <code>getCookie</code> one.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataNode" />
        <class package="org.openide.loaders" name="DataObject" />
        <issue number="62707"/>
    </change>

    <change id="ExternalDragAndDrop.loaders">
        <api name="loaders"/>
        <summary>Folders in IDE can accept files dragged from outside,
        files and folders in IDE can be dragged and dropped to external applications.</summary>
        <version major="5" minor="11"/>
        <date day="30" month="5" year="2006"/>
        <author login="saubrecht"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
        <p>
            Class <code>DataNode</code> add additional <code>DataFlavor</code>s
            to its <code>Transferable</code> which means that any file or folder
            can be dragged from the IDE and dropped to any external application
            that supports file drag and drop operations. The same functionality
            applies to Copy/Cut and Paste operations.
        </p>
        <p>
            Class <code>DataFolder.FolderNode</code> now supports file-type
            <code>DataFlavor</code>s so when a file(s) is dropped to a folder node
            in the IDE then the file is copied into that folder. If the file is
            a Java source file then the appropriate refactoring will fire up as well.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataNode" />
        <class package="org.openide.loaders" name="DataFolder" />
        <issue number="35228"/>
    </change>

     <change id="more-actionContexts">
        <api name="loaders"/>
      <summary>All standard loaders reads their data from the layer</summary>
        <version major="5" minor="8"/>
        <date day="26" month="10" year="2005"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" />
        <description>
        <p>
            Default loaders, default XML loader and instances loader read their
            actions from <code>Loaders/content/unknown/Actions</code>, 
            <code>Loaders/text/xml/Actions</code> and <code>Loaders/application/x-nbsettings/Actions</code>.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataLoaderPool" />
        <issue number="64200"/>
    </change>
    
    
    
    
      <change>
        <api name="awt"/>
        <summary>Enhanced the <code>org.openide.awt.MenuBar</code>
          to understand <code>Component</code>s.</summary>
        <version major="3" minor="2"/>
        <date day="15" month="7" year="2002"/>
        <author login="pnejedly"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
          This is not the Java API change but rather a change in treating
          of the content of the folder from which the <code>MenuBar</code>
          is built. Prevoiusly only folders were recognized and turned into
          top-level menus. Now also <code>Component</code> instances found
          in the folder are directly added to the resulting <code>MenuBar</code>
          and <code>Presenter.Toolbar</code> instances are asked for
          the presentation component and added to the <code>MenuBar</code>.
        </description>
        <class package="org.openide.awt" name="MenuBar"/>
    </change>
     <change id="DataEditorSupport.create">
        <api name="editor"/>
      <summary>A factory method to simplify creation of <code>DataEditorSupport</code></summary>
        <version major="5" minor="2"/>
        <date day="9" month="3" year="2005"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" />
        <description>
        <p>
            Many people subclass <code>DataEditorSupport</code> to provide editing ability for data
            objects. The great majority of them wish to provide an editor cookie 
            and with standard semantics for open, modify, save, undo,
            close, reload, etc. By using the 
            <code>DataEditorSupport.create</code> factory 
            method this task is simplified to two lines of code.
        </p>
        </description>
        <class package="org.openide.text" name="DataEditorSupport" />
        <issue number="17081"/>
    </change>
    
     <change id="DataLoaderPool.getDefault">
        <api name="loaders"/>
      <summary>Added <code>DataLoaderPool.getDefault()</code></summary>
        <version major="5" minor="1"/>
        <date day="7" month="2" year="2005"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" />
        <description>
        <p>
            <code>DataLoaderPool</code> now has a new method <code>getDefault()</code>
            to allow simple access to the default system loader pool.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataLoaderPool" />
        <issue number="41650"/>
    </change>

     <change id="DataLoader.actionsContext">
        <api name="loaders"/>
      <summary>Actions for <code>DataLoader</code> can be specified in a layer</summary>
        <version major="5" minor="0"/>
        <date day="23" month="11" year="2004"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" />
        <description>
        <p>
            <code>DataLoader</code> now has a new method <code>protected String actionsContext()</code>
            which by default returns <code>null</code> but can be overriden to identify name
            of a place on default file system where layers can store instances of <code>javax.swing.Action</code>
            that will then be used as a return value of <code>DataNode.getActions(boolean)</code>.
            This allows smooth extensibility of one data object's node with actions 
            from other modules.
        </p>
        <p>
            The change is compatible, as if one does not override this method, 
            the behaviour remains the same as it used to be. If the method is overridden
            and returns non-null value, 
            the <code>DataLoader.setActions</code> uses the given context to 
            store the actions into it.
        </p>
        <p>
            The standard loader for folder use <code>Loaders/folder/any/Actions</code> 
            as its context, so any module who wishes to add anything to its 
            popup menu, may register actions layer file like 
            <a href="@org-openide-actions@/org/openide/actions/doc-files/api.html#adv-install">
            any regular actions</a> just into the folder <code>Loaders/folder/any/Actions</code>.
        </p>
        </description>
        <class package="org.openide.loaders" name="DataLoader"/>
        <issue number="45137"/>
    </change>

     <change id="ChangeableDataFilter">
        <api name="loaders"/>
      <summary>Added <code>ChangeableDataFilter</code> interface</summary>
        <version major="4" minor="16"/>
        <date day="11" month="6" year="2004"/>
        <author login="phrebejk"/>
        <compatibility addition="yes"/>
        <description>
        <p>
        The class <code>FolderChildren</code> was able to filter the children
        using <code>DataFilter</code>. But the data filter was constant for the
        entire life of the <code>FolderChildren</code> instance. <code>ChangeableDataFilter</code>
        class adds the ability to change the filtering strategy, where 
        the change is reflected immediatley in the folder children.
        </p>
        </description>
        <class package="org.openide.loaders" name="ChangeableDataFilter" />
        <issue number="44368"/>
    </change>

  
    <change>
        <api name="loaders"/>
        <summary>Support for 24x24 icons</summary>
        <version major="4" minor="15"/>
        <date day="18" month="5" year="2004"/>
        <author login="mslama"/>
        <compatibility addition="yes" deprecation="yes"/>
        <description>
            <code>Toolbar.getBasicHeight()</code> was added to replace <code>Toolbar.BASIC_HEIGHT</code>.
            <code>ToolbarPool.getPreferredIconSize()</code> and <code>ToolbarPool.setPreferredIconSize(int)</code>
            were added.
        </description>
        <class package="org.openide.awt" name="Toolbar" />
        <class package="org.openide.awt" name="ToolbarPool" />
        <issue number="34574"/>
    </change>

    <change>
        <api name="loaders"/>
         <summary><code>DataShadow</code> uses URL for storage</summary>
        <version major="4" minor="14"/>
        <date day="12" month="5" year="2004"/>
        <author login="dkonecny"/>
        <compatibility addition="yes" semantic="compatible"/>
        <description>
            Two changes in DataShadow. The implementation was changed to
            store link as URL instead of FileSystem + Path pair. DataShadow
            declaration was extended and "originalFile" attribute can be
            defined not only as stringvalue but also as urlvalue.
        </description>
        <issue number="42091"/>
    </change>

    <change>
      <api name="loaders"/>
         <summary><code>DataNode.getHtmlDisplayName</code> was implemented</summary>
      <version major="4" minor="13"/>
      <date day="3" month="5" year="2004"/>
      <author login="tboudreau"/>
      <compatibility addition="yes"/>
      <description>
            <code>DataNode</code> now implements <code>getHtmlDisplayName()</code> as follows:  If the
            underlying filesystem implements the new <code>FileSystem.HtmlStatus</code>, it will
            call <code>FileSystem.HtmlStatus.annotateNameHtml()</code> and return the result.
      This enables, for example, CVS annotations to be shown with a different
      font color.
      </description>
      <class package="org.openide.loaders" name="DataNode"/>
      <issue number="29466"/>
    </change>

    <change id="SortMode.LAST_MODIFIED-SIZE">
      <api name="loaders"/>
      <summary>Two new folder sort modes</summary>
      <version major="4" minor="10"/>
      <date day="9" month="9" year="2003"/>
      <author login="jglick"/>
      <compatibility addition="yes"/>
      <description>
        Two new folder sort modes, <code>LAST_MODIFIED</code> and
        <code>SIZE</code>, were added.
      </description>
      <class package="org.openide.loaders" name="DataFolder"/>
      <issue number="26667"/>
    </change>

    <change >
     <api name="loaders"/>
     <summary>Tighter synchronization during copy/move/rename</summary>
     <version major="4" minor="9"/>
     <date day="28" month="5" year="2003"/>
     <author login="jtulach"/>
     <compatibility semantic="incompatible" />
     <description>
        In previous version of Loaders a thread can access
        unfinished files copied/moved/createFromTemplated
        by another Thread. This change prevent such accidental
        access and provides more robust behaviour to writers
        of own <code>DataObjects</code> and <code>DataLoaders</code>.
        <p/>
        This change has been introduced to make the behaviour
        safer and more predicatable. Its goal is not to introduce
        new deadlocks, but everybody writing its own loaders has
        to keep in mind that it is dangerous to perform a long
        running operation in the handleCopy, handleMove,
        handleRename, handleCreateFromTemplate methods.
     </description>
     <class package="org.openide.loaders" name="DataObject" />
     <issue number="33750"/>
    </change>
  
    <change >
     <api name="loaders"/>
     <summary>Calls to DataObject constructor restricted</summary>
     <version major="4" minor="7"/>
     <date day="16" month="5" year="2003"/>
     <author login="jtulach"/>
     <compatibility semantic="incompatible" />
     <description>
        In order to fix timing issues in <code>org.openide.loaders</code> package
        the possibility to invoke <code>DataObject</code>'s constructor has been
        restricted. 
        <p/>
        There is an <code>OperationListener</code> class in the org.openide.loaders 
        package that shall be notified about every created DataObject. It is easy 
        to be notified when the DataObject is being created, but the notification 
        shall be done when its constructor finishes otherwise magic race 
        conditions can happen, see for example 
        <a href="https://bz.apache.org/netbeans/show_bug.cgi?id=20022">issue 20022</a>.
        The previous solution was to wait 500ms after the start of DataObject's 
        constructor and notifying the creation than, but of course it means 
        that if the constructor takes longer time, we were in the same problem again.
        <p/>
        Because DataObjects shall be created only by DataLoaders in method 
        <code>DataLoader.handleFindDataObject</code>, we can notify each data 
        object when the execution is returning from DataLoader.handleFindDataObject, 
        but in order for the system to work correctly we shall prevent creation 
        of DataObjects outside of this place.
        <p/>
        DataObject constructor will throw an exception if invoked outside of 
        <code>DataLoader.handleFindDataObject</code> or <code>MultiFileLoader.createDataObject</code>
        methods. This is incompatible change, but nobody should really be affected, 
        as creating data objects outside of DataLoader has no real 
        meaning. 
     </description>
     <class package="org.openide.loaders" name="DataObject" />
     <issue number="33469"/>
    </change>
  
  
    <change >
     <api name="loaders"/>
     <summary>Separated out from the openide</summary>
     <version major="4" minor="5"/>
     <date day="18" month="4" year="2003"/>
     <author login="jtulach"/>
     <compatibility  binary="compatible" source="compatible" />
     <description>
     Classes of <code>org.openide.loaders</code> package were separated
     out from the whole openide.jar into their own openide-loaders.jar.
     </description>
     <issue number="32937"/>
    </change>

    <change id="FolderRenameHandler" >
        <api name="loaders"/>
        <summary>Introduction of a new interface FolderRenameHandler which allows plugging into <code>DataFolder.FolderNode.setName()</code></summary>
        <version major="5" minor="4"/>
        <date day="11" month="5" year="2005"/>
        <author login="jbecicka"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
        Refactoring needs to handle rename of DataFolder's Node. It is allowed through FolderRenameHandler.
        Any client can put it's FolderRenameHandler into Lookup (only one instance is allowed). 
        Implementation of FolderNode.setName() will use this instance to handle rename request.
        </description>
        <class package="org.openide.loaders" name="FolderRenameHandler"/>
        <issue number="53295"/>
    </change>

    <change id="DataNodeLookupContructor" >
        <api name="loaders"/>
        <summary>New <a href="@TOP@/org/openide/loaders/DataNode.html">DataNode</a> constructor that takes Lookup</summary>
        <version major="5" minor="6"/>
        <date day="19" month="9" year="2005"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            It was not possible to use <a href="@TOP@/org/openide/loaders/DataNode.html">DataNode</a> with own Lookup as the
            constructor that takes it was available only on <a href="@org-openide-nodes@/org/openide/nodes/Node.html">Node</a>
            and there was no way to pass it thru <a href="@TOP@/org/openide/loaders/DataNode.html">DataNode</a>.
        </description>
        <class package="org.openide.loaders" name="DataNode"/>
        <issue number="61824"/>
    </change>

  </changes>

  <!-- Now the surrounding HTML text and document structure: -->

  <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <======================

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE openide/loaders/api/apichanges.xml

-->
    <head>
      <title>Change History for the Loaders API</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

<p class="overviewlink"><a href="overview-summary.html">Overview</a></p>

<h1>Introduction</h1>

<p>This document lists changes made to the <a href="@TOP@">Loaders
API</a>. Please ask on the <code>dev@openide.netbeans.org</code> mailing list
if you have any questions about the details of a
change, or are wondering how to convert existing code to be compatible.</p>

<!-- The actual lists of changes, as summaries and details: -->

      <hr/><standard-changelists module-code-name="org.openide.loaders"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
