<?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">Utilities API</apidef>
    <apidef name="xml">XML API</apidef>
    <apidef name="actions">Actions API</apidef>
</apidefs>
<changes>
    <change id="propertyURL">
      <api name="util"/>
      <summary>Declaration of long-used URL image property</summary>  
      <version major="9" minor="24"/>
      <date year="2021" month="1" day="15"/>
      <author login="sdedic"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
          The property <code>url</code> is documented in Javadoc <b>since 8.12</b> but the key string was not
          added to the API. <a href="@TOP@/org/openide/util/ImageUtilities.html#PROPERTY_URL">It is now</a>, along with a 
          <a href="@TOP@/org/openide/util/ImageUtilities.html#findImageBaseURL-java.awt.Image-">convenience method</a>, which should be used in preference.
      </description>
      <class package="org.openide.util" name="ImageUtilities"/>
    </change>
    <change id="SVGLoader">
      <api name="util"/>
      <summary>Support loading of SVG icons for scalable rendering on HiDPI displays.</summary>
      <version major="9" minor="15"/>
      <date year="2019" month="11" day="24"/>
      <author login="ebakke"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
        <p>
            As a part of the effort to make NetBeans look better on HiDPI displays, the
            ImageUtilities class has now been completely updated to support scalable implementations
            of the java.awt.Icon interface, and to support loading of icons and images from SVG
            files. If an SVG file resource exists with the same base name as an existing bitmap
            icon, the SVG file will be loaded instead (e.g. "icon.svg" will be loaded instead of
            "icon.png"). SVG file resources can also be loaded explicitly.
        </p>
        <p>
            To avoid bloating the core platform modules with large JAR libraries, the actual loading
            and parsing of SVG files is implemented in a separate, optional module, which is lazily
            loaded the first time that an SVG file is encountered for loading. A new interface
            SVGLoader has been added to serve as an SPI for said module to implement. Furthermore,
            the CachedHiDPIIcon helper class has been made public to assist in the implementation of
            this and other scalable Icon implementations.
        </p>
      </description>
      <issue number="NETBEANS-2604"/>
    </change>
    <change id="VectorIcon">
      <api name="util"/>
      <summary>Added abstract class VectorIcon to support creation of custom-painted HiDPI icons.</summary>
      <version major="9" minor="12"/>
      <date year="2018" month="9" day="29"/>
      <author login="ebakke"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
      <description>
        <p>
            It is now increasingly common for NetBeans to run on Windows, Linux, or MacOS machines with
            so-called "HiDPI" screens, aka. "retina" screens in the Apple world. These screens have about
            twice the physical pixel density of traditional screens, making it necessary to scale GUI
            graphics up by some amount, e.g. 150% or 200% (depending on OS and OS-level user settings), in
            order to remain readable. Since Java 9, this scaling is done automatically by AWT by means of a
            scaling default transform in each Component's Graphics2D instances. This makes text sharp on
            HiDPI screens, but leaves bitmap icons blurry.
        </p>
        <p>
            This change introduces a new abstract class VectorIcon, which can be extended to create
            custom-painted Icon instances that will look sharp on HiDPI screens, regardless of scaling level.
            See VectorIcon's Javadoc for a discussion of appropriate use cases.
        </p>
      </description>
      <class package="org.openide.util" name="VectorIcon"/>
      <issue number="NETBEANS-1238"/>
    </change>
    <change id="DeprecateBooleanStateAction">
        <api name="util"/>
        <summary><code>BooleanStateAction</code> deprecated in favour of <code>Actions</code> API and <code>@ActionState</code> annotation.</summary>
        <version major="9" minor="11"/>
        <date day="1" month="8" year="2018"/>
        <author login="sdedic"/>
        <compatibility deprecation="yes"/>
        <description>
            <p>
                The <a href="@TOP@/org/openide/util/actions/BooleanStateAction.html">BooleanStateAction</a> base class was deprecated, as
                there's a programatic API in <a href="@org-openide-awt@/org/openide/awt/Actions.html">Actions</a>
                and a declarative <a href="@org-openide-awt@/org/openide/awt/ActionState.html">@ActionState</a> annotation which fully supersede the deprecated class.
            </p>
        </description>
        <class package="org.openide.util.actions" name="BooleanStateAction"/>
    </change>
    <change id="GetAuthenticationPassword">
        <api name="util"/>
        <summary>API <code>NetworkSettings.getAuthenticationPassword</code> added</summary>
        <version major="9" minor="8"/>
        <date day="11" month="11" year="2016"/>
        <author login="tstupka"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                The SPI <a href="@TOP@/org/openide/util/NetworkSettings.ProxyCredentialsProvider.html">
                NetworkSettings.ProxyCredentialsProvider</a> allows NetBeans Platform
                users to provide proxy and network credentials, but the according API should also provide
                the password, not only the username.
            </p>
        </description>
        <class package="org.openide.util" name="NetworkSettings"/>
        <issue number="268803"/>
    </change>
    <change id="server.is.free">
        <api name="util"/>
        <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">
            <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>
        </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><a href="@org-openide-util@/org/openide/util/TimedSoftReference.html">TimedSoftReference</a></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="@TOP@/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>
    <change id="disabled-action-beep">
        <api name="util"/>
        <summary>Platform dependent sound when invoking a disabled action.</summary>
        <version major="8" minor="39"/>
        <date year="2014" month="7" day="9"/>
        <author login="saubrecht"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                Only some platforms provide an audible notification when user 
                tries to invoke a disabled action. So instead of Toolkit.beep() 
                which always plays a sound a new method 
                <code>Utilities.disabledActionSound()</code> shoud be used instead.
            </p>
        </description>
        <class package="org.openide.util" name="Utilities"/>
        <issue number="203979"/>
    </change>
    <change id="try-lock">
        <api name="util"/>
        <summary>Try to lock a Mutex</summary>
        <version major="8" minor="37"/>
        <date year="2014" month="1" day="20"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                Two new methods, <code>tryReadAccess</code> and <code>tryWriteAccess</code>,
                added to <a href="@org-openide-util@/org/openide/util/Mutex.Privileged.html">Mutex.Privileged</a>
                to allow better control when waiting for a lock.
            </p>
        </description>
        <class package="org.openide.util" name="Mutex" link="no"/>
        <issue number="240442"/>
    </change>
    <change id="darklaf">
        <api name="util"/>
        <summary>Added an option to load different images and icons when using a dark look and feel.</summary>
        <version major="8" minor="35"/>
        <date year="2013" month="12" day="6"/>
        <author login="saubrecht"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                When the IDE is running under a dark look and feel (<code>UIManager.getBoolean("nb.dark.theme")</code>)
                then <code>ImageUtilities</code> will try to load an image or on icon with a "_dark" suffix.
                For example "org/netbeans/modulename/toolbaricon<b>_dark</b>.png" or
                "org/netbeans/modulename/imagewithoutextension<b>_dark</b>". If such
                resource exists it will be used instead of the default one.
            </p>
        </description>
        <class package="org.openide.util" name="ImageUtilities"/>
        <issue number="233959"/>
    </change>
    <change id="pair">
        <api name="util"/>
        <summary>Added a type safe Pair of 2 elements</summary>
        <version major="8" minor="32"/>
        <date year="2013" month="5" day="1"/>
        <author login="tzezula"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                Added a type safe Pair of 2 elements.
            </p>
        </description>
        <class package="org.openide.util" name="Pair" link="no"/>
        <issue number="228994"/>
    </change>
    <change id="automatic-uqe">
        <api name="util"/>
        <summary>Automatic support for UserQuestionException</summary>
        <version major="8" minor="29"/>
        <date year="2012" month="11" day="14"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                The default NetBeans Platform infrastructure knows how to
                display dialog when a <code>UserQuestionException</code> is
                reported.
            </p>
        </description>
        <class package="org.openide.util" name="Exceptions" link="no"/>
        <class package="org.openide.util" name="UserQuestionException"/>
        <issue number="57748"/>
    </change>
    <change id="File.URI">
        <api name="util"/>
        <summary>UNC-safe File / URI interconversion</summary>
        <version major="8" minor="25"/>
        <date year="2012" month="6" day="11"/>
        <author login="jglick"/>
        <compatibility addition="yes">
            <p>
                Use the Jackpot-format upgrade hint.
            </p>
        </compatibility>
        <description>
            <p>
                <code>Utilities</code> gets new methods <code>toURI(File)</code>
                and <code>toFile(URI)</code> which offer the UNC safety of NIO.2
                even on JDK 6.
            </p>
        </description>
        <class package="org.openide.util" name="Utilities"/>
        <issue number="213562"/>
    </change>
    <change id="exit-code">
        <api name="util"/>
        <summary>Exit with status code</summary>
        <version major="8" minor="23"/>
        <date year="2012" month="3" day="8"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                <a href="@TOP@/org/openide/LifecycleManager.html">LifecycleManager</a>
                has new <code>exit</code> method allowing callers to specify
                the exit code.
            </p>
        </description>
        <class package="org.openide" name="LifecycleManager"/>
        <issue number="209018"/>
    </change>
    <change id="Messages.fields">
        <api name="util"/>
        <summary><code>@NbBundle.Messages</code> available on fields</summary>
        <version major="8" minor="22"/>
        <date year="2012" month="1" day="3"/>
        <author login="jglick"/>
        <compatibility addition="yes">
            <p>
                Existing annotations made on classes but only used from a field
                within that class will continue to work, but for clarity should
                be moved onto the field.
            </p>
        </compatibility>
        <description>
            <p>
                <code>@NbBundle.Messages</code> may now be used on fields, useful
                in case the field initializer involves some complex construction
                requiring a localized message. (Merely storing a localized message
                in a String constant is poor practice; inline the field instead.)
            </p>
        </description>
        <class package="org.openide.util" name="NbBundle" link="no"/>
        <issue number="206543"/>
    </change>
    <change id="HelpCtx.display">
        <api name="util"/>
        <summary><code>HelpCtx.display</code> added</summary>
        <version major="8" minor="21"/>
        <date year="2011" month="12" day="13"/>
        <author login="jglick"/>
        <compatibility binary="compatible">
            <p>
                Modules calling <code>org.netbeans.api.javahelp.Help.showHelp</code>
                via reflection should use this new API instead.
            </p>
        </compatibility>
        <description>
            <p>
                To permit modules to display help pages where available without
                a direct dependency on the JavaHelp API, <code>HelpCtx.display()</code>
                was added together with a matching SPI.
            </p>
        </description>
        <class package="org.openide.util" name="HelpCtx"/>
        <issue number="205992"/>
    </change>
    <change id="rp.cancel">
        <api name="util"/>
        <summary>RequestProcessor tweaks</summary>
        <version major="8" minor="19"/>
        <date day="12" month="10" year="2011"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" semantic="incompatible">
            The changes are supposed to be as compatible as possible. The only
            desirable change is that calling <code>cancel(); cancel()</code> on
            the same task returns <code>false</code> on the second call now.
            In spite of that the changes caused bunch of regressions and it took
            a week to stabilize them. That is why they deserve a warning note
            in compatibility section.
        </compatibility>            
        <description>
            <p>
            In order to deal with bug #202354 there were some minor tweaks
            inside <code>RequestProcessor</code> implementation.
            </p>
        </description>
        <class package="org.openide.util" name="RequestProcessor" link="no"/>
        <issue number="202354"/>
    </change>
    <change id="ProxyCredentialsProvider">
        <api name="util"/>
        <summary>SPI <code>NetworkSettings.ProxyCredentialsProvider</code> added</summary>
        <version major="8" minor="17"/>
        <date day="20" month="9" year="2011"/>
        <author login="jrechtacek"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Most of the proxy and network credentials are currently read
                from a default NetBeans storage. This may not be ideal
                for other Platform aplications storing the settings in a different
                way or computing them dynamically. 
                A SPI <a href="@TOP@/org/openide/util/NetworkSettings.ProxyCredentialsProvider.html">
                NetworkSettings.ProxyCredentialsProvider</a> allows NetBeans Platform
                users to provide proxy and network credentials separately.
                See <a href="http://wiki.netbeans.org/Authenticator">http://wiki.netbeans.org/Authenticator</a>
            </p>
        </description>
        <class package="org.openide.util" name="NetworkSettings"/>
        <issue number="201662"/>
    </change>
    <change id="SuppressAuthentication">
        <api name="util"/>
        <summary><code>NetworkSettings.suppressAuthenticationDialog</code> added</summary>
        <version major="8" minor="17"/>
        <date day="20" month="9" year="2011"/>
        <author login="jrechtacek"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Some plugins needs a way to suppress <a href="@JDK@/java/net/Authenticator.html"><code>java.net.Authenticator</code></a> without asking
                user a question about the credentials. 
                Invoke <a href="@TOP@/org/openide/util/NetworkSettings.html#suppressAuthenticationDialog-java.util.concurrent.Callable-">
                suppressAuthenticationDialog</a> with a block of code where authentication dialog will be suppressed.                
                See <a href="http://wiki.netbeans.org/Authenticator">http://wiki.netbeans.org/Authenticator</a>
            </p>
        </description>
        <class package="org.openide.util" name="NetworkSettings"/>
        <issue number="201662"/>
    </change>
    <change id="NetworkSettings">
        <api name="util"/>
        <summary><code>NetworkSettings</code> added</summary>
        <version major="8" minor="13"/>
        <date day="1" month="2" year="2011"/>
        <author login="jrechtacek"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added new useful methods for getting Network Proxy for specified URI.
            </p>
        </description>
        <class package="org.openide.util" name="NetworkSettings"/>
        <issue number="194530"/>
    </change>
    <change id="ImageUtilities.URL">
        <api name="util"/>
        <summary>ImageUtilities support "url" attribute</summary>
        <version major="8" minor="12"/>
        <date day="10" month="1" year="2011"/>
        <author login="jtulach"/>
        <compatibility addition="yes"/>
        <description>
            <p>
            Images loaded by <a href="@TOP@/org/openide/util/ImageUtilities.html#loadImage-java.lang.String-boolean-">
            ImageUtilities.loadImage</a> now
            respond to <code>getProperty("url", null)</code> calls.
            </p>
        </description>
        <class package="org.openide.util" name="ImageUtilities"/>
        <issue number="193944"/>
    </change>
    <change id="WeakSet.putIfAbsent">
        <api name="util"/>
        <summary>New implementation of WeakSet with two new methods <code>putIfAbsent</code> and <code>resize</code>
        </summary>
        <version major="8" minor="11"/>
        <date day="22" month="12" year="2010"/>
        <author login="vv159170"/>
        <compatibility addition="yes"/>
        <description>
            <p>
            New method putIfAbsent gives access to key already stored in Set. Method resize allows to change capacity of internal hash map.
            </p>
        </description>
        <class package="org.openide.util" name="WeakSet" link="no"/>
        <issue number="192759"/>
    </change>
    <change id="NbBundle.Messages">
        <api name="util"/>
        <summary>Added <code>@NbBundle.Messages</code></summary>
        <version major="8" minor="10"/>
        <date day="8" month="12" year="2010"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                A new annotation makes it easier to produce localizable strings.
            </p>
        </description>
        <class package="org.openide.util" name="NbBundle" link="no"/>
        <issue number="192750"/>
    </change>
    <change id="Exceptions.attachSeverity">
        <api name="util"/>
        <summary>Supress logging of not important exceptions</summary>
        <version major="8" minor="9"/>
        <date day="8" month="9" year="2010"/>
        <author login="jtulach"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                New method <code>Exceptions.attachSeverity</code> allows
                everyone to thrown an exception, which later will not be
                logged.
            </p>
        </description>
        <class package="org.openide.util" name="Exceptions" link="no"/>
        <issue number="190079"/>
    </change>
    <change id="RequestProcessorForClass">
        <api name="util"/>
        <summary>Simplified constructor for RequestProcessor</summary>
        <version major="8" minor="6"/>
        <date day="13" month="4" year="2010"/>
        <author login="jtulach"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Simpler constructor for RequestProcessor.
            </p>
        </description>
        <class package="org.openide.util" name="RequestProcessor" link="no"/>
        <issue number="180458"/>
    </change>
    <change id="CharSequences">
        <api name="util"/>
        <summary>Added <code>CharSequences</code></summary>
        <version major="8" minor="3"/>
        <date day="2" month="4" year="2010"/>
        <author login="vv159170"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                <code>CharSequences.create</code> can now be used
                to create memory-efficient implementations of <code>CharSequence</code> for ASCII strings.
            </p>
        </description>
        <class package="org.openide.util" name="CharSequences" link="no"/>
        <issue number="183162"/>
    </change>
    <change id="ActionInvoker-ActionPresenterProvider">
        <api name="actions"/>
        <summary>Action SPI interfaces added</summary>
        <version major="8" minor="1"/>
        <date day="21" month="1" year="2010"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added some internal SPI interfaces.
            </p>
        </description>
        <class package="org.openide.util.actions" name="ActionInvoker"/>
        <class package="org.openide.util.actions" name="ActionPresenterProvider"/>
        <issue number="179289"/>
    </change>
    <change id="NbPreferences.Provider">
        <api name="util"/>
        <summary><code>NbPreferences.Provider</code> added</summary>
        <version major="8" minor="1"/>
        <date day="21" month="1" year="2010"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added an internal SPI interface.
            </p>
        </description>
        <class package="org.openide.util" name="NbPreferences" link="no"/>
        <issue number="179289"/>
    </change>
    <change id="lookup.is.free">
        <api name="util"/>
        <summary>Lookup API extracted</summary>
        <version major="8" minor="0"/>
        <date day="20" month="12" year="2009"/>
        <author login="jtulach"/>
        <compatibility modification="yes">
            <p>
                Runtime compatibility remains, compile time compatibility is
                mostly preserved too. It is however recommended to upgrade
                dependencies of your modules. Try running
                <code>ant fix-dependencies</code> in your Ant module.
            </p>
        </compatibility>
        <description>
            <p>
                <a href="@org-openide-util-lookup@/org/openide/util/Lookup.html">Lookup</a>
                and its associated interfaces are now available as a
                <a href="@org-openide-util-lookup@/overview-summary.html">separate module</a>.
            </p>
        </description>
        <issue number="170056"/>
    </change>
    <change id="URLStreamHandlerRegistration">
        <api name="util"/>
        <summary>Added <code>@URLStreamHandlerRegistration</code></summary>
        <version major="7" minor="31"/>
        <date day="30" month="10" year="2009"/>
        <author login="jglick"/>
        <compatibility addition="yes">
            <p>
                Modules registering <code>URLStreamHandlerFactory</code>s into
                global lookup will still work but are advised to switch to this
                annotation, which is both easier to use and more efficient.
            </p>
        </compatibility>
        <description>
            <p>
                Introduced an annotation to register URL protocols.
            </p>
        </description>
        <class package="org.openide.util" name="URLStreamHandlerRegistration" link="no"/>
        <issue number="20838"/>
    </change>
    <change id="ImageUtilities.createDisabled">
        <api name="util"/>
        <summary><code>ImageUtilities.createDisabledIcon</code> and <code>ImageUtilities.createDisabledImage</code> added.</summary>
        <version major="7" minor="28"/>
        <date day="10" month="9" year="2009"/>
        <author login="t_h"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                <code>ImageUtilities.createDisabledIcon</code> now can be used
                to create low color saturation icon for disabled buttons. Also
                <code>ImageUtilities.createDisabledImage</code> was added.
            </p>
        </description>
        <class package="org.openide.util" name="ImageUtilities"/>
        <issue number="171400"/>
    </change>
    <change id="NbBundle.varargs">
        <api name="util"/>
        <summary><code>NbBundle.getMessage</code> can take arbitrarily many format arguments</summary>
        <version major="7" minor="27"/>
        <date day="5" month="8" year="2009"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                <code>NbBundle.getMessage</code> now has a varargs overload that
                permits you to specify four or more format arguments without
                explicitly constructing an array.
            </p>
        </description>
        <class package="org.openide.util" name="NbBundle" link="no"/>
    </change>
    <change id="EditableProperties">
        <api name="util"/>
        <summary>Copied API from <code>project.ant</code> for <code>EditableProperties</code>.</summary>
        <version major="7" minor="26"/>
        <date day="29" month="7" year="2009"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                 <code>EditableProperties</code> now available in Utilities API
                 so it can be used more broadly.
            </p>
        </description>
        <class package="org.openide.util" name="EditableProperties" link="no"/>
        <issue number="66577"/>
    </change>
    <change id="LifecycleManager.markForRestart">
        <api name="util"/>
        <summary>Added way to request that the platform restart.</summary>
        <version major="7" minor="25"/>
        <date day="14" month="7" year="2009"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                 Can now use <code>LifecycleManager.markForRestart</code> to cause
                 the application to restart after exiting. Formerly needed to
                 create special files in the userdir or use similar tricks.
            </p>
        </description>
        <class package="org.openide" name="LifecycleManager"/>
        <issue number="168257"/>
    </change>
    <change id="enableStackTraces">
        <api name="util"/>
        <summary>Added constructor <code>RequestProcessor(String name, int throughput, boolean interruptThread, boolean enableStackTraces)</code></summary>
        <version major="7" minor="24"/>
        <date day="8" month="6" year="2009"/>
        <author login="rmichalsky"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Newly added constructor allows to disable (slow) filling stack traces before posting each task. 
            </p>
        </description>
        <class package="org.openide.util" name="RequestProcessor" link="no"/>
        <issue number="165862"/>
    </change>
    <change id="ImageUtilities.loadImageIcon">
        <api name="util"/>
        <summary>Added <code>loadImageIcon(String resource, boolean localized)</code></summary>
        <version major="7" minor="22"/>
        <date day="26" month="1" year="2009"/>
        <author login="t_h"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Convenient method for loading icons.
            </p>
        </description>
        <class package="org.openide.util" name="ImageUtilities"/>
        <issue number="157254"/>
    </change>
    <change id="Utilities.keyToString">
        <api name="util"/>
        <summary>Added <code>keyToString(KeyStroke stroke, boolean portable)</code></summary>
        <version major="7" minor="21"/>
        <date day="8" month="1" year="2009"/>
        <author login="msauer"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                <code>keyToString(KeyStroke stroke, boolean portable)</code>
                provides cross-platform compitable keystroke textual representation
                instead of hardcoding Ctrl, Meta or Alt key.
            </p>
        </description>
        <class package="org.openide.util" name="Utilities"/>
        <issue number="110492"/>
    </change>
    <change id="Utilities.OS_OPENBSD">
        <api name="util"/>
        <summary>Added <code>OS_OPENBSD</code> and <code>OS_UNIX_OTHER</code> fields</summary>
        <version major="7" minor="18"/>
        <date day="16" month="9" year="2008"/>
        <author login="jskrivanek"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added a new <code>Utilities.OS_OPENBSD</code> and <code>OS_UNIX_OTHER</code>
                fields. Deprecated <code>OS_WINDOWS_MASK</code> and <code>OS_UNIX_MASK</code>.
            </p>
        </description>
        <class package="org.openide.util" name="Utilities"/>
        <issue number="145462"/>
    </change>
    <change id="Utilities.OS_WINVISTA">
        <api name="util"/>
        <summary>Added <code>OS_WINVISTA</code> field</summary>
        <version major="7" minor="17"/>
        <date day="8" month="8" year="2008"/>
        <author login="jskrivanek"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added a new <code>Utilities.OS_WINVISTA</code> field to be able
                to recognize Windows Vista operating system.
            </p>
        </description>
        <class package="org.openide.util" name="Utilities"/>
        <issue number="142629"/>
    </change>
    <change id="XMLUtil.validate">
        <api name="xml"/>
        <summary>Added <code>XMLUtil.validate</code></summary>
        <version major="7" minor="17"/>
        <date day="11" month="7" year="2008"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added a new method to validate XML documents against schemas.
            </p>
        </description>
        <class package="org.openide.xml" name="XMLUtil" link="no"/>
        <issue number="42686"/>
    </change>
    <change id="RequestProcessor.Executor">
        <api name="util"/>
        <summary>RequestProcessor implements Executor interface</summary>
        <version major="7" minor="16"/>
        <date day="27" month="6" year="2008"/>
        <author login="jtulach"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                In order to align <code>RequestProcessor</code> closer to standard 
                Java 5 concurrency utilities, the class now implements
                <a href="@JDK@/java/util/concurrent/Executor.html">Executor</a>
                interfaces and its <code>execute(Runnable)</code> method.
            </p>
        </description> 
        <class package="org.openide.util" name="RequestProcessor" link="no"/>
        <issue number="134297"/>
    </change>
    <change id="Utilities.toolTips">
        <api name="util"/>
        <summary>ImageUtilities class (with additional methods) was created as 
        replacement for "image methods" in Utilities. </summary>
        <version major="7" minor="15"/>
        <date day="6" month="6" year="2008"/>
        <author login="t_h"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Image methods were separated to <a href="@TOP@/org/openide/util/ImageUtilities.html">ImageUtilities</a>
                (renamed IconManager) as replacement for methods in Utilities. 
                There are some additional methods for image tool tips manipulation.
            </p>
            <p>    
                New methods for tool tips manipulation:
                <code>Image assignToolTipToImage(Image image, String text)</code>;
                <code>String getImageToolTip(Image image)</code>;
                <code>Image addToolTipToImage(Image image, String text)</code>;
            </p>
            <p>
                New method for conversion from Image to Icon:
                <code>Icon image2Icon(Image image)</code>;
            </p>
            <p>
                "Moved" methods from <a href="@TOP@/org/openide/util/Utilities.html">Utilities</a>:
                <code>Image icon2Image(Icon icon)</code>;
                <code>Image loadImage(String resourceID)</code>;
                <code>Image loadImage(String resource, boolean localized)</code>;
                <code>Image mergeImages(Image image1, Image image2, int x, int y)</code>;
            </p>
        </description> 
        <class package="org.openide.util" name="Utilities"/>
        <class package="org.openide.util" name="ImageUtilities"/>
        <issue number="123469"/>
    </change>
    <change id="Mutex.Wrapper">
        <api name="util"/>
        <summary>Mutex made pluggable</summary>
        <version major="7" minor="12"/>
        <date day="3" month="1" year="2008"/>
        <author login="jtulach"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added new constructor
                <a href="@org-openide-util@/org/openide/util/Mutex.html">Mutex(Privileged, Executor)</a>
                that allows creators of the mutex to intercept and wrap all actions running
                inside the mutex with custom code.
            </p>
        </description> 
        <class package="org.openide.util" name="Mutex" link="no"/>
        <issue number="123832"/>
    </change>
    <change id="Utilities.isLargeFrameIcons">
        <api name="util"/>
        <summary>Obsolete method <code>Utilities.isLargeFrameIcons</code> deprecated.</summary>
        <version major="7" minor="10"/>
        <date day="23" month="10" year="2007"/>
        <author login="mslama"/>
        <compatibility addition="no" deprecation="yes"/>
        <description>
            <p>
            Javadoc says: Test whether the operating system supports icons on frames (windows).
            But window system used this method to decide if small 16x16 or bigger 32x32 icon
            should be used for frame (main window). So usage and Javadoc is inconsistent.
            All OS support small icon in frame. From JDK 6 it is possible to set multiple size
            icons for frame so OS WM selects appropriate size.
            I removed useless usage of this method from window system code and this method is
            not used elsewhere.
            </p>
        </description> 
        <class package="org.openide.util" name="Utilities"/>
        <issue number="119069"/>
    </change>

    <change id="ChangeSupport">
        <api name="util"/>
        <summary>Added <code>ChangeSupport</code></summary>
        <version major="7" minor="8"/>
        <date day="26" month="3" year="2007"/>
        <author login="abadea"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added a <code>ChangeSupport</code> class to simplify
                the management of <code>ChangeListener</code>s and the 
                firing of <code>ChangeEvent</code>s.
            </p>
        </description>
        <class package="org.openide.util" name="ChangeSupport" link="no"/>
        <issue number="95885"/>
    </change>

    <change id="Utilities.isMac">
        <api name="util"/>
        <summary>Added <code>Utilities.isMac()</code> method</summary>
        <version major="7" minor="7"/>
        <date day="11" month="1" year="2007"/>
        <author login="rkubacki"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added a <code>Utilities.isMac()</code> method for checking 
                if current platform is Mac.
            </p>
        </description>
        <class package="org.openide.util" name="Utilities"/>
        <issue number="61044"/>
    </change>

    <change id="Parameters">
        <api name="util"/>
        <summary>Added <code>Parameters</code></summary>
        <version major="7" minor="6"/>
        <date day="8" month="12" year="2006"/>
        <author login="abadea"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added a <code>Parameters</code> class for checking the
                values of method parameters.
            </p>
        </description>
        <class package="org.openide.util" name="Parameters" link="no"/>
        <issue number="89768"/>
    </change>

    <change id="NbCollections.iterable">
        <api name="util"/>
        <summary>Added <code>NbCollections.iterable(...)</code> methods</summary>
        <version major="7" minor="5"/>
        <date day="13" month="11" year="2006"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added two new methods to make enhanced for-loops easier to use
                with legacy APIs returning <code>Iterator</code> or <code>Enumeration</code>.
            </p>
        </description>
        <class package="org.openide.util" name="NbCollections" link="no"/>
        <issue number="88606"/>
    </change>

    <change id="nbpreferences">
        <api name="util"/>
        <summary>Added <code>NbPreferences.forModule(Class cls)</code> and
          <code>NbPreferences.root()</code> methods as static factory methods
          for getting preference node from NetBeans preference tree.</summary>
        <version major="7" minor="4"/>
        <date day="10" month="11" year="2006"/>
        <author login="rmatous"/>
        <compatibility addition="yes" deprecation="no"/>
        <description>
            <p>
              NetBeans preference tree is provided by NetBeans implementation of preferences
              which uses userdir as a storage. Both newly added methods return
              preferences  node from NetBeans preference tree.
              Method <code>NbPreferences.root()</code> returns root preference
              node.
              Method <code>NbPreferences.forModule(Class cls)</code> returns
              preference node whose
              path depends whether class provided as a parameter
              was loaded as a part of any module or not. If so, then absolute path corresponds to slashified 
              code name base of module. If not, then absolute path corresponds to class's package.
              See document
              <a href="@org-openide-util@/org/openide/util/doc-files/preferences.html">Preferences in NetBeans</a>
              to learn more about preferences in NetBeans.              
            </p>
        </description>
        <class package="org.openide.util" name="NbPreferences" link="no"/>
        <issue number="73474"/>
    </change>

    <change id="icon2image">
        <api name="util"/>
        <summary>Added <code>Utilities.icon2Image</code> method to perform conversion from <code>Icon</code> to Image</summary>
        <version major="7" minor="3"/>
        <date day="4" month="7" year="2006"/>
        <author login="rkubacki"/>
        <compatibility addition="yes" deprecation="no"/>
        <description>
            <p>
                Conversion from <code>Icon</code> to <code>Image</code> is done 
                at various places and newly introduced method avoids the need to 
                duplicate the same code.
            </p>
        </description>
        <class package="org.openide.util" name="Utilities"/>
        <issue number="52562"/>
    </change>
    
    <change id="Exceptions">
        <api name="util"/>
        <summary>Added <code>Exceptions</code> class as a replacement for <code>ErrorManager</code></summary>
        <version major="7" minor="2"/>
        <date day="20" month="6" year="2006"/>
        <author login="jtulach"/>
        <compatibility addition="yes" deprecation="yes"/>
        <description>
            <p>
                <code>ErrorManager</code> is now deprecated and its replacement
                is either <a href="@JDK@/java/util/logging/Logger.html">Logger</a> 
                or <code>Exceptions</code>.
            </p>
        </description>
        <class package="org.openide.util" name="Exceptions" link="no"/>
        <issue number="35067"/>
    </change>
    
    <change id="NbCollections">
        <api name="util"/>
        <summary>Added <code>NbCollections</code> and <code>Union2</code></summary>
        <version major="7" minor="1"/>
        <date day="5" month="6" year="2006"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added two new classes useful for transitioning to JDK 5 generics.
            </p>
        </description>
        <class package="org.openide.util" name="NbCollections" link="no"/>
        <class package="org.openide.util" name="Union2" link="no"/>
        <issue number="73637"/>
    </change>
    
    <change id="use-logging" >
      <api name="util"/>
      <summary>Do not use ErrorManager for logging</summary>
      <version major="7" minor="0"/>
      <date day="15" month="4" year="2006"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="yes" binary="compatible" source="compatible" semantic="incompatible" deprecation="no" deletion="no"/>
      <description>
          <a href="@TOP@/org/openide/ErrorManager.html">ErrorManager</a>
          is no longer the recommended way to do logging in NetBeans based
          application. Instead NetBeans now fully support logging two JDK's
          standard <a href="@JDK@/java/util/logging/Logger.html">Logger</a>.
          See the
          <a href="@org-openide-util@//org/openide/util/doc-files/logging.html">NetBeans logging guide</a>
          to learn the best practises for logging in NetBeans.
          <br/>
          <a href="@TOP@/org/openide/ErrorManager.html">ErrorManager</a>
          is still kept around for annotating exceptions with localized
          messages and advanced manipulation and its behaviour is fully
          backward compatible. However modules are adviced to migrate to
          <a href="@JDK@/java/util/logging/Logger.html">logging</a> whereever
          possible.
          <br/>
          To migrate your modules you can install Jackpot modules from
          autoupdate (if they are not yet part of your IDE) and apply
          precreate <a href="http://www.netbeans.org/source/browse/openide/util/Attic/ErrorManagerJackpot.rules">
          javapot error manager rule</a>.
          <br/>
          There is one possible incompatibility from end user point of view.
          The way to <em>enable logging</em> for certain components when
          running inside the whole NetBeans container has changed:
          If there is 
          <a href="@JDK@/java/util/logging/Logger.html">Logger</a> or
          <a href="@TOP@/org/openide/ErrorManager.html">ErrorManager</a>
          named <q>org.mymodule.MyComponent</q> then the correct way
          to turn the logging is now to invoke NetBeans with
          <code>-J-Dorg.mymodule.MyComponent<b>.level</b>=100</code>
          (where the possible constants are taken form
          a JDK's definition of <a href="@JDK@/java/util/logging/Level.html">level</a>).
          There is however a certain benefit in this change, the value
          of the property (like <q>org.mymodule.MyComponent.level</q>)
          can be changed during runtime and thus the logging can be
          enabled or disabled dynamically (after changing the value, it is
          necessary to call
          <a href="@JDK@/java/util/logging/LogManager.html">LogManager.readConfiguration()</a>).
      </description>
      <class package="org.openide" name="ErrorManager"/>
      <issue number="56311"/>
    </change>
    <change id="rp-create-true" >
      <api name="util"/>
      <summary>Ability to create finished RequestProcessor task</summary>
      <version major="6" minor="8"/>
      <date day="22" month="11" year="2005"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="no" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no"/>
      <description>
        <a href="@org-openide-util@/org/openide/util/RequestProcessor.html">RequestProcessor.create(Runnable, boolean)</a>
        has been added to allow creation of 
        <a href="@org-openide-util@/org/openide/util/RequestProcessor.Task.html">Task</a>
        that has not executed its runnable yet, but looks like it is finished.
      </description>
      <class package="org.openide.util" name="RequestProcessor" link="no"/>
      <issue number="68031"/>
    </change>
    
    <change>
      <api name="util"/>
      <summary>DynamicMenuContent interface added</summary>
      <version major="6" minor="4"/>
      <date day="12" month="6" year="2005"/>
      <author login="mkleint"/>
      <compatibility addition="no" modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no"/>
      <description>
        In order to support MacOSX top menus and to fix problems with deprecated JInlineMenu, this new
        interface was added that allows to handle dynamic content in 
<a href="@TOP@/org/openide/util/actions/Presenter.Menu.html">Presenter.Menu</a>
 and <a href="@TOP@/org/openide/util/actions/Presenter.Popup.html">Presenter.Popup</a>.
        If the instance returned by Presenter.Menu/Popup is an instance of 
<a href="@org-openide-awt@/org/openide/awt/DynamicMenuContent.html">DynamicMenuContent</a>, it's methods are
        consulted when creating/updating the menu.
      </description>
      <class package="org.openide.util.actions" name="Presenter"/>
      <issue number="35827"/>
    </change>
    

    
    <change>
      <api name="util"/>
      <summary>Support for interruption of RequestProcessor tasks</summary>
      <version major="6" minor="3"/>
      <date day="10" month="6" year="2005"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no"/>
      <description>
          When one calls <a href="@org-openide-util@/org/openide/util/RequestProcessor.Task.html">RequestProcessor.Task</a>.cancel(), 
          the running thread gets interrupted if the 
          <a href="@org-openide-util@/org/openide/util/RequestProcessor.html#RequestProcessor-java.lang.String-int-boolean-">
          RequestProcessor(string, int, boolean) 
          </a> 
          constructor is used.
          There always was a way how to cancel not yet running Task, 
          but if the task was already running, one was out of luck. Since now
          the thread running the task is interrupted and the Runnable can check 
          for that and terminate its execution sooner. In the runnable one shall 
          check for  thread interruption and 
          if true, return immediatelly as in this example:
          <pre>
public void run () {
  while (veryLongTimeLook) {
    doAPieceOfIt ();

    if (Thread.interrupted ()) return;
  }
}
</pre>
      </description>
      <class package="org.openide.util" name="RequestProcessor" link="no"/>
      <issue number="33467"/>
    </change>
    <change id="textual-icons-for-actions" >
      <api name="actions"/>
      <summary>Can create textual icons for actions</summary>
      <date day="23" month="3" year="2000"/>
      <author login="jglick"/>
      <compatibility addition="yes" modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no"/>
      <description>
        <code>iconResource</code> may now return <code>null</code> to indicate no
        icon. <code>getIcon(true)</code> may be used to get an icon created from
        the label if there is no icon specified.
      </description>
      <class package="org.openide.util.actions" name="SystemAction"/>
    </change>
    <change id="use-icon-instead-of-imageicon" >
      <api name="actions"/>
      <summary>
        <code>SystemAction</code> refers to <code>Icon</code> rather than <code>ImageIcon</code>
      </summary>
      <date day="11" month="4" year="2000"/>
      <author login="jglick"/>
      <compatibility modification="yes" binary="compatible" source="incompatible" semantic="compatible" deprecation="no" addition="no" deletion="no">
        First broken, later restored binary compatibility in trunk and
        <code>boston</code>. Any code explicitly using this calls before may break
        (source code may be compatible in many cases; binary compatibility has
        been preserved). These calls were known to be used only for
        <code>Actions</code> to create presenters; normal code which constructs
        <code>SystemAction</code>s and implements <code>iconResource</code> should
        be unaffected. Actions using the "grouping action" template should check
        their <code>getMenuPresenter</code> method which may be
        binary-incompatible; it is easy to replace the code with safer code such
        as:
        <pre xml:space="preserve">
<span class="comment">// ....
</span>
<span class="keyword">private</span> <span class="keyword">static</span> <span class="type">Icon</span> <span class="variable-name">icon</span> = <span class="constant">null</span>;
<span class="comment">// ....
</span>
<span class="keyword">public</span> <span class="type">JMenuItem</span> <span class="function-name">getMenuPresenter</span>() {
    <span class="type">JMenu</span> <span class="variable-name">menu</span> = <span class="keyword">new</span> <span class="type">JMenu</span>(getName ());
    <span class="keyword">if</span> (icon == <span class="constant">null</span>) {
        icon = <span class="keyword">new</span> <span class="type">ImageIcon</span>(MyAction.<span class="keyword">class</span>.getResource(iconResource()));
    }
    menu.setIcon(icon);
    <span class="comment">// ....</span>
</pre>
      </compatibility>
      <description>
        <code>getIcon</code> and <code>setIcon</code> now use the interface
        <code>Icon</code> rather than the particular implementation
        <code>ImageIcon</code>. This corrects an API bug (excessive specificity).
      </description>
      <class package="org.openide.util.actions" name="SystemAction"/>
    </change>
    <change>
        <api name="actions"/>
        <summary>New Actions system - part I.</summary>
        <version major="3" minor="29"/>
        <date day="8" month="1" year="2003"/>
        <author login="jtulach"/>
        <author login="pzavadsky"/>
        <compatibility deprecation="yes" addition="yes" modification="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no"/>
        <description>
            <p>
            Introduction of new action system, which generally means
            move from usage of <code>SystemAction</code> to <code>Action</code> instances.
            That document also focuses on declarative actions
            usage which is not subject of current change, it will be part of later changes.
            </p>
        </description>
        <class package="org.openide.util" name="ContextAwareAction"/>
        <class package="org.openide.util" name="Utilities"/>
        <class package="org.openide.util.actions" name="CallbackSystemAction"/>
        <issue number="27868"/>
    </change>

<change id="Task-waitFinished-timeout">
      <api name="util"/>
      <summary>New method <code>task.waitFinished(timeout)</code> added</summary>
      <version major="5" minor="0"/>
      <date day="2" month="11" year="2004"/>
      <author login="jtulach"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <p>It is not possible to wait for a limited amount of time for
            completion of any task. The <code>RequestProcessor.Task</code>
            version is optimized, the <code>Task</code> version ensures that
            the sematics will be compatible for all subclasses, even they did
            not know about the method at all.
        </p>
      </description>
      <class package="org.openide.util" name="Task" link="no"/>
      <class package="org.openide.util" name="RequestProcessor" link="no"/>
      <issue number="16849"/>
    </change>
<change id="add-detection-of-FreeBSD-OS">
      <api name="util"/>
      <summary>Added field <code>OS_FREEBSD</code> to <code>Utilities</code>
</summary>
      <version major="4" minor="50"/>
      <date day="29" month="10" year="2004"/>
      <author login="jrechtacek"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <p>FreeBSD was not recognized as Unix OS. <code>Utilities</code> has been
        enlarged with new field <code>OS_FREEBSD</code>, part of OS Unix mask. <code>Utilities.isUnix()</code>
        now returns <code>true</code> for applications run on FreeBSD.
        </p>
      </description>
      <class package="org.openide.util" name="Utilities"/>
    </change>
    <change id="Mutex.isReadWriteAccess">
        <api name="util"/>
        <summary>Added <code>Mutex.isReadAccess()</code> and <code>Mutex.isWriteAcess()</code>
</summary>
        <version major="4" minor="48"/>
        <date day="30" month="9" year="2004"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            A thread can now check whether read or write access on a <code>Mutex</code>
            has already been
            granted to it and use it to decide whether it is safe to perform
            certain operations or delay them.
        </description>
        <class package="org.openide.util" name="Mutex" link="no"/>
        <issue number="49459"/>
    </change>
<change id="SharedClassObject.reset">
        <api name="util"/>
        <summary>Added <code>SharedClassObject.reset</code> method to allow subclasses to implement reset correctly</summary>
        <version major="4" minor="46"/>
        <date day="2" month="9" year="2004"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            The new <code>SharedClassObject.reset</code> method is called
            by the infrastructure in moments when an original (at the time
            of start) state of an option or any other <code>SharedClassObject</code>
            is requested. Interested subclasses are free to implement any kind of clean
            they need. The <code>SystemOption</code> provides a default 
            implementation based on fired property changed events, so 
            its correctly written subclasses do not need 
            to do anything.
        </description>
        <class package="org.openide.util" name="SharedClassObject"/>
        <issue number="20962"/>
    </change>
<change>
     <api name="util"/>
     <summary>enum package deprecated and replaced by Enumerations factory class</summary>
     <version major="4" minor="37"/>
     <date day="7" month="6" year="2004"/>
     <author login="jtulach"/>
     <compatibility deprecation="yes" addition="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
     <description>
        enum is a keyword in JDK 1.5 and as such it should not be used. 
        That is the reason why we had to deprecated our 
        <code>org.openide.util.enum</code> package. We are providing 
        replacements of the original classes in form of factory methods
        <code>org.openide.util.Enumerations</code>.
     </description>
     <class package="org.openide.util" name="Enumerations" link="no"/>
     <issue number="41166"/>
    </change>
<change>
     <api name="util"/>
     <summary>Support for complicated listeners</summary>
     <version major="4" minor="12"/>
     <date day="2" month="9" year="2003"/>
     <author login="jtulach"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
     Improved support for hierarchic listeners (aka NamingListener vs. ObjectChangeListener from
     javax.naming.event package).
     </description>
     <class package="org.openide.util" name="WeakListeners" link="no"/>
     <issue number="35726"/>
    </change>
<change id="Utilities.actionsGlobalContext">
     <api name="util"/>
     <summary>Global action context as <code>Lookup</code>
</summary>
     <version major="4" minor="10"/>
     <date day="12" month="8" year="2003"/>
     <author login="jtulach"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
       As part of the work on separation of openide.jar into smaller parts 
       a new interface <code>ContextGlobalProvider</code> and new method
       in utilities <code>Utilities.actionsGlobalContext()</code> had to be
       added in order to separate the implementation of actions like
       <code>CallbackSystemAction</code> and <code>NodeAction</code> from 
       their dependency on window system.
     </description>
     <class package="org.openide.util" name="ContextGlobalProvider"/>
     <class package="org.openide.util" name="Utilities"/>
     <issue number="34758"/>
    </change>
<change id="WeakListeners">
     <api name="util"/>
     <summary>Old <code>WeakListener</code> replaced by <code>WeakListeners</code> class</summary>
     <version major="4" minor="10"/>
     <date day="12" month="8" year="2003"/>
     <author login="jtulach"/>
     <compatibility deprecation="yes" addition="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
     <description>
        <p>
       As part of the work on separation of openide.jar into smaller parts 
       the <code>WeakListener</code> had to be deprecated as it referenced too
       many classes around and replaced by more general <code>WeakListeners</code>
       factory class that provides a generic <code>create</code> method and
       specialized factory methods just for JDK own interfaces.
        </p>
        <p>
       Also few factory methods were spread into appropriate packages like
       <code>FileUtil.weakFileChangeListener</code> and  
       <code>NodeOp.weakNodeListener</code>.
        </p>
     </description>
     <class package="org.openide.util" name="WeakListeners" link="no"/>
     <issue number="34758"/>
    </change>
    <change id="HelpCtx.findHelp">
     <api name="util"/>
     <summary>New method to find HelpCtx</summary>
     <version major="4" minor="3"/>
     <date day="2" month="4" year="2003"/>
     <author login="jtulach"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
        A new method for finding HelpCtx (<code>HelpCtx.findHelp(Object)</code>)
        has been added to replace
        the old <code>InstanceSupport.findHelp</code> that has been
        separated out from the openide.jar.
     </description>
     <class package="org.openide.util" name="HelpCtx"/>
     <issue number="32143"/>
    </change>
<change>
     <api name="util"/>
     <summary>Retrofit of interface Cancellable into RequestProcessor.Task</summary>
     <version major="4" minor="1"/>
     <date day="14" month="3" year="2003"/>
     <author login="dsimonek"/>
     <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
     <description>
        RequestProcessor.Task was made to implement util.Cancellable interface.
        No change of implementation at all, RP.Task already had method from
        interface implemented, this is just a logical retrofit.
     </description>
     <class package="org.openide.util" name="RequestProcessor" link="no"/>
    </change>
<change>
        <api name="util"/>
        <summary>Support for asynchronous init of UI components</summary>
        <version major="3" minor="36"/>
        <date day="5" month="2" year="2003"/>
        <author login="dsimonek"/>
        <compatibility deprecation="no" addition="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
        <description>
            <p>
                Performance related API addition, allows clients to write asynchronous
                initialization of UI components easily by providing <code>AsyncGUIJob</code>
                implementation. Also introduced <code>Cancellable</code> ability.
                <code>Utilities.attachInitJob</code> couples init job with target
                UI component.
            </p>
        </description>
        <class package="org.openide.util" name="AsyncGUIJob"/>
        <class package="org.openide.util" name="Cancellable" link="no"/>
        <class package="org.openide.util" name="Utilities"/>
        <issue number="30604"/>
    </change>
<change>
     <api name="util"/>
     <summary>org.openide.util.Utilities.createProgressCursor added</summary>
     <version major="3" minor="23"/>
     <date day="2" month="12" year="2002"/>
     <author login="dsimonek"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
        Method java.awt.Cursor createProgressCursor(java.awt.Component comp) was
        added into Utilities class. Method creates mouse cursor suitable for
        components which are busy, but still reacts to the input events. (don't
        block UI).
     </description>
     <class package="org.openide.util" name="Utilities"/>
    </change>
<change>
     <api name="util"/>
     <summary>Added interface HelpCtx.Provider</summary>
     <version major="3" minor="20"/>
     <date day="11" month="11" year="2002"/>
     <author login="pnejedly"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
	An interface HelpCtx.Provider with one method getHelpCtx was added
        and the logic in HelpCtx.findHelp and InstanceSupport.findHelp
        was extended to take this interface into accout.
        Various classes with existing getHelpCtx method were retrofitted
        to implement this interface.
     </description>
     <class package="org.openide.util" name="HelpCtx"/>
     <class package="org.openide" name="ServiceType"/>
     <class package="org.openide.util.actions" name="SystemAction"/>
     <class package="org.openide.util.datatransfer" name="NewType"/>
     <class package="org.openide.util.datatransfer" name="PasteType"/>
    </change>
<change>
        <api name="util"/>
        <summary>Can load localized cached images</summary>
        <version major="3" minor="24"/>
        <date day="15" month="12" year="2002"/>
        <author login="jglick"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            Added method <code>Utilities.loadImage(String, boolean)</code>
            which works like <code>Utilities.loadImage(String)</code> except
            that it will search for localized images. Also
            <code>SystemAction.getIcon()</code> will load a localized image now
            if there is one.
        </description>
        <class package="org.openide.util" name="Utilities"/>
        <class package="org.openide.util.actions" name="SystemAction"/>
        <issue number="22156"/>
    </change>
<change>
        <api name="util"/>
        <summary>Utilities.activeReferenceQueue()</summary>
        <version major="3" minor="11"/>
        <date day="7" month="10" year="2002"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
           Active java.util.ref.ReferenceQueue that polls for all
           enqued instances (that should implement Runnable) and
           invokes their run method to do actual cleanup. 
        </description>
        <class package="org.openide.util" name="Utilities"/>
         <issue number="27238"/>
    </change>
<change>
        <api name="util"/>
        <summary>Deprecation of parts of MouseUtils.PopupMenuAdapter</summary>
        <version major="3" minor="4"/>
        <date day="6" month="8" year="2002"/>
        <author login="dsimonek"/>
        <compatibility deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no" modification="no"/>
        <description>
          Constructor MouseUtils.PopupMenuAdapter(int) and public static field
          DEFAULT_THESHOLD are now obsoleted, performs no action.
          PopupMenuAdapter now delegates to isPopupTrigger crossplatform call,
          should be constructed via default constructor.
        </description>
    </change>
<change>
      <api name="util"/>
      <summary>
<code>Utilities.toFile</code> and <code>toURL</code> added</summary>
      <version major="3" minor="26"/>
      <date day="24" month="12" year="2002"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no">
        Existing code which uses the JDK 1.3 method <code>File.toURL</code> should be
        examined, as it may be better to call <code>Utilities.toURL</code>.
        Similarly, code which gets the path from a URL and calls the <code>File</code>
        constructor may need to be changed to call <code>Utilities.toFile</code>.
        Such changes should improve robustness of code when used in strangely
        named directories.
      </compatibility>
      <description>
        Two new utility methods were added which permit easy interconversion between
        files and URLs using the <code>file</code> protocol. This task is easy and
        safe under JDK 1.4, yet JDK 1.3 lacks a single call to do these tasks which
        will handle unusual characters in file names, especially hash marks. The
        utility methods use the JDK 1.4 variants when possible, else use specially
        coded versions of the JDK 1.3 variants which handle hash marks.
      </description>
      <class package="org.openide.util" name="Utilities"/>
      <issue number="29711"/>
    </change>
<change>
        <api name="util"/>
        <summary>Added RequestProcessor.getDefault(), deprecated static methods in RequestProcessor</summary>
        <version major="2" minor="12"/>
        <date day="15" month="4" year="2002"/>
        <author login="pnejedly"/>
        <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
        <description>Sharing of singlethreaded
	    <code>RequestProcessor.DEFAULT</code>
	    through the static methods is inherently deadlock-prone,
	    so the methods are deprecated and their usage should phase out
	    in the favor of using private <code>RequestProcessor</code>s
	    or the shared multithreaded instance available through the new
	    static method <code>RequestProcessor.getDefault()</code>.
        </description>
        <class package="org.openide.util" name="RequestProcessor" link="no"/>
    </change>
<change>
      <api name="util"/>
      <summary>Added helper methods to aid module developers to write code which works correctly with multiple monitors</summary>
      <version major="2" minor="5"/>
      <date day="26" month="2" year="2002"/>
      <author login="ttran"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
      <description>
        The added methods are
        <pre xml:space="preserve">
<span class="keyword">public</span> <span class="keyword">static</span> <span class="type">Rectangle</span> <span class="function-name">getUsableScreenBounds</span>();
<span class="keyword">public</span> <span class="keyword">static</span> <span class="type">Rectangle</span> <span class="function-name">getUsableScreenBounds</span>(<span class="type">GraphicsConfiguration</span> <span class="variable-name">gconf</span>);
<span class="keyword">public</span> <span class="keyword">static</span> <span class="type">Rectangle</span> <span class="function-name">findCenterBounds</span>(<span class="type">Dimension</span> <span class="variable-name">componentSize</span>);
</pre>
        One should use these methods instead of calling
        <code>Toolkit.getScreenSize()</code>.  For the same reason
        <code>Utilities.getScreenSize()</code> is now deprecated.
      </description>
      <class package="org.openide.util" name="Utilities"/>
      <issue number="20882"/>
    </change>
<change id="ErrorManager.getDefault">
      <api name="util"/>
      <summary>Added accessibility method ErrorManager.getDefault () that always returns non-null values</summary>
      <version major="2" minor="1"/>
      <date day="17" month="1" year="2002"/>
      <author login="jtulach"/>
      <compatibility addition="yes" modification="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no"/>
      <description>
        <p>
          This method allows independent libraries (nodes, filesystems, utilities) to use the ErrorManager without 
          testing if it is really present. Just call <code>ErrorManager.getDefault ()</code> and you can be sure 
          that a valid instance will be returned.
        </p>
        <p>
          Also <code>TopManager.getErrorManager</code> is no longer useful (<a href="#ErrorManager.getDefault" shape="rect">see change</a>) and is now deprecated.
          It is also not abstract as it just delegates.
          <code>notifyException</code> is similarly deprecated.
        </p>
      </description>
      <class package="org.openide" name="ErrorManager"/>
      <issue number="16854"/>
  </change>
    <change id="logging-added-to-error-manager" >
      <api name="util"/>
      <summary>
<code>ErrorManager.isLoggable</code> added</summary>
      <date day="2" month="12" year="2000"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <code>isLoggable(int severity)</code> added to <code>ErrorManager</code>.
      </description>
      <class package="org.openide" name="ErrorManager"/>
    </change>
<change>
      <api name="util"/>
      <summary>Logging and hierarchy support added to <code>ErrorManager</code>
</summary>
      <date day="18" month="8" year="2000"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <code>getInstance(String name)</code>, <code>log(int severity, String s)</code>, and
        <code>log(String s)</code> added to <code>ErrorManager</code>.
      </description>
      <class package="org.openide" name="ErrorManager"/>
    </change>
    <change>
      <api name="xml"/>
      <summary>Can register entity resolvers</summary>
      <date day="20" month="12" year="2000"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no">
        Subsequently deprecated on <date day="3" month="3" year="2001"/> by
        <a href="#created-XMLUtil" shape="rect">
<code>EntityCatalog</code>
</a>.
      </compatibility>
      <description>
        <code>addEntityResolver</code> and <code>removeEntityResolver</code>
        added. These methods allow a user to develop own implementation of
        functionality similar to <code>registerCatalogEntry</code>. E.g. a user
        can register <code>EntityResolver</code> that reads data from persistent
        catalog avoiding bunch of calls to the register method in module
        <code>restore</code> code.
      </description>
      <class package="org.openide.xml" name="EntityCatalog" link="no"/>
    </change>
<change>
      <api name="xml"/>
      <summary>Updated DOM to level 2 and added document writability</summary>
      <date day="26" month="1" year="2001"/>
      <author login="pkuzel"/>
      <compatibility modification="yes" binary="incompatible" source="incompatible" deprecation="yes" semantic="compatible" addition="no" deletion="no">
        Any code implementing DOM interfaces could be broken by the level 2
        interfaces. Clients of the DOM API should be unaffected.
      </compatibility>
      <description>
        <ul>
          <li>All level 1 <code>Document</code>s interfaces became level 2 ones.</li>
          <li>Deprecated <code>write(Document, Writer)</code>
            <p>A conflict between encoding declared in document and
              actual Writer encoding can cause data loss. Suitable
              just for UTF-8 and UTF-16 writers.
            </p>
          </li>
          <li>introduced <code>write(Document, OutputStream, String encoding)</code>
            <p>
              The write method is supposed to be used as an implementation
              independent way for writing DOM documents until self-writable
              documents specification will be introduced. The self-writability
              is considered to be a part of DOM level 3 specs.
            </p>
            <p>
              Nowadays it is implemented that it can handle following DOM implementations:
            </p>
            <ul>
              <li>Crimson</li>
              <li>JAXP 1.0 reference implementation</li>
              <li>All others using Apache's serializers if available.</li>
            </ul>
          </li>
        </ul>
      </description>
      <class package="org.openide.xml" name="XMLUtil" link="no"/>
    </change>
<change id="Utilities.topologicalSort">
      <api name="util"/>
      <summary>Improved method for topological sort</summary>
      <version major="3" minor="30"/>
      <date day="10" month="1" year="2003"/>
      <author login="jglick"/>
      <compatibility deprecation="yes" addition="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
      <description>
        The method <code>Utilities.topologicalSort</code> was added. It should be
        faster and probably more robust than the older <code>partialSort</code>
        method, which required a <code>Comparator</code>; the new method requires
        a list of ordering constraints, which should be <i>O(n + m)</i>
        rather than <i>O(n<sup>2</sup>)</i> (where <i>n</i> is the number of
        nodes to sort and <i>m</i> the number of edges). If the graph is 
        not a DAG a <code>TopologicalSortException</code> is thrown containing
        description of unsortable parts of the graph and the best partitial sort
        that fullfils as much of ordering constraints as possible. These
        information can be used for error reporting and recovery.
      </description>
      <class package="org.openide.util" name="Utilities"/>
      <class package="org.openide.util" name="TopologicalSortException" link="no"/>
      <issue number="27286"/>
    </change>
<change>
      <api name="xml"/>
      <summary>Moved XML static methods into separate inner class</summary>
      <date day="16" month="2" year="2001"/>
      <author login="pkuzel"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no">
        <code>XMLDataObject.Util</code> itself deprecated on
        <date day="3" month="3" year="2001"/> in favor of
        <a href="#created-XMLUtil" shape="rect">
<code>XMLUtil</code>
</a>.
      </compatibility>
      <description>
        <ul>
          <li>
            Deprecated all static: <code>write()</code>s, <code>parse()</code>s,
            <code>createDocument()</code>, <code>createInputSource()</code> and
            <code>createParser()</code>s methods.
          </li>
          <li>
            Introduced public static inner class named <code>Util</code> providing
            utility methods replacing deprecated ones.
          </li>
        </ul>
      </description>
      <class package="org.openide.xml" name="XMLUtil" link="no"/>
    </change>
    <change id="Mutex.Privileged">
      <api name="util"/>
      <summary>Permit privileged access to mutexes to avoid inner classes</summary>
      <version major="1" minor="17"/>
      <date day="27" month="6" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added a new inner class and a constructor that takes an instance of that
        inner class as a parameter. The inner class is <code>Privileged</code>.
        Through its public methods one can enter internal states of the
        <code>Mutex</code> to which it was passed.
      </description>
      <class package="org.openide.util" name="Mutex" link="no"/>
    </change>
<change id="Task.notifyRunning">
      <api name="util"/>
      <summary>More flexibility in controlling running of tasks</summary>
      <version major="1" minor="5"/>
      <date day="27" month="4" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <code>Task</code> has new protected constructor for subclasses and
        methods <code>notifyRunning ()</code> and also non-final version of
        <code>waitFinished ()</code>.
      </description>
      <class package="org.openide.util" name="Task" link="no"/>
    </change>
    <change>
      <api name="util"/>
      <summary>
        <code>ErrorManager.isNotifiable</code> added</summary>
      <version major="3" minor="18"/>
      <date day="3" month="11" year="2002"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no">
        Existing code which assumes (incorrectly) that <code>isLoggable</code>
        can be used for this purpose, or which calls <code>notify</code> at a low
        level such as <code>INFORMATIONAL</code> without first checking
        <code>isNotifiable</code> for efficiency, should be revised.
      </compatibility>
      <description>
        The method <code>ErrorManager.isNotifiable</code> was added to capture
        the fact that an error manager implementation might be more aggressive
        about displaying stack traces than log messages.
      </description>
      <class package="org.openide" name="ErrorManager"/>
      <issue number="24056"/>
    </change>
    <change id="clone-service-type" >
      <api name="util"/>
      <summary>
        <code>ServiceType.createClone</code> added</summary>
      <date day="30" month="11" year="2000"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no">Subclasses are encouraged to implement <code>Cloneable</code>.</compatibility>
      <description>
        <code>public final ServiceType createClone()</code> added.
      </description>
      <class package="org.openide" name="ServiceType"/>
    </change>
<change>
      <api name="util"/>
      <summary>Icon &amp; image cache manager added</summary>
      <date day="9" month="3" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Loading icons and images can be done through
        <code>Utilities.loadImage()</code> that uses cache to avoid duplicate
        loading of images. <code>mergeImages</code> uses the cache, too, for the
        results of merge.
      </description>
      <class package="org.openide.util" name="Utilities"/>
    </change>
<change>
      <api name="util"/>
      <summary>Updated DEC -&gt; Compaq OS names</summary>
      <date day="15" month="12" year="2000"/>
      <compatibility modification="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no"/>
      <description>
        Operating system <code>OS_DEC</code> changed to <code>OS_TRU64</code>,
        and added <code>OS_VMS</code>.
      </description>
      <class package="org.openide.util" name="Utilities"/>
    </change>
<change>
      <api name="util"/>
      <summary>Proper break iterators used when wrapping text strings</summary>
      <date day="11" month="8" year="2000"/>
      <compatibility modification="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no">
        Deprecated version first removed, later re-added with deprecation in the
        trunk.
      </compatibility>
      <description>
        Added method <code>wrapString</code> which uses
        <code>BreakIterator</code> instead of a flag and a heuristic solution.
        <code>wrapString(String,int,boolean,boolean)</code> deprecated.
      </description>
      <class package="org.openide.util" name="Utilities"/>
    </change>
<change>
      <api name="util"/>
      <summary>Support for merging icons added</summary>
      <date day="25" month="1" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added method <code>mergeImages(Image image1, Image image2, int x, int
        y)</code> for merging images.
      </description>
      <class package="org.openide.util" name="Utilities"/>
    </change>
<change>
      <api name="util"/>
      <summary>Can get a list of localizing suffixes</summary>
      <date day="1" month="1" year="2001"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <code>getLocalizingSuffixes</code> added.
      </description>
      <class package="org.openide.util" name="NbBundle" link="no"/>
    </change>
<change>
      <api name="util"/>
      <summary>Can find localized variants of extensionless resources</summary>
      <date day="6" month="10" year="2000"/>
      <author login="jglick"/>
      <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
      <description>
        <code>getLocalizedFile</code> now accepts <code>null</code> extensions
        to suppress the addition of a dot to the resource name.
      </description>
      <class package="org.openide.util" name="NbBundle" link="no"/>
    </change>
<change>
      <api name="util"/>
      <summary>Added search for branded variants as part of locale lookup</summary>
      <date day="20" month="7" year="2000"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added methods <code>getBranding</code> and <code>setBranding</code>.
        Normally these should only be called by the core implementation during
        startup, not module authors. All methods to look up localized objects
        may now also search for branded variants, if applicable.
      </description>
      <class package="org.openide.util" name="NbBundle" link="no"/>
    </change>
<change>
      <api name="util"/>
      <summary>Classloader finder for <code>NbBundle</code> is obsolete</summary>
      <date day="11" month="4" year="2000"/>
      <compatibility deletion="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" modification="no">
        First removed, later re-added but deprecated in trunk and
        <code>boston</code>. No one outside of <code>NbBundle</code> and the
        core implementation should have been using these classes to begin with.
      </compatibility>
      <description>
        <code>NbBundle.ClassLoaderFinder</code> and
        <code>NbBundle.setClassLoaderFinder</code> have been deprecated; they
        were quite obsolete.
      </description>
      <class package="org.openide.util" name="NbBundle" link="no"/>
    </change>
<change>
      <api name="util"/>
      <summary>Special exception thrown to request interaction with user</summary>
      <date day="5" month="3" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added the first revision. This exception is thrown when a process is
        about to perform some action that requires user confirmation.
      </description>
      <class package="org.openide.util" name="UserQuestionException"/>
    </change>
<change>
      <api name="util"/>
      <summary>
<code>SafeException</code> is a <code>FoldingIOException</code>
</summary>
      <date day="9" month="3" year="2000"/>
      <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
      <description>
        Now extends <code>FoldingIOException</code>, meaning that it should
        delegate the detail message, etc. to the original.
      </description>
      <class package="org.openide.util.io" name="SafeException" link="no"/>
    </change>
    <change id="created-XMLUtil">
      <api name="xml"/>
      <summary>Independent XML API created</summary>
      <date day="3" month="3" year="2001"/>
      <author login="pkuzel"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
      <description>
        <code>XMLUtil</code> utility class introduced. The class provides set of
        static methods useful for XML processing. <code>EntityCatalog</code>
        class introduced. It provides access to entity mapping registrations
        provided by installed modules.
      </description>
      <class package="org.openide.xml" name="XMLUtil" link="no"/>
      <class package="org.openide.xml" name="EntityCatalog" link="no"/>
      <package name="org.openide.xml" link="no"/>
    </change>
    <change id="XMLUtil-1.29">
      <api name="xml"/>
      <summary>XML attribute and hexadecimal utilities added</summary>
      <version major="1" minor="29"/>
      <date day="8" month="8" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <code>toAttribute(String, char, boolean)</code>, <code>toContent(String,
        boolean)</code>, <code>toHex(byte[], int, int)</code> and
        <code>fromHex(char[], int, int)</code> methods added.
      </description>
      <class package="org.openide.xml" name="XMLUtil" link="no"/>
    </change>
    <change>
      <api name="xml"/>
      <summary>XML attribute and hexadecimal utilities modified</summary>
      <version major="1" minor="40"/>
      <date day="18" month="10" year="2001"/>
      <compatibility binary="incompatible" source="incompatible" modification="yes" semantic="compatible" deprecation="no" addition="no" deletion="no">
        The original versions of these methods were not in any public release.
      </compatibility>
      <description>
        <code>toAttribute(String, char, boolean)</code> method replaced by
        <code>toAttributeValue(String)</code>
        and
        <code>toContent(String, boolean)</code> method replaced by
        <code>toElementContent(String)</code>. These new simplified
        signatures and particular semantics should cover 99% usage of
        previous ones. See the original <a href="#XMLUtil-1.29" shape="rect">additions</a>.
      </description>
      <class package="org.openide.xml" name="XMLUtil" link="no"/>
      <issue number="16629"/>
    </change>
    <change id="refactored-methods-into-XMLUtil">
        <api name="xml"/>
        <summary>Refactored XML methods from various modules to be added
        to <code>XMLUtil</code>.  Seven new methods added.</summary>
        <version major="8" minor="4"/>
        <date day="7" month="4" year="2010"/>
        <author login="mvfranz"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Refactored XML related methods into XMLUtil.
            </p>
        </description>
        <class package="org.openide.xml" name="XMLUtil" link="no"/>
        <issue number="136595"/>
    </change>
</changes>
<htmlcontents>
<head>
<title>Change History for the 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>
