<?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#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#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="http://www.netbeans.org/issues/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>
