<?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.

-->
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../nbbuild/javadoctools/apichanges.dtd">
<apichanges>
    <apidefs>
        <apidef name="util_base">Base Utilities API</apidef>
        <apidef name="xml_base">XML API</apidef>
    </apidefs>
    <changes>
    <change id="weak-listen-on-specific-property">
        <api name="util_base"/>
        <summary>Weak property and vetoable listeners for a specific property name.</summary>
        <version major="9" minor="2"/>
        <date year="2014" month="10" day="22"/>
        <author login="mentlicher"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                <code>WeakListeners</code> class got variants of <code>propertyChange()</code>
                and <code>vetoableChange()</code> methods, which take the property name.
                They are to be used as an argument to
                <code>addPropertyChangeListener(String propertyName, PropertyChangeListener listener)</code>
                and <code>addVetoableChangeListener(String propertyName, PropertyChangeListener listener)</code>
                methods respectively, and will call the appropriate remove methods with the provided
                property name.
            </p>
        </description>
        <class package="org.openide.util" name="WeakListeners"/>
        <issue number="188604"/>
    </change>
        <change id="server.is.free">
            <api name="util_base"/>
            <summary>Desktop independent utilities extracted</summary>
            <version major="9" minor="0"/>
            <date day="20" month="3" year="2014"/>
            <author login="sdedic"/>
            <compatibility modification="yes" addition="yes" binary="compatible" source="incompatible">
                <p>
                    Runtime compatibility remains, compile time compatibility is
                    mostly preserved too. It is however recommended to upgrade
                    dependencies of client modules. Try running
                    <code>ant fix-dependencies</code> in your Ant module.
                </p>
                <p>
                    Parts of <a href="@org-openide-util@/org/openide/util/Mutex.html">org.openide.util.Mutex</a>
                    that depended on EDT were removed.
                </p>
                <p>
                    Please also refer to the <a href="@org-openide-util-ui@/apichanges.html">API Changes document</a> of the
                    original <code>openide.utilities.ui</code> module.
                </p>
            </compatibility>
            <description>
                <p>
                    The following classes were spinned of into 
                    <a href="@org-openide-util@/overview-summary.html">org.openide.util.base module</a>:
                </p>
                <ul>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/Cancellable.html">Cancellable</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/ChangeSupport.html">ChangeSupport</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/CharSequences.html">CharSequences</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/Enumerations.html">Enumerations</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/Exceptions.html">Exceptions</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/MapFormat.html">MapFormat</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/Mutex.html">Mutex</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/MutexException.html">MutexException</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/NbBundle.html">NbBundle</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/NbCollections.html">NbCollections</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/NotImplementedException.html">NotImplementedExcepion</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/Pair.html">Pair</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/Parameters.html">Parameters</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/RequestProcessor.html">RequestProcessor</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/Task.html">Task</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/TaskListener.html">TaskListener</a>
                    </li>
                    <li>
                        TimedSoftReference
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/TopologicalSortException.html">TopologicalSortException</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/Union2.html">Union2</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/WeakListeners.html">WeakListeners</a>
                    </li>
                    <li>
                        <a href="@org-openide-util@/org/openide/util/WeakSet.html">WeakSet</a>
                    </li>
                </ul>
                <p>
                    The class <a href="@org-openide-util-ui@/org/openide/util/Utilities.html">Utilities</a> was also split and the
                    client desktop indepenent parts landed in <a href="@org-openide-util@/org/openide/util/BaseUtilities.html">BaseUtilities</a>.
                    Although all the constants and methods are still available through Utilities class, it is advised to change the dependencies
                    and reference them through BaseUtilities.
                </p>
            </description>
            <issue number="243100"/>
        </change>
    </changes>
    <htmlcontents>
        <head>
            <title>Change History for the Base Utilities 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>
            <h2>What do the Dates Mean?</h2>
            <p>The supplied dates indicate when the API change was made, on the CVS
                trunk. From this you can generally tell whether the change should be
                present in a given build or not; for trunk builds, simply whether it
                was made before or after the change; for builds on a stabilization
                branch, whether the branch was made before or after the given date. In
                some cases corresponding API changes have been made both in the trunk
                and in an in-progress stabilization branch, if they were needed for a
                bug fix; this ought to be marked in this list.</p>
            <ul>
                <li>The <code>release41</code> branch was made on Apr 03 '05 for use in the NetBeans 4.1 release.
                    Specification versions: 6.0 begins after this point.</li>
                <li>The <code>release40</code> branch was made on Nov 01 '04 for use in the NetBeans 4.0 release.
                    Specification versions: 5.0 begins after this point.</li>
            </ul>
            <hr/>
            <standard-changelists module-code-name="$codebase"/>
            <hr/>
            <p>@FOOTER@</p>
        </body>
    </htmlcontents>
</apichanges>
