<?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, this will be done periodically; just
change the XML. If you can, validate the XML against the DTD, if not
do not worry about it. 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>
    <!-- org.netbeans.spi.settings -->
    <apidef name="settings_spi">Settings SPI</apidef>
    <!-- org.netbeans.api.settings -->
    <apidef name="settings_api">Settings API</apidef>
  </apidefs>

<!-- ACTUAL CHANGES BEGIN HERE: -->
  <changes>
    <change id="method.factory">
        <api name="settings_api"/>
        <summary>Instances may have factory methods</summary>
        <version major="1" minor="40"/>
        <date day="15" month="3" year="2013"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="yes" semantic="compatible" source="compatible"/>
        <description>
            No need for the instances to have default constructor anymore.
            One can tell the system to use different factory method.
        </description>
        <class package="org.netbeans.api.settings" name="FactoryMethod"/>
        <issue number="227050"/>
    </change>
    <change id="private.factories">
        <api name="settings_spi"/>
        <summary>Factory methods can be private</summary>
        <version major="1" minor="29"/>
        <date day="30" month="11" year="2010"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="yes" semantic="compatible" source="compatible"/>
        <description>
            To be consistent with behavior of methodvalue attribute of
            <a href="@org-openide-filesystems@/org/openide/filesystems/XMLFileSystem.html">XMLFileSystem</a>,
            now the factory methods referenced from settings files can be <code> private static</code>
            as well.
        </description>
    </change>
    <change id="readResolveBehaviour">
        <api name="settings_spi"/>
        <summary>readProperties can designate its replace</summary>
        <version major="1" minor="18"/>
        <date day="10" month="1" year="2009"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="yes" semantic="compatible" source="compatible"/>
        <description>
            Semantics of <code>readProperties</code> method has been extended
            to allow the method to return an object. Read
            <a href="@TOP@/org/netbeans/spi/settings/package-summary.html#xmlprops">more</a>.
        </description>
        <issue number="155962"/>
    </change>
    <change id="convert.as.javabean">
        <api name="settings_spi"/>
        <summary>@ConvertAsJavaBean annotation</summary>
        <version major="1" minor="20"/>
        <date day="7" month="8" year="2009"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="yes" semantic="compatible" source="compatible"/>
        <description>
            Easy way to use JavaBean's archiver for persistence of objects.
        </description>
        <class package="org.netbeans.api.settings" name="ConvertAsJavaBean"/>
        <issue number="169620"/>
    </change>
    <change id="convertor.propertyannotation">
        <api name="settings_spi"/>
        <summary>@ConvertAsProperties annotation</summary>
        <version major="1" minor="18"/>
        <date day="10" month="1" year="2009"/>
        <author login="jtulach"/>
        <compatibility addition="yes"/>
        <description>
            Human friendly way to register XML property based convertor via
            the <code>@ConvertAsProperties</code> annotation.
        </description>
        <class package="org.netbeans.api.settings" name="ConvertAsProperties"/>
        <issue number="155962"/>
    </change>
    <change id="convertor.recognize.xml">
        <api name="settings_spi"/>
        <summary>Allow convertors to recognize .xml files in specially attributed folders.</summary>
        <version major="1" minor="17"/>
        <date day="28" month="11" year="2008"/>
        <author login="saubrecht"/>
        <compatibility addition="yes"/>
        <description>
            If a folder in SFS has attribute <code>recognizeXML=true</code> then
            Convertors will attempt to process also files with .xml extension.
        </description>
        <issue number="154028"/>
    </change>
    <change id="ignore.removed.classes">
        <api name="settings_spi"/>
        <summary>Ignore settings for intentionally removed classes.</summary>
        <version major="1" minor="13"/>
        <date day="22" month="7" year="2008"/>
        <author login="jskrivanek"/>
        <compatibility addition="yes"/>
        <description>
            To prevent ClassNotFoundException while loading *.settings where
            intentionally removed class is either in &lt;instance class="..."/&gt;
            or &lt;serialdata class="..."&gt; it is possible to declare such
            class in <code>META-INF/netbeans/translate.names</code>. If class name
            maps to empty string, it is ignored. E.g.:<br/><br/>
            <code>org.mypackage.OldClass=</code>
        </description>
        <issue number="137240"/>
    </change>
    <change id="support.Lookups.forPath">
        <api name="settings_spi"/>
        <summary>Provides support for <code>Lookups.forPath</code></summary>
        <version major="1" minor="13"/>
        <date day="17" month="4" year="2007"/>
        <author login="jtulach"/>
        <compatibility addition="yes"/>
        <description> 
            Provides support for <a href="@org-openide-util-lookup@/org/openide/util/lookup/Lookups.html#forPath-java.lang.String-">Lookups.forPath(String)</a>
            method in order to replace now deprecated <a href="@org-openide-loaders@/org/openide/loaders/FolderLookup.html">FolderLookup</a>.
        </description>
        <issue number="98426"/>
    </change>
    <change id="settings.subclasses">
        <api name="settings_spi"/>
        <summary>Added new attribute for provider registration - settings.subclasses</summary>
        <version major="1" minor="12"/>
        <date day="9" month="5" year="2006"/>
        <author login="dstrupl"/>
        <compatibility addition="yes"/>
        <description> New file attribute can be used if the registered convertor
            is capable of handling subclasses of the registered class. The
            attribute name is "settings.subclasses" and it can be set on
            the same file object under "xml/memory" as "settings.providerPath".
            The value of the attribute must be boolean. Defaults to false.
        </description>
        <issue number="65950"/>
    </change>
    <change>
        <api name="settings_spi"/>
        <summary>Added DOMConvertor supporting composed content</summary>
        <version major="1" minor="1"/>
        <date day="22" month="8" year="2002"/>
        <author login="jpokorsky"/>
        <compatibility addition="yes"/>
        <description> Allow to reuse already written convertors 
            by newly created ones to facilitate a storing of complex objects.  
        </description>
        <class package="org.netbeans.spi.settings" name="DOMConvertor"/>
        <issue number="26284"/>
    </change>
    <change>
        <api name="settings_spi"/>
        <summary>Provide context to convertors</summary>
        <version major="1" minor="2"/>
        <date day="3" month="9" year="2002"/>
        <author login="jpokorsky"/>
        <compatibility addition="yes"/>
        <description> Get a context associated with the reader. 
            It can contain various info like a file location of the read object etc.
        </description>
        <class package="org.netbeans.spi.settings" name="Convertor"/>
        <class package="org.netbeans.spi.settings" name="DOMConvertor"/>
        <issue number="26076"/>
    </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 core/settings/api/doc/changes/apichanges.xml

-->
    <head>
      <title>Settings API/SPI Changes by Date</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>
<!-- The actual lists of changes, as summaries and details: -->

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

      <standard-changelists module-code-name="org.netbeans.modules.settings/1"/>

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

    </body>
  </htmlcontents>

</apichanges>
