<?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="filesystems">Filesystems API</apidef>
    </apidefs>
    <changes>
        <change id="fileutil.copyattr.trasnform">
            <api name="filesystems"/>
            <summary>Allow to filter or transform attribute values during copying.</summary>
            <version major="9" minor="27"/>
            <date day="2" month="11" year="2021"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                <a href="@TOP@/org/openide/filesystems/FileUtil.html#">FileUtil.copyAttributes</a> support custom filtering or value transformations.
            </description>
            <class name="FileUtil" package="org.openide.filesystems"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Utility to check valid filenames</summary>
            <version major="9" minor="24"/>
            <date year="2021" month="5" day="28"/>
            <author login="sdedic"/>
            <compatibility addition="yes" source="compatible" semantic="compatible" binary="compatible"/>
            <description>
                <p>
                    An utility method <a href="@TOP@/org/openide/filesystems/FileUtil.html#isValidFileName-java.lang.String-">isValidFileName()</a> was added
                    to check for illegal characters that may vary on supported platforms/OSes.
                </p>
            </description>
        </change>
        <change id="getFileObjectNonExisting">
            <api name="filesystems"/>
            <summary>getFileObject can return non-existing files</summary>
            <version major="9" minor="23"/>
            <date year="2021" month="3" day="5"/>
            <author login="jtulach"/>
            <compatibility addition="yes" source="compatible" semantic="compatible" binary="compatible"/>
            <description>
                <p>
                    New method 
                    <a href="@TOP@/org/openide/filesystems/FileObject.html#getFileObject-java.lang.String-boolean-"><code>getFileObject(relativePath, false)</code></a>
                    in 
                    <a href="@TOP@/org/openide/filesystems/FileObject.html"><code>FileObject</code></a>
                    class to return a relative object even if it doesn't exist.
                </p>
            </description>
            <class name="FileObject" package="org.openide.filesystems"/>
        </change>
        <change id="LayerProcessorSupportedSource">
            <api name="filesystems"/>
            <summary>Declare support for all source levels.</summary>
            <version major="9" minor="17"/>
            <date year="2019" month="10" day="18"/>
            <author login="sdedic"/>
            <compatibility addition="yes" source="compatible" semantic="incompatible" binary="compatible"/>
            <description>
                <p>
                    <a href="@TOP@/org/openide/filesystems/annotations/LayerGeneratingProcessor.html"><code>LayerGeneratingProcessor</code></a> subclasses declare some
                    <a href="@JDK@/javax/lang/model/SourceVersion.html"><code>SourceVersion</code></a> support,
                    but as new JDKs are released, the declaration becomes obsolete and produces spurious warnings. The processors
                    are typically not affected by newer Java language features.
                </p>
                <p>
                    This change changes the default behaviour if NO 
                    <a href="@JDK@/javax/annotation/processing/SupportedSourceVersion.html"><code>@SupportedSourceVersion</code></a>
                    annotation is present on subclass. From 8.40, the Processor will report 
                    <a href="@JDK@/javax/lang/model/SourceVersion.html#latest--"><code>@SourceVersion.latest()</code></a>.
                </p>
            </description>
            <class name="LayerGeneratingProcessor" package="org.openide.filesystems.annotations"/>
            <issue number="NETBEANS-3250"/>
        </change>
        <change id="ArchiveRootProvider">
            <api name="filesystems"/>
            <summary>Pluggable archive files support for FileUtil</summary>
            <version major="9" minor="10"/>
            <date year="2015" month="5" day="28"/>
            <author login="tzezula"/>
            <compatibility addition="yes" semantic="compatible" binary="compatible"/>
            <description>
                To support JDK 9 image file as an archive the FileUtil's method
                <code>getArchiveFile</code>,<code>getArchiveRoot</code> and <code>isArchiveFile</code>
                are pluggable using a new SPI <code>ArchiveFileProvider</code>.
                In addition to these methods a new method <code>isArchiveArtifact</code> was added.
                This method can be used if given <code>URL</code> points into an archive.
            </description>
            <class name="FileUtil" package="org.openide.filesystems"/>
            <class name="ArchiveRootProvider" package="org.openide.filesystems.spi"/>
            
        </change>
        <change id="repository.multiuser">
            <api name="filesystems"/>
            <summary>Support for multi-user environments</summary>
            <version major="9" minor="5"/>
            <date year="2015" month="2" day="25"/>
            <author login="sdedic"/>
            <compatibility addition="yes" modification="yes" semantic="compatible" binary="compatible"/>
            <description>
                To support multiple configurations (users, profiles, ...) executing in the same VM, multiple
                Repositories can be created, one for each execution context. API has been added to acquire 
                and SPI to create a local Repository which holds config filesystem for the execution thraed.
            </description>
            <class name="Repository" package="org.openide.filesystems"/>
        </change>
        <change id="FileObject.symbolicLinks">
            <api name="filesystems"/>
            <summary>Support detection and reading of symbolic links.</summary>
            <version major="9" minor="4"/>
            <date year="2014" month="11" day="27"/>
            <author login="jhavlin"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Add methods to <code>FileObject</code> for handling of
                    symbolic links:
                </p>
                <ul>
                    <li><code>isSymbolicLink()</code></li>
                    <li><code>readSymbolicLink()</code></li>
                    <li><code>readSymbolicLinkPath()</code></li>
                    <li><code>getCanonicalFileObject()</code></li>
                </ul>
                <p>
                    Add utility method to <code>FileUtil</code> for dealing with
                    recursive symbolic links.
                </p>
                <ul>
                    <li><code>isRecursiveSymbolicLink()</code></li>
                </ul>
                <p>
                    Introduce new interface <a href="@TOP@org/openide/filesystems/AbstractFileSystem.SymlinkInfo.html">AbstractFileSystem.SymlinkInfo</a>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>
            <issue number="237882"/>
        </change>
        <change id="FileLock.closeable">
            <api name="filesystems"/>
            <summary>FileLock implements AutoCloseable</summary>
            <version major="9" minor="3"/>
            <date year="2014" month="11" day="10"/>
            <author login="sdedic"/>
            <compatibility addition="yes" deletion="no" deprecation="no" source="compatible" binary="compatible"/>
            <description>
                <p>
                    <a href="@TOP@org/openide/filesystems/FileLock.html">FileLock</a>
                    implements AutoCloseable to work well in try-with-resources constructs.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileLock"/>
            <issue number="247915"/>
        </change>
        <change id="FileSystemStatus.icons2">
            <api name="filesystems"/>
            <summary>FileSystem.Status API removed</summary>
            <version major="9" minor="1"/>
            <date year="2014" month="10" day="3"/>
            <author login="sdedic"/>
            <compatibility modification="yes" deletion="yes" addition="yes" binary="compatible" source="compatible" semantic="incompatible"/>
            <description>
                <p>
                    The FileSystem.Status was entirely removed, as it references class java.awt.Image, which 
                    is not available in compact jdk profiles and may trigger GUI system initialization. See
                    javadocs of <a href="@TOP@org/openide/filesystems/StatusDecorator.html">StatusDecorator</a>
                    for details.
                </p>
            </description>
            <class package="org.openide.filesystems" name="StatusDecorator"/>
            <issue number="247200"/>
        </change>
        <change id="FileSystemStatus.icons">
            <api name="filesystems"/>
            <summary>FileSystem.Status icon annotation moved</summary>
            <version major="9" minor="0"/>
            <date year="2014" month="4" day="11"/>
            <author login="sdedic"/>
            <compatibility modification="yes" addition="yes" binary="compatible" source="compatible" semantic="incompatible"/>
            <description>
                <p>
                    The default implementation of FileSystem.Status annotated file's icon using ImageUtilities
                    which uses AWT graphics etc. Such dependency is not desirable in a standalone FileSystem API
                    library.
                </p>
                <p>
                    The builtin implementation now does not work with the icon at all and returns null. A proper
                    implementation for FileSystem.Status is looked up in default Lookup and is implemented
                    properly (with Icon annotations) in <code>openide.filesystems.nb</code> module.
                </p>
            </description>
            <issue number="243561"/>
        </change>
        <change id="getActionsDeprecated">
            <api name="filesystems"/>
            <summary>Deprecating FileSystem.getActions</summary>
            <version major="8" minor="12"/>
            <date year="2014" month="5" day="14"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Deprecating <code>getActions</code> method in preparation
                    of splitting filesystems API into UI (e.g. depending
                    on Swing) and non-UI part (that can run on JDK8 compact
                    profile). Introducing general replacement 
                    <a href="@TOP@org/openide/filesystems/FileSystem.html#findExtrasFor-java.util.Set-">findExtrasFor</a>
                    instead...
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileSystem"/>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>
            <class package="org.openide.filesystems" name="MultiFileSystem"/>
            <issue number="243265"/>
        </change>
        <change id="MultiFileObject.revealEntriesAttribute">
            <api name="filesystems"/>
            <summary>Allowed to reveal deleted files, or original files overriden by writable layer</summary>
            <version major="8" minor="5"/>
            <date year="2012" month="11" day="23"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Files which have been deleted can be obtained by <code>folder.getAttribute("revealEntries")</code>.
                    See <a href="@TOP@org/openide/filesystems/MultiFileSystem.html">MultiFileSystem
                    </a> javadoc for details
                </p>
                <p>
                    <b>Warning:</b> stability of this feature is <b>development</b>
                </p>
            </description>
            <!--<class package="org.openide.filesystems" name="MultiFileObject"/>-->
        </change>
        <change id="FileChooserBuilder-setAcceptAllFileFilterUsed">
            <api name="filesystems"/>
            <summary>New method FileChooserBuilder.setAcceptAllFileFilterUsed.</summary>
            <version major="8" minor="3"/>
            <date year="2012" month="10" day="30"/>
            <author login="tmysik"/>
            <compatibility addition="yes" deprecation="no"/>
            <description>
                <p>
                    Added <a href="@org-openide-filesystems-nb@/org/openide/filesystems/FileChooserBuilder.html#setAcceptAllFileFilterUsed-boolean-">
                    new method</a> to <code>FileChooserBuilder</code> that determines whether the <code>AcceptAll FileFilter</code>
                    should be used in the created file chooser.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileChooserBuilder" link="no"/>
            <issue number="220401"/>
        </change>
        <change id="FileChooserBuilder-addDefaultFileFilters">
            <api name="filesystems"/>
            <summary>New method FileChooserBuilder.addDefaultFileFilters and accompanying annotations.</summary>
            <version major="8" minor="1"/>
            <date year="2012" month="8" day="29"/>
            <author login="jhavlin"/>
            <compatibility addition="yes" deprecation="no"/>
            <description>
                <p>
                    Added <a href="@org-openide-filesystems-nb@/org/openide/filesystems/FileChooserBuilder.html#addDefaultFileFilters--">
                    new method</a> to <code>FileChooserBuilder</code> that adds all default
                    <code>FileFilter</code>s to created file chooser.
                </p>
                <p>
                    Default filters are registered using new parameters in annotations
                    <a href="@TOP@org/openide/filesystems/MIMEResolver.Registration.html#showInFileChooser--">MimeResolver.Registration</a>
                    and <a href="@TOP@org/openide/filesystems/MIMEResolver.ExtensionRegistration.html#showInFileChooser--">MimeResolver.ExtensionRegistration</a>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileChooserBuilder" link="no"/>
            <class package="org.openide.filesystems" name="MIMEResolver"/>
            <issue number="209998"/>
        </change>
        <change id="fileobject-lookup">
            <api name="filesystems"/>
            <summary>FileObject has getLookup()</summary>
            <version major="8" minor="0"/>
            <date year="2012" month="8" day="22"/>
            <author login="jtulach"/>
            <compatibility addition="yes" deprecation="no"/>
            <description>
                <p>
                    <code>FileObject</code> now implements <code>Lookup.Provider</code>
                    and thus has new
                    <a href="@TOP@org/openide/filesystems/FileObject.html#getLookup--">
                    getLookup</a>() method.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="209231"/>
        </change>
        <change id="recursive-listener-with-filter">
            <api name="filesystems"/>
            <summary>addRecursiveListener with a filter</summary>
            <version major="7" minor="61"/>
            <date year="2012" month="4" day="11"/>
            <author login="jtulach"/>
            <compatibility addition="yes" deprecation="no"/>
            <description>
                <p>
                    Added <a href="@TOP@org/openide/filesystems/FileUtil.html#addRecursiveListener-org.openide.filesystems.FileChangeListener-java.io.File-java.io.FileFilter-java.util.concurrent.Callable-">
                    new method</a> variant to register recursive listener
                    and control whether to recurse into a subtree or not via
                    <code>FileFilter</code>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="207189"/>
        </change>
        <change id="FileSystem.createTemporaryFO">
            <api name="filesystems"/>
            <summary>File System can create temporary file</summary>
            <version major="7" minor="60"/>
            <date year="2012" month="2" day="20"/>
            <author login="alexvsimon"/>
            <compatibility addition="yes" deprecation="no"/>
            <description>
                <p>
                    Added methods to create temporary file objects:
                    <code>FileSystem.getTempFolder</code>,  <code>FileSystem.createTempFile</code>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileSystem"/>
            <issue number="207659"/>
        </change>
        <change id="LayersProvider">
            <api name="filesystems"/>
            <summary>SPI for Additions to System File System</summary>
            <version major="7" minor="59"/>
            <date year="2012" month="2" day="3"/>
            <author login="jtulach"/>
            <compatibility addition="yes" deprecation="yes"/>
            <description>
                <p>
                    Those who wish to influence content of 
                    <a href="@TOP@/org/openide/filesystems/FileUtil.html#getConfigRoot--">
                    configuration file system</a> have an easier
                    <a href="@TOP@/org/openide/filesystems/Repository.LayerProvider.html">
                    way</a> now.
                </p>
            </description>
            <class package="org.openide.filesystems" name="Repository"/>
            <issue number="198508"/>
        </change>
        <change id="MIMEResolver.Registrations">
            <api name="filesystems"/>
            <summary>Annotations to declare MIME type</summary>
            <version major="7" minor="58"/>
            <date year="2012" month="2" day="2"/>
            <author login="jtulach"/>
            <compatibility addition="yes" deprecation="yes"/>
            <description>
                <p>
                    There are new annotations to register mime type. One
                    can either use simpler ones based on
                    <a href="@TOP@/org/openide/filesystems/MIMEResolver.ExtensionRegistration.html">
                    extension</a> or    
                    <a href="@TOP@/org/openide/filesystems/MIMEResolver.NamespaceRegistration.html">
                    XML namespace</a>. In case these registration are not
                    powerful enough one can use the original and flexible 
                    <a href="@TOP@/org/openide/filesystems/MIMEResolver.Registration.html">
                    XML file based registration</a> which is however processed
                    during compile time to avoid needless XML parsing on each
                    start.
                </p>
            </description>
            <class package="org.openide.filesystems" name="MIMEResolver"/>
            <issue number="191777"/>
        </change>
        <change id="FileObject.toURI">
            <api name="filesystems"/>
            <summary>Introduced <code>FileObject.toURI</code></summary>
            <version major="7" minor="57"/>
            <date year="2012" month="1" day="20"/>
            <author login="jglick"/>
            <compatibility addition="yes" deprecation="yes">
                <p>
                    <code>FileObject.getURL</code> should be replaced with <code>toURL</code> (or <code>toURI</code>),
                    which also throw no checked exceptions.
                </p>
            </compatibility>
            <description>
                <p>
                    Added <code>FileObject.toURI</code> for convenience.
                </p>
                <p>
                    Also deprecated <code>FileObject.getURL</code> in favor of <code>toURL</code>
                    which is the same but does not throw <code>FileStateInvalidException</code>,
                    and clarified that <code>URLMapper.findURL(fo, INTERNAL)</code>
                    will never return null.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="207294"/>
        </change>
         <change id="default-line-separator">
            <api name="filesystems"/>
            <summary>Provides default line separator</summary>
            <version major="7" minor="56"/>
            <date day="13" month="1" year="2012"/>
            <author login="alexvsimon"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    FileObject.DEFAULT_LINE_SEPARATOR_ATTR defines file object attribute name to get default line separator.
                    File object can provide default line separator if it differs from
                    <code>System.getProperty("line.separator")</code>. Call
                    <code>fo.getAttribute(FileObject.DEFAULT_LINE_SEPARATOR_ATTR)</code> returns string with
                    default line separator. Default line separator will be used by the text
                    editor if saving new content to an initially empty file. Any other code
                    which creates file content programmatically must manually read this
                    property if it cares.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="199534"/>
        </change>
        <change id="FileObject.revert">
            <api name="filesystems"/>
            <summary>Introduced <code>FileObject.revert</code></summary>
            <version major="7" minor="55"/>
            <date year="2011" month="11" day="29"/>
            <author login="jglick"/>
            <compatibility addition="yes">
                <p>
                    The previous SPI has been kept. Only a more convenient API has been introduced,
                    so it is no longer necessary for callers to look for a <code>removeWritables</code> attribute.
                </p>
            </compatibility>
            <description>
                <p>
                    Added <code>revert</code> and <code>canRevert</code> to <code>FileObject</code>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="162526"/>
        </change>
        <change id="FileEvent.4.constructor">
            <api name="filesystems"/>
            <summary>Detailed FileEvent constructor</summary>
            <version major="7" minor="54"/>
            <date day="22" month="11" year="2011"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>New <code>FileEvent</code> constructor allowing specification
                of expected state as well as time.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileEvent"/>
            <issue number="203477"/>
        </change>
        <change id="FileObject.getMIMEType...">
            <api name="filesystems"/>
            <summary>FileObject.getMIMEType(String... withinMIMETypes)</summary>
            <version major="7" minor="52"/>
            <date day="5" month="8" year="2011"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Introducing <a href="@TOP@/org/openide/filesystems/FileObject.html#getMIMEType-java.lang.String...-">
                    FileObject.getMIMEType(String...)    
                    </a> that can be overriden by different implementations
                    of file system API.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="199642"/>
        </change>
        <change id="validateResource_196452">
            <api name="filesystems"/>
            <summary><code>LayerBuilder</code> can validate resources</summary>
            <version major="7" minor="51"/>
            <date day="25" month="7" year="2011"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code>LayerBuilder</code> has a new <code>validateResource</code> method.
                    <code>absolutizeResource</code> was also added.
                </p>
            </description>
            <class package="org.openide.filesystems.annotations" name="LayerBuilder"/>
            <issue number="196452"/>
        </change>
        <change id="LayerGenerationException_194545">
            <api name="filesystems"/>
            <summary><code>LayerGenerationException</code> has new constructors</summary>
            <version major="7" minor="50"/>
            <date day="25" month="7" year="2011"/>
            <author login="jglick"/>
            <compatibility addition="yes">
                <p>
                    Code using the constructors not specifying an annotation should now do so.
                </p>
            </compatibility>
            <description>
                <p>
                    <code>LayerGenerationException</code> has new constructors making it easier to specify
                    the particular annotation responsible for a problem.
                    Some methods in <code>LayerBuilder</code> have new overloads to take advantage of it.
                </p>
            </description>
            <class package="org.openide.filesystems.annotations" name="LayerGenerationException"/>
            <class package="org.openide.filesystems.annotations" name="LayerBuilder"/>
            <issue number="194545"/>
        </change>
        <change id="getConfigObject">
            <api name="filesystems"/>
            <summary>FileUtil.getConfigObject</summary>
            <version major="7" minor="49"/>
            <date day="25" month="6" year="2011"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    One can convert files in SystemFileSystem to Object with
                    a
                    <a href="@TOP@org/openide/filesystems/FileUtil.html#getConfigObject-java.lang.String-java.lang.Class-">
                    single utility method</a>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="169338"/>
        </change>
        <change id="to.parent">
            <api name="filesystems"/>
            <summary>FileObject.getFileObject accepts ".."</summary>
            <version major="7" minor="45"/>
            <date day="27" month="1" year="2011"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Semantic of 
                    <a href="@TOP@/org/openide/filesystems/FileObject.html#getFileObject-java.lang.String-">
                    getFileObject
                    </a> method has been clarified to accept "..".
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="194418"/>
        </change>
        <change id="attribute.methodvalue">
            <api name="filesystems"/>
            <summary>setAttribute("methodvalue:attrname", method) and "newvalue:"</summary>
            <version major="7" minor="43"/>
            <date day="24" month="11" year="2010"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    You can use prefix <code>"methodvalue:"</code> to
                    <a href="@TOP@/org/openide/filesystems/FileObject.html#setAttribute-java.lang.String-java.lang.Object-">
                    setAttribute    
                    </a>
                    with type of <a href="@JDK@/java/lang/reflect/Method.html">Method</a>.
                    When the attribute is queried (without the prefix), the
                    method is called as is common in
                    <a href="@TOP@/org/openide/filesystems/XMLFileSystem.html">XMLFileSystem</a>
                    attributes. You can also use <code>newvalue:</code> prefix
                    for attribute of type 
                    <a href="@JDK@/java/lang/Class.html">Class</a>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="120724"/>
        </change>
        <change id="private-constructor">
            <api name="filesystems"/>
            <summary>XMLFileSystem's newvalue can create private instances</summary>
            <version major="7" minor="43"/>
            <date day="25" month="10" year="2010"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                If the class referenced from <code>newvalue</code> 
                <a href="@TOP@/org/openide/filesystems/XMLFileSystem.html">XMLFileSystem</a>
                attribute is not public, it is made accessible for reflection.
                </p>
            </description>
            <class package="org.openide.filesystems" name="XMLFileSystem"/>
            <issue number="141698"/>
        </change>
        <change id="createAndOpen">
            <api name="filesystems"/>
            <summary>FileObject.createAndOpen</summary>
            <version major="7" minor="41"/>
            <date day="10" month="9" year="2010"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                Create a file and write its content (almost) atomically using the new
                <a href="@TOP@/org/openide/filesystems/FileObject.html#createAndOpen-java.lang.String-">FileObject.createAndOpen</a>
                method.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="40739"/>
        </change>
        <change id="addRecursiveListenerStop">
            <api name="filesystems"/>
            <summary>Interruptable addRecursiveListener</summary>
            <version major="7" minor="37"/>
            <date day="17" month="2" year="2010"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    New variant of <code>addRecursiveListener</code> method
                    that allows the caller to control the process enumerating
                    files in subtree and stop it.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="180523"/>
        </change>
        <change id="MultiFileSystem.weight">
            <api name="filesystems"/>
            <summary>Ability to specify "weight" for <code>MultiFileSystem</code> overrides</summary>
            <version major="7" minor="36"/>
            <date day="1" month="3" year="2010"/>
            <author login="jglick"/>
            <compatibility semantic="compatible">
                <p>
                    Modules need no longer declare runtime-only dependencies
                    on other modules merely to override their layer entries.
                    Instead, they should specify a higher weight.
                    (Normally the base module will declare no weight, so any
                    positive number will do.)
                </p>
            </compatibility>
            <description>
                <p>
                    <code>MultiFileSystem</code>s will now interpret a special
                    file attribute <code>weight</code> to determine how to
                    resolve otherwise ambiguous overrides. For example, in the
                    system filesystem, module XML layers can use this attribute.
                    Suppose a generic infrastructure module declares:
                </p>
                <pre>
&lt;filesystem>
    &lt;folder name="my-snippets">
        &lt;file name="common.xml" url="generic-snippet.xml"/>
    &lt;/folder>
&lt;/filesystem>
                </pre>
                <p>
                    If another module wishes to override this declaration, it
                    can do so by specifying:
                </p>
                <pre>
&lt;filesystem>
    &lt;folder name="my-snippets">
        &lt;file name="common.xml" url="special-snippet.xml">
            &lt;attr name="weight" intvalue="100"/>
        &lt;/file>
    &lt;/folder>
&lt;/filesystem>
                </pre>
                <p>
                    This override will work even if the module system happens
                    to load the specializing module <em>before</em> the infrastructure
                    module (as could happen if there is no module dependency
                    between them). The weight attribute also makes it clear that
                    something is being overridden.
                </p>
            </description>
            <class package="org.openide.filesystems" name="MultiFileSystem"/>
            <issue number="141925"/>
        </change>
           <change id="JarFileSystem-constructor-file">
              <api name="filesystems"/>
              <summary>Effective constructor for JarFileSystem</summary>
              <version major="7" minor="35"/>
              <date day="26" month="1" year="2010"/>
              <author login="jtulach"/>
              <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
              <description>
                  <p>
                      New constructor for <code>JarFileSystem</code>
                      that initializes everything without opening the underlaying
                      JAR file.
                  </p>
              </description>
              <class package="org.openide.filesystems" name="JarFileSystem"/>
              <issue number="177461"/>
          </change>
        <change id="MIMEResolverImpl">
            <api name="filesystems"/>
            <summary>Access methods added to <code>MIMEResolver.UIHelpers</code></summary>
            <version major="7" minor="34"/>
            <date day="8" month="1" year="2010"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Several internal methods were added to nested class
                    of <code>MIMEResolver</code> - <code>UIHelpers</code>
                    for use from other parts of the NetBeans Platform. Use from
                    other modules is not supported.
                </p>
            </description>
            <class package="org.openide.filesystems" name="MIMEResolver"/>
            <issue number="179289"/>
        </change>
          <change id="recursive-listener">
             <api name="filesystems"/>
             <summary>Support for recursive listeners</summary>
             <version major="7" minor="28"/>
             <date day="18" month="9" year="2009"/>
             <author login="jtulach"/>
             <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
             <description>
                 <p>
                     One can register a recursive listener on a file object by
                     calling
                     <a href="@TOP@/org/openide/filesystems/FileObject.html#addRecursiveListener-org.openide.filesystems.FileChangeListener-">FileObject.addRecursiveListener(FileChangeListener)</a>.
                 </p>
             </description>
             <class package="org.openide.filesystems" name="FileObject"/>
             <class package="org.openide.filesystems" name="FileUtil"/>
             <issue number="170862"/>
         </change>
        <change id="LayerBuilder.instanceFile">
            <api name="filesystems"/>
            <summary>Non-initializing <code>LayerBuilder.instanceFile</code> added</summary>
            <version major="7" minor="27"/>
            <date day="14" month="9" year="2009"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    New overload of <code>instanceFile</code> makes it easier to create
                    instances for use with lazy factories.
                </p>
            </description>
            <class package="org.openide.filesystems.annotations" name="LayerBuilder"/>
            <issue number="171284"/>
        </change>
        <change id="LayerBuilder.folder">
            <api name="filesystems"/>
            <summary><code>LayerBuilder.folder</code> added</summary>
            <version major="7" minor="26"/>
            <date day="10" month="9" year="2009"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Now possible to create empty folders from layer-generating processors.
                </p>
            </description>
            <class package="org.openide.filesystems.annotations" name="LayerBuilder"/>
            <issue number="171029"/>
        </change>
        <change id="Repository.defaultFileSystem.status">
            <api name="filesystems"/>
            <summary>System filesystem label/icon annotations work without full module system</summary>
            <version major="7" minor="25"/>
            <date day="31" month="8" year="2009"/>
            <author login="jglick"/>
            <compatibility modification="yes">
                <p>
                    An application or unit test installing a custom system filesystem
                    and <em>not</em> overriding <code>getStatus</code> but <em>expecting</em>
                    the default implementation to do nothing could be broken.
                </p>
            </compatibility>
            <description>
                <p>
                    For convenience from unit tests, the system filesystem will now always
                    process annotations such as <code>displayName</code> in its <code>FileSystem.Status</code>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileSystem"/>
            <issue number="171092"/>
        </change>
         <change id="runWhenDeliveryOver">
            <api name="filesystems"/>
            <summary>Support for processing batch events</summary>
            <version major="7" minor="24"/>
            <date day="25" month="8" year="2009"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    <a href="org/openide/filesystems/FileEvent.html#runWhenDeliveryOver-java.lang.Runnable-">
                    FileEvent.runWhenDeliveryOver(Runnable)</a> method added to support
                    easier processing of <em>batch</em> sets of events.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileEvent"/>
            <issue number="170544"/>
        </change>
         <change id="add-fallback-content-to-sfs">
            <api name="filesystems"/>
            <summary>Allow modules to provide fallback layer content</summary>
            <version major="7" minor="23"/>
            <date day="12" month="8" year="2009"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    One can provide <q>fallback</q>
                    <a href="@TOP@/architecture-summary.html#answer-arch-usecases">content of system filesystem</a> by
                    returning <code>Boolean.TRUE</code> from call
                    to <code>fs.getRoot().getAttribute("fallback")</code>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="Repository"/>
            <issue number="169892"/>
        </change>
       <change id="FileObject.asText">
            <api name="filesystems"/>
            <summary>Read files with asText(), asBytes() and asLines()</summary>
            <version major="7" minor="21"/>
            <date day="3" month="2" year="2009"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added <a href="@TOP@/org/openide/filesystems/FileObject.html#asBytes--">
                    asBytes()</a>,
                    <a href="@TOP@/org/openide/filesystems/FileObject.html#asText-java.lang.String-">
                    asText(encoding)</a>,
                    and <a href="@TOP@/org/openide/filesystems/FileObject.html#asLines-java.lang.String-">
                    asLines(encoding)</a> methods into
                    <a href="@TOP@/org/openide/filesystems/FileObject.html">FileObject</a>
                    to simplify reading of its content.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
        </change>
        <change id="FileUtil.addFileChangeListener2">
            <api name="filesystems"/>
            <summary>Possibility to add FileChangeListeners on File (even not existing)</summary>
            <version major="7" minor="20"/>
            <date day="14" month="1" year="2009"/>
            <author login="jskrivanek"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added <a href="@TOP@/org/openide/filesystems/FileUtil.html#addFileChangeListener-org.openide.filesystems.FileChangeListener-java.io.File-">
                    FileUtil.addFileChangeListener(FileChangeListener listener, File path)</a>
                    and <a href="@TOP@/org/openide/filesystems/FileUtil.html#removeFileChangeListener-org.openide.filesystems.FileChangeListener-java.io.File-">
                    FileUtil.addFileChangeListener(FileChangeListener listener, File path)</a>.
                    It permits you to listen to a file which does not yet exist,
                    or continue listening to it after it is deleted and recreated, etc.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="33162"/>
        </change>
        <change id="FileUtil.getConfigFile">
            <api name="filesystems"/>
            <summary>Added FileUtil.getConfigFile and getConfigRoot for simpler access to default filesystem</summary>
            <version major="7" minor="19"/>
            <date day="12" month="1" year="2009"/>
            <author login="jskrivanek"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Rather than having to call
                    <code>Repository.getDefault().getDefaultFileSystem().getRoot().getFileObject(&quot;foo/bar&quot;)</code>,
                    you can simply call
                    <a href="@TOP@/org/openide/filesystems/FileUtil.html#getConfigFile-java.lang.String-">FileUtil.getConfigFile(&quot;foo/bar&quot;)</a>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="91534"/>
        </change>
        <change id="FileUtil.setMIMEType">
            <api name="filesystems"/>
            <summary>Persisted registration of file extension to MIME type</summary>
            <version major="7" minor="18"/>
            <date day="19" month="12" year="2008"/>
            <author login="jskrivanek"/>
            <compatibility addition="yes" modification="yes"/>
            <description>
                <p>
                    Method <a href="@TOP@/org/openide/filesystems/FileUtil.html#setMIMEType-java.lang.String-java.lang.String-">
                    FileUtil.setMIMEType(String extension, String mimeType)</a>
                    resurrected to register file extension for specified MIME type.
                    It is persisted in userdir contrary to previous implementation.
                    Added method <a href="@TOP@/org/openide/filesystems/FileUtil.html#getMIMETypeExtensions-java.lang.String-">
                    FileUtil.getMIMETypeExtensions(String mimeType)</a>
                    to get list of file extensions associated with specified MIME type.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="153202"/>
        </change>
        <change id="FileChooserBuilder">
            <api name="filesystems"/>
            <summary>FileChooserBuilder added</summary>
            <version major="7" minor="17"/>
            <date day="1" month="12" year="2008"/>
            <author login="tboudreau"/>
            <compatibility addition="yes">
                <p>
                    Added org.openide.filesystems.FileChooserBuilder to API.
                </p>
            </compatibility>
            <description>
                <p>
                    Added FileChooserBuilder, a utility class for working with
                    JFileChoosers.  In particular, FileChooserBuilder makes it
                    easy to create file chooser dialogs which remember what
                    directory the user last invoked them on, across sessions.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileChooserBuilder" link="no"/>
            <issue number="47737"/>
        </change>
        <change id="DeclarativeMIMEResolvers">
            <api name="filesystems"/>
            <summary>Added new elements to MIME resolver DTD</summary>
            <version major="7" minor="16"/>
            <date day="18" month="11" year="2008"/>
            <author login="jskrivanek"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    It is now possible to write declarive MIME resolvers checking
                    file names (element name) and file content (element pattern).
                </p>
            </description>
            <issue number="142760"/>
        </change>
        <change id="LayerGeneratingProcessor">
            <api name="filesystems"/>
            <summary>Support for annotation processors generating XML layer fragments</summary>
            <version major="7" minor="15"/>
            <date day="1" month="11" year="2008"/>
            <author login="jglick"/>
            <compatibility addition="yes">
                <p>
                    Any code which scans modules for XML layers should now interpret not only
                    the <code>OpenIDE-Module-Layer</code> manifest attribute (if present),
                    but also use the resource <code>META-INF/generated-layer.xml</code> if present.
                </p>
            </compatibility>
            <description>
                <p>
                    It is now possible to write JSR 269-compliant annotation processors
                    which create XML layer (i.e. system filesystem) entries.
                </p>
            </description>
            <class package="org.openide.filesystems.annotations" name="LayerGeneratingProcessor"/>
            <class package="org.openide.filesystems.annotations" name="LayerBuilder"/>
            <class package="org.openide.filesystems.annotations" name="LayerGenerationException"/>
            <issue number="149136"/>
        </change>
        <change id="FileUtil.getMIMEType.withinMIMETypes">
            <api name="filesystems"/>
            <summary>FileUtil.getMIMEType() can be restricted by listed MIME types</summary>
            <version major="7" minor="13"/>
            <date day="3" month="9" year="2008"/>
            <author login="jskrivanek"/>
            <compatibility addition="yes">
                <p>
                    If you have a <code>MIMEResolver</code> subclass, be sure to use the new super constructor.
                </p>
            </compatibility>
            <description>
                <p>
                    To speed up MIME type recognition it is added an extra parameter
                    to method <a href="@TOP@/org/openide/filesystems/FileUtil.html#getMIMEType-org.openide.filesystems.FileObject-java.lang.String...-">FileUtil.getMIMEType(FileObject, String...)</a>.
                    We can supply one or more MIME types which we are only interested in.
                    Module writers have to override
                    <a href="@TOP@/org/openide/filesystems/MIMEResolver.html">MIMEResolver</a>
                    default constructor and call <code>super(String...)</code>, e.g.:
                </p>
                <pre>
                    public MyResolver() {
                        super("text/plain", "text/sh");
                    }
                </pre>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <class package="org.openide.filesystems" name="MIMEResolver"/>
            <issue number="137734"/>
        </change>
        <change id="getAttribute.class">
            <api name="filesystems"/>
            <summary>XMLFileSystem attributes can be queried for instance class</summary>
            <version major="7" minor="12"/>
            <date day="25" month="8" year="2008"/>
            <author login="jskrivanek"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    If you are interested just in the Class of an attribute, but
                    without creating its instance, use <code>fileObject.getAttribute("class:attrName")</code>.
                    This instructs the <a href="@TOP@/org/openide/filesystems/XMLFileSystem.html">XMLFileSystem</a>
                    to scan its XML files for definition of <code>attrName</code>
                    attribute and <i>guess</i> its class. The <i>guessing</i> is
                    usually easy, just for <code>methodvalue</code> types, the system
                    needs to use some kind of heuristic: it locates the
                    appropriate factory method and returns its return type. This may
                    not be the actual type of the returned object at the end, but
                    it seems as the best guess without instantiating it.
                </p>
            </description>
            <class package="org.openide.filesystems" name="XMLFileSystem"/>
            <issue number="131951"/>
        </change>
        <change id="testable-declarative-resolvers">
            <api name="filesystems"/>
            <summary>Declarative MIME resolvers now available in standalone mode</summary>
            <version major="7" minor="11"/>
            <date day="10" month="7" year="2008"/>
            <author login="jglick"/>
            <compatibility semantic="incompatible">
                <ul>
                    <li>
                        <p>
                            The old impl would have interpreted a resolver (with the correct doctype) in any location beneath <code>Services</code>. (Actually
                            a resolver would offer an <code>InstanceCookie&lt;MIMEResolver&gt;</code> in any location, but outside <code>Services</code> they would not have been
                            used in MIME resolution.) The new impl expects resolvers to be <code>Services/MIMEResolver/*.xml</code>, as in practice they always
                            are, and does not bother to verify that the public ID is set to the expected value in the doctype.
                        </p>
                    </li>
                    <li>
                        <p>
                            The old impl would have inserted the declarative resolvers in default lookup (assuming you were running with the
                            module system started and thus <code>FolderLookup[Services</code> included). The new impl does not.
                        </p>
                    </li>
                </ul>
            </compatibility>
            <description>
                <p>
                    Declaratively registered MIME resolvers using the XML file syntax
                    (rather than Java classes implementing <code>MIMEResolver</code>)
                    are now used even when you run an application with just the Filesystems API in the classpath.
                    In particular, this makes declarative resolvers be honored in unit tests.
                    Formerly, declarative resolvers were only loaded when you used <code>org-netbeans-core.jar</code>
                    and started the full module system.
                </p>
            </description>
            <class package="org.openide.filesystems" name="MIMEResolver"/>
            <issue number="138846"/>
        </change>
        <change id="layer.bundlevalue">
            <api name="filesystems"/>
            <summary>XMLFileSystem supports 'bundlevalue' attribute</summary>
            <version major="7" minor="10"/>
            <date day="8" month="7" year="2008"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    It is possible to declare a value in <code>layer.xml</code>
                    files with &lt;attr name="..." bundlevalue="org.yourpkg.Bundle#key"/&gt;.
                </p>
            </description>
            <class package="org.openide.filesystems" name="XMLFileSystem"/>
            <issue number="138076"/>
        </change>
        <change id="FileUtil.urlForArchiveOrDir.archiveOrDirForURL">
            <api name="filesystems"/>
            <summary>Added methods to interconvert URLs and traditional path entries</summary>
            <version major="7" minor="8"/>
            <date day="17" month="3" year="2008"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added methods <code>urlForArchiveOrDir</code> and <code>archiveOrDirForURL</code>
                    to <code>FileUtil</code> to make it easier to work with classpaths.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="59311"/>
        </change>
        <change id="FileUtil.addFileChangeListener">
            <api name="filesystems"/>
            <summary>Add methods: addFileChangeListener, removeFileChangeListener, refreshAll</summary>
            <version major="7" minor="7"/>
            <date day="26" month="2" year="2008"/>
            <author login="rmatous"/>
            <compatibility addition="yes"/>
            <description>
                Added utility methods:  
                <ul>
                    <li><code>public static FileObject addFileChangeListener (final FileChangeListener fcl)</code> to receive
                        <code>FileEvents</code> from <code>FileSystems</code> providing instances
                    of <code>FileObject</code> convertible to <code>java.io.File</code></li>
                    <li><code>public static FileObject removeFileChangeListener (final FileChangeListener fcl)</code> to no longer receive
                        <code>FileEvents</code> from <code>FileSystems</code> providing instances
                    of <code>FileObject</code> convertible to <code>java.io.File</code></li>
                    <li><code>public static FileObject refreshAll ()</code> to refreshes all <code>FileObject</code> that represent files <code>File.listRoots()</code> 
                    and their children recursively.</li>
                </ul>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="127121"/>
        </change>                            
        <change id="FileUtil.refreshFor">
            <api name="filesystems"/>
            <summary>Add method FileUtil.refreshFor(File... files)</summary>
            <version major="7" minor="6"/>
            <date day="16" month="1" year="2008"/>
            <author login="rmatous"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added helper method for refreshing all necessary filesystems, to get
                    refreshed all instances of <code>FileObject</code> representing 
                    passed <code>files</code> and their children recursively.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="125308"/>
        </change>                    
        <change id="FileUtil.runAtomicAction">
            <api name="filesystems"/>
            <summary>Simple way to run atomic action without having a fileobject</summary>
            <version major="7" minor="5"/>
            <date day="8" month="1" year="2008"/>
            <author login="rmatous"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Simple way to run atomic action without having a fileobject is ensured by 
                    adding two methods: <code>FileUtil.runAtomicAction</code>.
                    All events about filesystem changes (related to events on all affected instances of <code>FileSystem</code>)
                    are postponed after the whole code runned in atomic block is executed.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="123899"/>
        </change>            
        <change id="FileObject.isLocked">
            <api name="filesystems"/>
            <summary>Added method to test if file is locked</summary>
            <version major="7" minor="3"/>
            <date day="26" month="7" year="2007"/>
            <author login="rmatous"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added method <code>isLocked</code> to <code>FileObject</code>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="110549"/>
        </change>        
        <change id="FileUtil.order">
            <api name="filesystems"/>
            <summary>Added methods to order files in a folder</summary>
            <version major="7" minor="2"/>
            <date day="16" month="6" year="2007"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added methods <code>getOrder</code>, <code>setOrder</code>,
                    and <code>affectsOrder</code> to <code>FileUtil</code>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="103187"/>
        </change>
        <change id="add-content-to-sfs">
            <api name="filesystems"/>
            <summary>Allow modules to dynamically add/remove layer content</summary>
            <version major="7" minor="1"/>
            <date day="12" month="3" year="2007"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    Repository.getDefaultFileSystem's content can now be 
                    influenced by adding own 
                    <a href="@TOP@/org/openide/filesystems/FileSystem.html">FileSystem</a>s
                    into global 
                    <a href="@org-openide-util-lookup@/org/openide/util/Lookup.html">Lookup.getDefault()</a>.
                    This is supposed to work in a standalone mode as well 
                    as inside NetBeans Platform. The tutorial is available
                    in the <a href="@TOP@/architecture-summary.html#answer-arch-usecases">usecases section</a> of achitecture description.
                </p>
            </description>
            <class package="org.openide.filesystems" name="Repository"/>
            <issue number="26338"/>
        </change>
        <change id="createData-and-createFolder-take-File-as-parameter">
            <api name="filesystems"/>
            <summary>Added additional methods <code>FileUtil.createData</code>
                and <code>FileUtil.createFolder</code> that take <code>java.io.File</code> as a parameter.
            </summary>
            <version major="7" minor="0"/>
            <date day="7" month="9" year="2006"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    Added two utility methods for creation of folders and data files 
                    that take <code>java.io.File</code> as a parameter:
                    <code>public static FileObject createFolder (final File folder) throws IOException</code> and
                    <code>public static FileObject createData (final File folder) throws IOException</code>
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="81527"/>            
        </change>                
        <change id="method-value-with-map">
            <api name="filesystems"/>
            <summary>Semantics of XMLFileSystem's methodvalue extended to
                also support methods that do not depend on FileSystems API
                at all
            </summary>
            <version major="7" minor="0"/>
            <date day="29" month="5" year="2006"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    <a href="@TOP@/org/openide/filesystems/XMLFileSystem.html">XMLFileSystem</a>'s 
                    methodvalue now supports also <a href="@JDK@/java/util/Map.html">Map</a>
                    attribute, so one can write factory methods that are completely 
                    independent on filesystems by creating methods like
                    <code>static Object methodName(Map attrs)</code> or
                    <code>static Object methodName(Map attrs, String s)</code>.
                </p>
            </description>
            <class package="org.openide.filesystems" name="XMLFileSystem"/>
            <issue number="76692"/>
        </change>        
        <change id="added-FileObject-getOutputStream-without-FileLock-parameter">
            <api name="filesystems"/>
            <summary>Added additional method <code>FileObject.getOutputStream</code>
                that doesn't take <code>FileLock</code> as a parameter.
            </summary>
            <version major="6" minor="6"/>
            <date day="3" month="5" year="2006"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    Although newly added method <code>FileObject.getOutputStream</code>
                    doesn't take <code>FileLock</code> as a parameter, the implementation
                    is responsible for taking a lock before <code>OutputStream</code> is
                    returned and thus <code>FileAlreadyLockedException</code> exception is thrown
                    when <code>FileObject</code> is already locked.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
        </change>        
        <change id="semantic-change-in-FileUtil.toFileObject">
            <api name="filesystems"/>
            <summary>
                The way how <code>IllegalArgumentException</code> is thrown from 
                <code>FileUtil.toFileObject</code> was changed
            </summary>
            <version major="6" minor="3"/>
            <date day="25" month="10" year="2005"/>
            <author login="rmatous"/>
            <compatibility  modification="yes" semantic="incompatible"/>
            <description>
                <p>Because of performance reason piece of code
                checking whether file was properly normalized is called conditionally just
                in case that assertions are enabled. Then 
                <code>IllegalArgumentException</code> can't be thrown if
                assertions are disabled.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
        </change>
        <change id="no-static-file-ext-mappings">
            <api name="filesystems"/>
            <summary>Removed most static MIME type mappings</summary>
            <version major="6" minor="2"/>
            <date day="21" month="7" year="2005"/>
            <author login="jglick"/>
            <compatibility semantic="incompatible" deletion="yes">
                <p>
                    Clients which were relying on the existence of some of the former mappings may be broken.
                    (Of course such clients were in violation of the API anyway, since these mappings were never
                    documented or guaranteed.) For such cases, either avoid relying on MIME type, or add your
                    own <code>MIMEResolver</code> giving the mapping you want.
                </p>
            </compatibility>
            <description>
                <p>
                    Previously, a number of file extensions were given hardcoded MIME types in the Filesystems
                    API library (unless overridden by <code>MIMEResolver</code>s or <code>FileSystem</code>
                    implementations). Most of these static mappings have been removed. The affected mappings
                    were:
                </p>
                <table border="1">
                    <thead>
                        <tr>
                            <td>Extension</td>
                            <td>MIME type</td>
                        </tr>
                    </thead>
                    <tr>
                        <td><code>au</code></td>
                        <td><code>audio/basic</code></td>
                    </tr>
                    <tr>
                        <td><code>class</code></td>
                        <td><code>application/octet-stream</code></td>
                    </tr>
                    <tr>
                        <td><code>css</code></td>
                        <td><code>text/css</code></td>
                    </tr>
                    <tr>
                        <td><code>dtd</code></td>
                        <td><code>text/x-dtd</code></td>
                    </tr>
                    <tr>
                        <td><code>exe</code></td>
                        <td><code>application/octet-stream</code></td>
                    </tr>
                    <tr>
                        <td><code>htm</code></td>
                        <td><code>text/html</code></td>
                    </tr>
                    <tr>
                        <td><code>html</code></td>
                        <td><code>text/html</code></td>
                    </tr>
                    <tr>
                        <td><code>jar</code></td>
                        <td><code>application/x-jar</code></td>
                    </tr>
                    <tr>
                        <td><code>java</code></td>
                        <td><code>text/x-java</code></td>
                    </tr>
                    <tr>
                        <td><code>jsp</code></td>
                        <td><code>text/plain</code></td>
                    </tr>
                    <tr>
                        <td><code>mov</code></td>
                        <td><code>video/quicktime</code></td>
                    </tr>
                    <tr>
                        <td><code>pl</code></td>
                        <td><code>text/plain</code></td>
                    </tr>
                    <tr>
                        <td><code>properties</code></td>
                        <td><code>text/plain</code></td>
                    </tr>
                    <tr>
                        <td><code>ps</code></td>
                        <td><code>application/postscript</code></td>
                    </tr>
                    <tr>
                        <td><code>ra</code></td>
                        <td><code>audio/x-pn-realaudio</code></td>
                    </tr>
                    <tr>
                        <td><code>ram</code></td>
                        <td><code>audio/x-pn-realaudio</code></td>
                    </tr>
                    <tr>
                        <td><code>rm</code></td>
                        <td><code>audio/x-pn-realaudio</code></td>
                    </tr>
                    <tr>
                        <td><code>rpm</code></td>
                        <td><code>audio/x-pn-realaudio</code></td>
                    </tr>
                    <tr>
                        <td><code>sh</code></td>
                        <td><code>application/x-shar</code></td>
                    </tr>
                    <tr>
                        <td><code>snd</code></td>
                        <td><code>audio/basic</code></td>
                    </tr>
                    <tr>
                        <td><code>tar</code></td>
                        <td><code>application/x-tar</code></td>
                    </tr>
                    <tr>
                        <td><code>text</code></td>
                        <td><code>text/plain</code></td>
                    </tr>
                    <tr>
                        <td><code>txt</code></td>
                        <td><code>text/plain</code></td>
                    </tr>
                    <tr>
                        <td><code>uu</code></td>
                        <td><code>application/octet-stream</code></td>
                    </tr>
                    <tr>
                        <td><code>wav</code></td>
                        <td><code>audio/x-wav</code></td>
                    </tr>
                    <tr>
                        <td><code>xsd</code></td>
                        <td><code>text/xml</code></td>
                    </tr>
                    <tr>
                        <td><code>xsl</code></td>
                        <td><code>text/xml</code></td>
                    </tr>
                    <tr>
                        <td><code>zip</code></td>
                        <td><code>application/zip</code></td>
                    </tr>
                </table>
                <p>
                    The mapping from <samp>*.xml</samp> to <code>text/xml</code> is retained as this may be
                    central to processing of XML configuration files on the system file system.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
        </change>
        <change id="not-final-method-getFileObject">
            <api name="filesystems"/>
            <summary>
                <code>FileObject.getFileObject </code> made not final.</summary>
            <version major="5" minor="3"/>
            <date day="7" month="1" year="2005"/>
            <author login="rmatous"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no" modification="no"/>
            <description>
                <p>
                    Method <code>public final FileObject getFileObject (String relativePath)</code> 
                    in class <code>FileObject</code> isn't final anymore to let more freedom for implemetations.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="51551"/>
        </change>
        <change id="FileUtil-archive-handling">
            <api name="filesystems"/>
            <summary>Easier to work with ZIP/JAR archives</summary>
            <version major="4" minor="48"/>
            <date day="7" month="5" year="2004"/>
            <author login="jglick"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    There are now various methods in <code>FileUtil</code> that let you
                    easily convert between archive files themselves and their entries. It
                    is no longer necessary (or advisable) to explicitly construct
                    <code>JarFileSystem</code>s to work with archives. A standard
                    <code>URLMapper</code> implementation is present which handles
                    <code>jar</code>-protocol URLs correctly.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
        </change>
        <change id="FileUtil.normalizeFile">
            <api name="filesystems"/>
            <summary>
                <code>FileUtil.normalizeFile</code> added</summary>
            <version major="4" minor="48"/>
            <date day="7" month="5" year="2004"/>
            <author login="jglick"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    The method <code>FileUtil.normalizeFile(File)</code> was added as a
                    refinement of <code>File.getCanonicalFile</code> that does not traverse
                    symlinks on Unix. Used throughout the NetBeans 4.0 project system.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="40410"/>
        </change>
        <change id="FileUtil.normalizePath">
            <api name="filesystems"/>
            <summary>
                <code>FileUtil.normalizePath</code> added
            </summary>
            <version major="7" minor="42"/>
            <date day="30" month="9" year="2010"/>
            <author login="vv159170"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    The method 
                    <code>FileUtil.normalizePath(String)</code> was added as a refinement of 
                    <code>FileUtil.normalizeFile</code> that does not require String to File to String conversion
                     on client side when intention is to convert unnormalized path to normalized path presentation. 
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="190480"/>
        </change>        
        <change id="FileObject.setImportant">
            <api name="filesystems"/>
            <summary>
                <code>FileObject.setImportant</code> deprecated</summary>
            <version major="4" minor="48"/>
            <date day="7" month="5" year="2004"/>
            <author login="jglick"/>
            <compatibility binary="compatible" source="compatible" semantic="incompatible" deprecation="yes" addition="no" deletion="no" modification="no">
                <p>
                    There is no direct replacement. Code using this method should be
                    reëvaluated in the light of other changes in NetBeans 4.0.
                </p>
            </compatibility>
            <description>
                <p>
                    In NetBeans 3.x, normally “compilation” or similar build
                    steps would produce generated files kept in the user’s
                    development folder alongside source files, and picked up as secondary
                    files by a <code>MultiFileLoader</code>. To ensure that the VCS
                    integration did not offer to version such files,
                    <code>FileObject.setImportant</code> could be used to mark them as
                    disposable.
                </p>
                <p>
                    In NetBeans 4.0, such disposable files should not be placed in a source
                    folder. They should always be built to a separate build directory,
                    typically defined by the containing project. In this case marking an
                    individual file as unimportant is unnecessary, since the entire build
                    tree is known to be disposable. Instead, the project (not data loaders)
                    can use <code>SharabilityQueryImplementation</code> to indicate which
                    subtrees contain build products.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
        </change>
        <change id="filesystems-deprecations">
            <api name="filesystems"/>
            <summary>Deprecation of various Filesystems API methods and classes</summary>
            <version major="4" minor="48"/>
            <date day="7" month="5" year="2004"/>
            <author login="jglick"/>
            <compatibility binary="compatible" source="compatible" semantic="incompatible" deprecation="yes" addition="no" deletion="no" modification="no">
                <p>
                    In general, attempts to call the old methods will yield well-defined
                    but useless results in NetBeans 4.0.
                </p>
            </compatibility>
            <description>
                <p>
                    Various parts of the Filesystems API which are no longer useful in
                    NetBeans 4.0 were deprecated. The assumptions which are now invalid
                    were:
                </p>
                <ul>
                    <li>
                        <p>
                            The root of a filesystem corresponds to a Java classpath root (if
                            the appropriate capabilities were set). Now handled by the
                            Classpath API.
                        </p>
                    </li>
                    <li>
                        <p>
                            The user explicitly mounts and unmounts filesystems, either to
                            control the classpath, for version control purposes, or simply to
                            access some area of the disk; and so filesystem metadata is
                            relevant to the GUI. Now obsoleted by the Classpath API and
                            MasterFS.
                        </p>
                    </li>
                    <li>
                        <p>
                            The IDE internally managed a list of mounted filesystems. Now only
                            the default system filesystem is “mounted”; MasterFS
                            transparently manages all “user-space” files.
                        </p>
                    </li>
                    <li>
                        <p>
                            File objects are persisted by saving a reference to the containing
                            filesystem, plus the relative path within the filesystem. Now done
                            using URLs.
                        </p>
                    </li>
                </ul>
                <p>
                    Specific deprecations:
                </p>
                <ol>
                    <li>
                        <code>FileSystem.Environment</code> and
                        <code>EnvironmentNotSupportedException</code>
                    </li>
                    <li>
                        <code>FileSystemCapability</code> (and its constants and subclasses),
                        <code>FileSystem.getCapability</code> and <code>setCapability</code>,
                        constructors taking <code>FileSystemCapability</code>
                    </li>
                    <li>
                        <code>FileSystem.PROP_HIDDEN</code>, <code>isHidden</code>, and
                        <code>setHidden</code>
                    </li>
                    <li>
                        <code>FileSystem.PROP_SYSTEM_NAME</code>, <code>getSystemName</code>,
                        and <code>setSystemName</code>
                    </li>
                    <li>
                        <code>FileSystem.find</code>
                    </li>
                    <li>
                        <code>FileObject</code> methods such as <code>getPackageName</code>
                    </li>
                    <li>
                        <code>FileSystem.isPersistent</code>
                    </li>
                </ol>
                <p>
                    See also <a href="#Repository-deprecations">deprecations in
                        <code>Repository</code>
                    </a>.
                </p>
            </description>
            <!--<class package="org.openide.filesystems" name="EnvironmentNotSupportedException"/>-->
            <class package="org.openide.filesystems" name="FileObject"/>
            <class package="org.openide.filesystems" name="FileSystem"/>
            <!--<class package="org.openide.filesystems" name="FileSystemCapability"/>-->
        </change>
        <change id="FileObject.getPath-III">
            <api name="filesystems"/>
            <summary>
                <code>FileObject.toString()</code> not to be used for specific purposes</summary>
            <version major="4" minor="48"/>
            <date day="7" month="5" year="2004"/>
            <author login="jglick"/>
            <compatibility source="compatible" semantic="incompatible" modification="yes" binary="compatible" deprecation="no" addition="no" deletion="no">
                <p>
                    Older Filesystems API clients which assumed that
                    <code>FileObject.toString()</code> and
                    <code>FileObject.getPath()</code> do the same thing will be broken.
                </p>
            </compatibility>
            <description>
                <p>
                    <code>FileObject.toString()</code> no longer returns a predictable
                    value; in particular, it will not be the same as
                    <code>getPath()</code>. The new value is suitable for logging and
                    debugging but otherwise cannot be relied upon.
                </p>
                <p>
                    There are two benefits to this change:
                </p>
                <ol>
                    <li>
                        <p>
                            The new <code>toString()</code> is more useful for logging than the
                            previous value. It is no longer necessary to separately include
                            <code>fileObject.getFileSystem().toString()</code>, which was
                            cumbersome (and required an extra catch clause).
                        </p>
                    </li>
                    <li>
                        <p>
                            Clients which were incorrectly using <code>toString()</code> to get
                            a Java resource path will now be predictably broken, so they can be
                            fixed to use <code>ClassPath</code>. (The paths would not have been
                            usable in NetBeans 4.0 anyway.) Just deprecating
                            <code>toString()</code> was not possible because it overrides a
                            nondeprecated <code>Object</code> method, and is also inserted into
                            code by the compiler without emitting any deprecation warning.
                        </p>
                    </li>
                </ol>
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="27640"/>
        </change>
        <change id="FileUtil.createMemoryFileSystem">
            <api name="filesystems"/>
            <summary>Added new method <code>FileUtil.createMemoryFileSystem ()</code>
            </summary>
            <version major="4" minor="43"/>
            <date day="4" month="8" year="2004"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <p>
                    There is a new factory method <code>FileUtil.createMemoryFileSystem ()</code> 
                    to create an empty, writeable instance of a <code>FileSystem</code> 
                    with content completely stored in memory. This filesystem is the 
                    one that is by default returned from <code>Repository.getDefaultFileSystem()</code>
                    so since now the standalone applications may expect the default file system
                    to be writable.
                </p>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="46701"/>
        </change>
        <change id="FileUtil.preventFileChooserSymlinkTraversal">
            <api name="filesystems"/>
            <summary>Added <code>FileUtil.preventFileChooserSymlinkTraversal(...)</code>
            </summary>
            <version major="4" minor="42"/>
            <date day="30" month="7" year="2004"/>
            <author login="jglick"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added a new method <code>FileUtil.preventFileChooserSymlinkTraversal(...)</code>
                to help work around problems with symbolic links and <code>JFileChooser</code>.
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="46459"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Added FileUtil.getFileDisplayName</summary>
            <version major="4" minor="39"/>
            <date day="9" month="6" year="2004"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Get an appropriate display name for a file object.
                If the file corresponds to a path on disk, this will be the disk path.
                Otherwise the name will mention the filesystem name or archiv name in case 
                the file comes from archiv and relative path. Relative path will be mentioned 
                just in case that passed
                <code>FileObject</code> isn't root.
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <issue number="37549"/>
        </change>
        <change id="Repository-deprecations">
            <api name="filesystems"/>
            <summary>Almost all methods of Repository were deprecated.</summary>
            <version major="4" minor="36"/>
            <date day="1" month="6" year="2004"/>
            <author login="rmatous"/>
            <compatibility deprecation="yes" semantic="incompatible" binary="compatible" source="compatible" addition="no" deletion="no" modification="no"/>
            <description>
                All methods were deprecated except:
                <ul>
                    <li>
                        <code>getDefault ()</code>
                    </li>
                    <li>
                        <code>getDefaultFileSystem ()</code>
                    </li>            
                </ul>        
                
                The previous semantics of Repository is broken. Replacement:                   
                <ul>
                    <li>ClassPath API</li>
                    <li>
                        <code>URLMapper</code> for providing <code>FileObjects</code>
                    </li>            
                </ul>        
            </description>
            <class package="org.openide.filesystems" name="Repository"/>
            <issue number="42273"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Reused DefaultAttributes can use different name than .nbattrs </summary>
            <version major="4" minor="35"/>
            <date day="28" month="5" year="2004"/>
            <author login="rmatous"/>
            <compatibility addition="yes" semantic="compatible" binary="compatible" source="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new constructor to DefaultAttributes that takes file name as next additional parameter.
            </description>
            <class package="org.openide.filesystems" name="DefaultAttributes"/>
            <issue number="43180"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>There should exist just one FileObject for one resource (java.io.File or URL).  </summary>
            <version major="4" minor="29"/>
            <date day="13" month="4" year="2004"/>
            <author login="rmatous"/>
            <compatibility addition="yes" modification="yes" deprecation="yes" semantic="compatible" binary="compatible" source="compatible" deletion="no"/>
            <description>
                <ul>
                    <li>Added method FileUtil.toFileObject as replacement for current method FileUtil.fromFile which was deprecated.</li>
                    <li>Added method URLMapper.findFileObject as replacement for current method URLMapper.findFileObjects which was deprecated .</li>
                </ul>
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <class package="org.openide.filesystems" name="URLMapper"/>
            <issue number="41506"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Added API for finding file relatively to another file</summary>
            <version major="4" minor="16"/>
            <date day="9" month="12" year="2003"/>
            <author login="rmatous"/>
            <compatibility addition="yes" modification="yes" semantic="compatible" binary="compatible" source="compatible" deprecation="no" deletion="no"/>          
            <description>
                <ul>
                    <li>Added method FileUtil.getRelativePath which gets a relative resource path between folder and fo in folder's tree.</li>
                    <li>Slightly modified semantic of FileObject.getFileObject in compatible way. This method retrieves file 
                        or folder relative to a current folder, with a given relative path.
                    </li>
                </ul>                    
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="37445"/>  
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Added FileUtil.isParentOf</summary>
            <version major="3" minor="16"/>
            <date day="22" month="10" year="2002"/>
            <author login="vstejskal"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                FileUtil.isParentOf provides simple recursive check whether the FileObject is
                underneath some folder.
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
        </change>
        <change id="FileObject.getPath-II">
            <api name="filesystems"/>
            <summary>Changed javadoc to warn about improper use of methods</summary>
            <date day="1" month="10" year="2002"/>
            <author login="pzavadsky"/>
            <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
            <description>
                Changed Javadoc to warn about improper usage
                of the <code>FileObject.toString</code> (it was used
                as full path format), which is replaced by
                <code>FileObject.getPath</code> now. Explained correct purpose
                of that method. Also added those warnings to 
                <code>findResource</code> and <code>findAllResource</code>
                of <code>Repository</code> class.
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="27640"/>
            <issue number="27687"/>
        </change>
        <change id="repository-not-final">
            <api name="filesystems"/>
            <summary>Repository is not final</summary>
            <version major="3" minor="3"/>
            <date day="22" month="7" year="2002"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Repository is not final anymore, so there can be subclasses of it. But all its methods
                has been made final. This was done in order to create Repositories that will follow the
                javabeans pattern (have public default constructor).
            </description>
            <class package="org.openide.filesystems" name="Repository"/>
        </change>
        <change id="issue-19443-1">
            <summary>API separation, phase I</summary>
            <version major="3" minor="14"/>
            <date day="15" month="10" year="2002"/>
            <author login="jglick"/>
            <compatibility binary="compatible" source="incompatible" deprecation="yes" semantic="compatible" addition="no" deletion="no" modification="no">
                <p>
                    The deprecated classes continue to be available in the module
                    <code>org.openide.deprecated</code> which you may depend on it you
                    cannot remove uses of the deprecated APIs. In order for
                    <code>TopManager.getDefault()</code> to work, you must also require the
                    token <code>org.openide.TopManager</code>, which is provided by an
                    unspecified module. The deprecated API module and its implementation
                    module are autoloads, meaning they will not be loaded unless some
                    module still requires them.
                </p>
                <p>
                    Similarly, the Java Hierarchy API was moved to the module
                    <code>org.openide.src</code> which you should depend on in order to use
                    this API.
                </p>
                <p>
                    For compatibility, the above three dependencies are added to your module
                    <em>automatically</em> in case it either requests no specific API
                    version at all, or requests an API version prior to 3.14. Modules
                    requesting APIs 3.14 or higher must declare these dependencies
                    explicitly if they in fact need them.
                </p>
            </compatibility>
            <description>
                <p>
                    Many classes were moved to a separate module,
                    <samp>openide-deprecated.jar</samp>, not available to modules by
                    default. Uses of these classes in modules should be cleaned up whenever
                    possible.
                </p>
                <p>
                    Additionally, the entire contents of <code>org.openide.src.*</code> and
                    <code>org.openide.src.nodes.*</code>, as well as
                    <code>org.openide.cookies.SourceCookie</code> and some associated
                    property editors, were moved to a separate module.
                </p>
                <p>
                    The most common apparent symptom for module authors will be the absence
                    of <code>TopManager</code>. Most methods in this class have been
                    replaced by newer utility classes in a straightforward manner. See the
                    Upgrade Guide.
                </p>
            </description>
            <class package="org.openide" name="DialogDisplayer" link="no"/>
            <class package="org.openide" name="LifecycleManager" link="no"/>
            <class package="org.openide" name="Places" link="no"/>
            <class package="org.openide" name="TopManager" link="no"/>
            <class package="org.openide.actions" name="AddWatchAction" link="no"/>
            <class package="org.openide.actions" name="BuildProjectAction" link="no"/>
            <class package="org.openide.actions" name="CompileProjectAction" link="no"/>
            <class package="org.openide.actions" name="DebugProjectAction" link="no"/>
            <class package="org.openide.actions" name="ExecuteProjectAction" link="no"/>
            <class package="org.openide.actions" name="FinishDebuggerAction" link="no"/>
            <class package="org.openide.actions" name="GoAction" link="no"/>
            <class package="org.openide.actions" name="GoToCursorAction" link="no"/>
            <class package="org.openide.actions" name="HelpAction" link="no"/>
            <class package="org.openide.actions" name="OpenProjectAction" link="no"/>
            <class package="org.openide.actions" name="SaveProjectAction" link="no"/>
            <class package="org.openide.actions" name="StartDebuggerAction" link="no"/>
            <class package="org.openide.actions" name="StepOutAction" link="no"/>
            <class package="org.openide.actions" name="ToggleBreakpointAction" link="no"/>
            <class package="org.openide.actions" name="TraceIntoAction" link="no"/>
            <class package="org.openide.actions" name="TraceOverAction" link="no"/>
            <class package="org.openide.awt" name="HtmlBrowser" link="no"/>
            <class package="org.openide.awt" name="StatusDisplayer" link="no"/>
            <class package="org.openide.cookies" name="DebuggerCookie" link="no"/>
            <class package="org.openide.cookies" name="ElementCookie" link="no"/>
            <class package="org.openide.cookies" name="ProjectCookie" link="no"/>
            <class package="org.openide.cookies" name="SourceCookie" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="ChoicePropertyEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="DirectoryOnlyEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="ElementFormatEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="ExternalCompiler" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="FileEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="FileOnlyEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="IconEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="IdentifierArrayEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="MethodParameterArrayEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="ModifierEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="StringArrayCustomEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="StringArrayCustomizable" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="StringArrayEditor" link="no"/>
            <class package="org.openide.explorer.propertysheet.editors" name="TypeEditor" link="no"/>
            <class package="org.openide.loaders" name="DataObjectFilter" link="no"/>
            <class package="org.openide.loaders" name="ExecSupport" link="no"/>
            <class package="org.openide.loaders" name="ExecutionSupport" link="no"/>
            <class package="org.openide.loaders" name="ExtensionListEditor" link="no"/>
            <class package="org.openide.loaders" name="RepositoryNodeFactory" link="no"/>
            <class package="org.openide.modules" name="IllegalModuleException" link="no"/>
            <class package="org.openide.modules" name="ManifestSection" link="no"/>
            <class package="org.openide.modules" name="ModuleDescription" link="no"/>
            <class package="org.openide.nodes" name="NodeOperation" link="no"/>
            <class package="org.openide.options" name="ControlPanel" link="no"/>
            <class package="org.openide.util.actions" name="ProjectSensitiveAction" link="no"/>
            <class package="org.openide.windows" name="IOProvider" link="no"/>
            <package name="org.openide.debugger" link="no"/>
            <package name="org.openide.src" link="no"/>
            <package name="org.openide.src.nodes" link="no"/>
            <issue number="19443"/>
            <issue number="20898"/>
        </change>
        <change id="issue-19443-2">
            <summary>API separation, phase II</summary>
            <version major="3" minor="17"/>
            <date day="1" month="11" year="2002"/>
            <author login="jglick"/>
            <compatibility binary="compatible" source="incompatible" modification="yes" semantic="compatible" deprecation="no" addition="no" deletion="no">
                <p>
                    Module authors using the now-separated APIs will need to adjust their
                    compilation classpaths to include the new JAR files. Modules wishing to
                    use recent APIs and declaring a current openide specification version
                    dependency will need to explicitly declare dependencies on these new
                    APIs if there are any.
                </p>
                <p>
                    For compatibility, modules with no declared Open APIs dependency, or
                    declared on a version prior to 3.17, will have their dependencies
                    automatically refined as if to include the declarations:
                </p>
                <pre>
                    OpenIDE-Module-Module-Dependencies: org.openide.compiler &gt; 1.0,
                    org.openide.execution &gt; 1.0, org.openide.io &gt; 1.0
                    OpenIDE-Module-Requires: org.openide.compiler.CompilationEngine,
                    org.openide.execution.ExecutionEngine, org.openide.windows.IOProvider
                </pre>
                <p>
                    And any package dependencies from old modules on
                    <code>org.netbeans.lib.terminalemulator</code> will be converted to
                    module dependencies.
                </p>
            </compatibility>
            <description>
                <p>
                    Three sections of the Open APIs were split into new autoload modules.
                </p>
                <ul>
                    <li>
                        <p>
                            The module <code>org.openide.compiler</code> (version 1.0) contains
                            the Compiler API and some other classes directly related to it.
                        </p>
                    </li>
                    <li>
                        <p>
                            The module <code>org.openide.execution</code> (version 1.0) contains
                            the Execution API and some other classes directly related to it.
                        </p>
                    </li>
                    <li>
                        <p>
                            The module <code>org.openide.io</code> (version 1.0) contains
                            <code>InputOutput</code> and related classes (formerly part of the
                            Window System API, and still physically in the
                            <code>org.openide.windows</code> package).
                        </p>
                    </li>
                </ul>
                <p>
                    New modules wishing to use these APIs must declare regular module
                    dependencies on them. Future changes in these APIs will be documented
                    separately.
                </p>
                <p>
                    Furthermore, modules wishing to use certain services must
                    <code>OpenIDE-Module-Require</code> them if appropriate:
                </p>
                <ul>
                    <li>
                        <p>
                            <code>org.openide.compiler.CompilationEngine</code>, in order to
                            call <code>CompilationEngine.getDefault()</code>, or safely use
                            <code>AbstractCompileAction</code> or one of its subclasses, or
                            call <code>CompilerJob.start()</code>, or use
                            <code>BeanInfo</code>s for Compiler API classes, etc.
                        </p>
                    </li>
                    <li>
                        <p>
                            <code>org.openide.execution.ExecutionEngine</code>, in order to
                            call <code>ExecutionEngine.getDefault()</code>, or safely use
                            <code>ExecuteAction</code>, or call
                            <code>Executor.execute(...)</code>, or use <code>BeanInfo</code>s
                            for Execution API classes, etc.
                        </p>
                    </li>
                    <li>
                        <p>
                            <code>org.openide.windows.IOProvider</code>, in order to call
                            <code>IOProvider.getDefault()</code>.
                        </p>
                    </li>
                </ul>
                <p>
                    Other minor changes:
                </p>
                <ul>
                    <li>
                        <p>
                            Registration of URL stream handler factories using
                            <code>NbfsStreamHandlerFactory.register(...)</code> is deprecated.
                            Simply create an instance of <code>URLStreamHandlerFactory</code>
                            and add it to Lookup instead.
                        </p>
                    </li>
                    <li>
                        <p>
                            The method <code>FileUtil.nbfsURLStreamHandler</code> was added,
                            but is not intended for use by modules.
                        </p>
                    </li>
                    <li>
                        <p>
                            All uses of <code>ExecInfo</code> are deprecated as they abuse the
                            distinction between Filesystems and the user classpath. Use and
                            override only <code>Executor.execute(DataObject)</code>. Similarly,
                            <code>ThreadExecutor</code> is deprecated for the time being
                            because it suffers from similar problems.
                        </p>
                    </li>
                    <li>
                        <p>
                            Direct use of <code>NbfsURLConnection</code> is deprecated in favor
                            of the more general <code>URLMapper</code> from the Filesystems
                            API.
                        </p>
                    </li>
                    <li>
                        <p>
                            Package dependencies on
                            <code>org.netbeans.lib.terminalemulator</code> must be replaced
                            with module dependencies on a new autoload module
                            <code>org.netbeans.lib.terminalemulator</code> (version 1.0).
                        </p>
                    </li>
                    <li>
                        <p>
                            Several static convenience methods have been added to
                            <code>AbstractCompileAction</code>. Of most interest is
                            <code>prepareJobFor</code>. Module code should no longer assume
                            that <code>DataFolder</code> has a <code>CompilerCookie</code>
                            which recursively compiles the folder and subfolders (according to
                            depth); while it is still true, for reasons of compatibility, new
                            code should use <code>prepareJobFor</code> to create a compiler job
                            from a folder.
                        </p>
                    </li>
                </ul>
            </description>
            <class package="org.openide.actions" name="AbstractCompileAction" link="no"/>
            <class package="org.openide.actions" name="BuildAction" link="no"/>
            <class package="org.openide.actions" name="BuildAllAction" link="no"/>
            <class package="org.openide.actions" name="CleanAction" link="no"/>
            <class package="org.openide.actions" name="CleanAllAction" link="no"/>
            <class package="org.openide.actions" name="CompileAction" link="no"/>
            <class package="org.openide.actions" name="CompileAllAction" link="no"/>
            <class package="org.openide.actions" name="ExecuteAction" link="no"/>
            <class package="org.openide.cookies" name="ArgumentsCookie" link="no"/>
            <class package="org.openide.cookies" name="CompilerCookie" link="no"/>
            <class package="org.openide.cookies" name="ExecCookie" link="no"/>
            <class package="org.openide.filesystems" name="FileUtil"/>
            <class package="org.openide.loaders" name="CompilerSupport" link="no"/>
            <class package="org.openide.loaders" name="ExecutionSupport" link="no"/>
            <class package="org.openide.windows" name="IOProvider" link="no"/>
            <class package="org.openide.windows" name="InputOutput" link="no"/>
            <class package="org.openide.windows" name="OutputEvent" link="no"/>
            <class package="org.openide.windows" name="OutputListener" link="no"/>
            <class package="org.openide.windows" name="OutputWriter" link="no"/>
            <package name="org.openide.compiler" link="no"/>
            <package name="org.openide.execution" link="no"/>
            <issue number="19443"/>
        </change>
        <change id="getPath">
            <api name="filesystems"/>
            <summary>
                <code>FileObject.getPath()</code> returns full resource path of file object</summary>
            <version major="3" minor="7"/>
            <date day="30" month="8" year="2002"/>
            <author login="jglick"/>
            <compatibility deprecation="yes" addition="yes" binary="compatible" source="incompatible" semantic="compatible" deletion="no" modification="no">
                Existing <code>FileObject</code> implementations ought to override the
                new method for efficiency. They should also cease to override
                <code>toString</code>. Subclasses of <code>AbstractFileSystem</code> (the
                normal case) need not be concerned, since the corresponding
                <code>FileObject</code> already implements this method correctly. Code
                assuming <code>toString</code> returns a resource path should be changed
                to use <code>getPath</code> instead.
            </compatibility>
            <description>
                It is commonly necessary to find the full resource path of a file object
                within its filesystem. Formerly you could do this the safe way by calling
                <code>getPackageNameExt('/', '.')</code>, but this is clumsy to
                write, potentially inefficient, and is prone to misinterpretation in the
                case of files without any extension (or files ending in a period, or
                folders with extensions). Calling <code>toString()</code> was more
                effective, but this suffered from the problem that for compatibility
                reasons, no assurance could be made that it would actually give a
                resource path - an old <code>FileObject</code> implementation could
                implement it in any way, since it was not originally documented what it
                should return. Therefore, the new method <code>getPath()</code> has been
                introduced.
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <issue number="26904"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>
                Mounting new filesystem no longer works with filesystems providing
                <code>WizardDescriptor</code> as bean customizers
            </summary>
            <date day="24" month="7" year="2001"/>
            <author login="jtulach"/>
            <compatibility modification="yes" semantic="incompatible" binary="compatible" source="compatible" deprecation="no" addition="no" deletion="no">
                WizardDescriptor as bean customizer no longer opens the wizard
                while mounting. To achieve this use of a special iterator
                in Templates/Mount/ is now used (for modules 3.3+).
            </compatibility>
            <description>
                <p>
                    It used to be the case (NB 3.2) that a FileSystem
                    implementation could in its BeanInfo specify a BeanDescriptor whose
                    Customizer class extended WizardDescriptor. This would cause the
                    wizard to be opened when the user tried to mount that filesystem type.
                </p>
                <p>
                    The situation now (from 3.3) is that this no longer opens
                    the customizer and property sheet is presented in the second
                    step of the mount wizard.
                </p>
            </description>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Filesystem implementation methods protected not public</summary>
            <date day="27" month="3" year="2000"/>
            <author login="jtulach"/>
            <compatibility source="incompatible" modification="yes" binary="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no">
                First broken, later restored binary compatibility in trunk and
                <code>boston</code>. Any outside code calling them as public will break;
                however such code is definitely erroneous and should be rewritten.
            </compatibility>
            <description>
                <p>
                    Many methods in <code>LocalFileSystem</code> and
                    <code>JarFileSystem</code> were declared public though they should never
                    have been called directly. (They were implementing interface methods
                    that would only be called from within the class itself.) These methods
                    are:
                </p>
                <ul>
                    <li>
                        <code>children(String)</code>
                    </li>
                    <li>
                        <code>createData(String)</code>
                    </li>
                    <li>
                        <code>createFolder(String)</code>
                    </li>
                    <li>
                        <code>delete(String)</code>
                    </li>
                    <li>
                        <code>folder(String)</code>
                    </li>
                    <li>
                        <code>inputStream(String)</code>
                    </li>
                    <li>
                        <code>lastModified(String)</code>
                    </li>
                    <li>
                        <code>lock(String)</code>
                    </li>
                    <li>
                        <code>markUnimportant(String)</code>
                    </li>
                    <li>
                        <code>mimeType(String)</code>
                    </li>
                    <li>
                        <code>outputStream(String)</code>
                    </li>
                    <li>
                        <code>readOnly(String)</code>
                    </li>
                    <li>
                        <code>rename(String,String)</code>
                    </li>
                    <li>
                        <code>size(String)</code>
                    </li>
                    <li>
                        <code>unlock(String)</code>
                    </li>
                </ul>
                <p>
                    Also in <code>JarFileSystem</code> only:
                </p>
                <ul>
                    <li>
                        <code>readAttribute(String,String)</code>
                    </li>
                    <li>
                        <code>writeAttribute(String,String,Object)</code>
                    </li>
                    <li>
                        <code>attributes(String)</code>
                    </li>
                    <li>
                        <code>renameAttributes(String,String)</code>
                    </li>
                    <li>
                        <code>deleteAttributes(String)</code>
                    </li>
                </ul>
                <p>
                    All these methods are now protected.
                </p>
                <p>
                    In general, outside code should use the proper outer API to access
                    filesystems (<code>FileSystem</code> and <code>FileObject</code> and
                    some helper classes), only directly calling methods of implementation
                    classes where this is required (constructors or
                    <code>setRootDirectory</code>). As a matter of style, it is recommended
                    that calling code declare variables to be of the abstract type (e.g.
                    <code>FileSystem</code>) to clarify that only generally available
                    methods will be called.
                </p>
            </description>
            <class package="org.openide.filesystems" name="LocalFileSystem"/>
            <class package="org.openide.filesystems" name="JarFileSystem"/>
            <!-- No boston branch tag, as change made before it. -->
        </change>
        <change>
            <api name="filesystems"/>
            <summary>URL -&gt; FileObject mapping implementation</summary>
            <version major="2" minor="22"/>
            <date day="6" month="6" year="2002"/>
            <author login="rmatous"/>
            <compatibility semantic="incompatible" modification="yes" binary="compatible" source="compatible" deprecation="no" addition="no" deletion="no">
                Added abstract method <code>public abstract FileObject[] getFileObjects (URL url)</code>
                But there doesn`t exists any known subclass of URLMapper yet. And URLMapper was introduced
                recently 2.16 in 3.4 release.  
            </compatibility>
            <description>
                Two methods were added <code>public static FileObject[] findFileObjects (URL url)</code> and 
                <code>public abstract FileObject[] getFileObjects (URL url)</code>.
            </description>
            <class package="org.openide.filesystems" name="URLMapper"/>
        </change>
        <change id="URLMapper">
            <api name="filesystems"/>
            <summary>Added support for better FileObject-URL mapping</summary>
            <version major="2" minor="16"/>                  
            <date day="25" month="4" year="2002"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new class  <code>URLMapper</code>. This class provides basic mapping
                for FileObjects from LocalFileSystem, JarFileSystem and MultiFileSystem and  is intended 
                as superclass for individual mappers.
            </description>
            <class package="org.openide.filesystems" name="URLMapper"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>URLMapper.findFileObjects returns empty array if not successful.</summary>
            <version major="3" minor="28"/>
            <date day="8" month="1" year="2003"/>
            <author login="rmatous"/>
            <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
            <description>
                <code>URLMapper.findFileObjects </code> returns empty array if not successful. 
                As far there was in documentation written, that null is returned.      
            </description>
            <class package="org.openide.filesystems" name="URLMapper"/>
            <issue number="28312"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary> Method FileObject.isReadOnly was deprecated and replaced with  methods canRead, canWrite</summary>
            <version major="3" minor="31"/>
            <date day="10" month="1" year="2003"/>
            <author login="rmatous"/>
            <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
            <description>
                There was made changes in FileObject class.
                Added method: <code>public boolean canRead ()</code>.
                Method  <code>public boolean isReadOnly ()</code>  was deprecated and replaced with
                method: <code>public boolean canWrite ()</code>. This change can be considered as compatible.
                Newly added methods have default implementation.  Also AbstractFileSystem was modified and two
                necessary method were added: method: <code>public boolean canRead ()</code> and 
                method: <code>public boolean canWrite ()</code>.
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>      
        </change>
        <change id="FileSystem.refresh">
            <api name="filesystems"/>
            <summary>There exists possibility to refresh whole filesystem in one  </summary>
            <version major="2" minor="16"/>            
            <date day="24" month="4" year="2002"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Method: <code>public void FileSystem.refresh (boolean expected))</code> was added. 
            </description>
            <class package="org.openide.filesystems" name="FileSystem"/>      
        </change>
        <change id="FileSystem.FileChangeListener">
            <api name="filesystems"/>
            <summary>FileSystem provides FileChangeListener functionality </summary>
            <version major="2" minor="8"/>            
            <date day="11" month="3" year="2002"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Method: <code>public final void addFileChangeListener(FileChangeListener fcl)</code> and
                <code>public final void removeFileChangeListener(FileChangeListener fcl)</code> was added 
                to maintain FileChangeListeners that should be notified if some change in FileSystem occures.
            </description>
            <class package="org.openide.filesystems" name="FileSystem"/>
        </change>
        <change id="Repository.FileChangeListener">
            <api name="filesystems"/>
            <summary>Repository provides FileChangeListener functionality </summary>
            <version major="2" minor="8"/>            
            <date day="11" month="3" year="2002"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Method: <code>public final void addFileChangeListener(FileChangeListener fcl)</code> and
                <code>public final void removeFileChangeListener(FileChangeListener fcl)</code> was added 
                to maintain FileChangeListeners that should be notified if some change in Repository occures.
            </description>
            <class package="org.openide.filesystems" name="Repository"/>
        </change>
        <change id="FileSystem.PROP_DISPLAY_NAME">
            <api name="filesystems"/>
            <summary>New property FileSystem.PROP_DISPLAY_NAME was added  </summary>
            <version major="2" minor="1"/>            
            <date day="17" month="1" year="2002"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <code>FileSystem.PROP_DISPLAY_NAME</code>  added to
                notify a change in the display name.
            </description>
            <class package="org.openide.filesystems" name="FileSystem"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Propagate masks flag for multi-filesystems</summary>
            <date day="23" month="11" year="2000"/>
            <author login="jglick"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <code>setPropagateMasks</code> and <code>getPropagateMasks</code> added to
                make it easier to compose multi filesystems inside other multi filesystems.
            </description>
            <class package="org.openide.filesystems" name="MultiFileSystem"/>
        </change>
        <change id='mfs-find-action' >
            <api name="filesystems"/>
            <summary>
                <code>MultiFileSystem</code> finds actions on a set of files specially</summary>
            <date day="6" month="12" year="2000"/>
            <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
            <description>
                Method: <code>getActions(final Set foSet)</code> was added, which should
                provide a Set of <code>FileObject</code>s to run the actions on. This method overloads
                default behavior of <code>FileSystem.getActions(final Set foSet)</code>.
            </description>
            <class package="org.openide.filesystems" name="MultiFileSystem"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>MIME lookup by extension made friendlier for C/C++</summary>
            <date day="11" month="9" year="2000"/>
            <author login="jglick"/>
            <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
            <description>
                MIME types no longer include C/C++ extensions by default; and file
                extension lookups give preference to case-sensitive matches but also work
                with case-insensitive matches by default.
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Find a MIME type for a file object using resolvers</summary>
            <date day="5" month="2" year="2001"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new public method <code>getMIMEType(FileObject)</code>. Resolves
                MIME type. Registered resolvers are invoked and used to achieve this goal.
                Resolvers must subclass <a href="#MIMEResolver">
                    <code>MIMEResolver</code>
                </a>. If
                resolvers do not recognize MIME type then MIME type is obtained for a
                well-known extension.
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
        </change>
        <change id="MultiFileSystem.createWritableOnForRename">
            <api name="filesystems"/>
            <summary>Method createWritableOnForRename in MultiFileSystem was added</summary>
            <version major="1" minor="34"/>
            <date day="30" month="8" year="2001"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>      
            <description>
                Protected method <code>createWritableOnForRename</code> in <code>MultiFileSystem</code> 
                was added. This method has the same meaning as <code>createWritableOn</code> but have two parameters: 
                oldName, newName. This method is called from <code>MultiFileObject.rename</code>.
            </description>
            <class package="org.openide.filesystems" name="MultiFileSystem"/>
        </change>
        <change id="FileEvent.firedFrom">
            <api name="filesystems"/>
            <summary>
                <code>FileEvent</code>s fired inside atomic actions can report from which atomic actions they were fired</summary>
            <version major="1" minor="35"/>
            <date day="21" month="9" year="2001"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>      
            <description>
                Method <code>boolean FileEvent.firedFrom(FileSystem.AtomicAction run)</code> returns true if this 
                <code>FileEvent</code> was fired from <code>run</code>. 
            </description>
            <class package="org.openide.filesystems" name="FileEvent"/>      
        </change>
        <change id="FileUtil.toFile-fromFile">
            <api name="filesystems"/>
            <summary>Find a disk file from a file object or vice-versa</summary>
            <version major="1" minor="29"/>
            <date day="31" month="7" year="2001"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added method <code>public File toFile(FileObject)</code>. Finds
                appropriate <code>java.io.File</code> to <code>FileObject</code> if
                possible. If not possible then <code>null</code> is returned.
                Also added method <code>public FileObject[] fromFile(File)</code>. Finds
                appropriate <code>FileObject</code>s to <code>java.io.File</code> if
                possible. If not possible then empty array is returned. More than one
                <code>FileObject</code> may correspond to one <code>java.io.File</code> so
                an array is returned.
            </description>
            <class package="org.openide.filesystems" name="FileUtil"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>FileAttributeEvent's methods getName (), getOldValue (), getNewValue () can return null</summary>
            <version major="1" minor="33"/>
            <date day="24" month="8" year="2001"/>
            <author login="rmatous"/>
            <compatibility semantic="incompatible" modification="yes" binary="compatible" source="compatible" deprecation="no" addition="no" deletion="no">
                Code previously assuming that all <code>FileAttributeEvent</code>
                fields were non-null may now be broken, and should check for
                <code>null</code>s.
            </compatibility>
            <description>
                <code>FileAttributeEvent</code>'s methods <code>getName ()</code>, 
                <code>getOldValue ()</code>, <code>getNewValue ()</code> can return <code>null</code>.
                If <code>getName ()</code> returns null then this means that one of attributes were changed. If
                <code>getName ()</code> returns <code>null</code> then there is supposed that all <code>FileAttributeEvent</code>
                fields will return <code>null</code> also.
            </description>
            <class package="org.openide.filesystems" name="FileAttributeEvent"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Discover which filesystem a FileStateInvalidException is associated with</summary>
            <version major="1" minor="30"/>
            <date day="17" month="8" year="2001"/>
            <author login="mschilling"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added method <code>public String getFileSystemName()</code>. This will
                return the name of the filesystem containing the file with invalid
                state if such information is available.
            </description>
            <class package="org.openide.filesystems" name="FileStateInvalidException"/>
        </change>
        <change id='repository-adapter-added' >
            <api name="filesystems"/>
            <summary>
                <code>RepositoryAdapter</code> added</summary>
            <date day="25" month="6" year="2000"/>
            <author login="jglick"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added to make it easier to use <code>RepositoryListener</code>.
            </description>
            <class package="org.openide.filesystems" name="RepositoryAdapter"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Find known file objects starting from some point in the tree</summary>
            <date day="10" month="8" year="2000"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new protected method <code>existingFileObjects(FileObject)</code>.
                Can be used to find all <code>FileObject</code>s in this filesystem with
                the given predecessor.
            </description>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>
            <branch name="boston">
                <date day="10" month="8" year="2000"/>
            </branch>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Customizable references to known file objects</summary>
            <date day="22" month="8" year="2000"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new protected method
                <code>Reference createReference(FileObject fo)</code>. This
                method returns <code>WeakReference</code> of <code>obj</code>
                (<code>new WeakReference (fo)</code>). If you subclass from
                <code>AbstractFileSystem</code>, you can overload this method to return
                another type of <code>Reference</code>.
            </description>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Find references to file objects by name</summary>
            <date day="22" month="8" year="2000"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new final protected method
                <code>Reference findReference(String resourceName)</code>. This
                method finds the reference associated with <code>resourceName</code>.
            </description>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>
                <code>AbstractFileSystem.refreshRoot</code> was of the wrong type</summary>
            <date day="24" month="2" year="2000"/>
            <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no">
                First broken, later restored binary compatibility in trunk and
                <code>boston</code>. The change should be source-code compatible, and is
                made to be binary compatible as well.
            </compatibility>
            <description>
                <code>refreshRoot</code> now returns <code>FileObject</code> rather than
                the subclass <code>AbstractFileObject</code>. In fact the returned object
                currently is always an <code>AbstractFileObject</code> but this subclass
                is package-private so it was an API bug to mention it from an accessible
                method.
            </description>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>
            <!-- No boston branch tag, as change made before it. -->
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Can mark files as being virtual</summary>
            <date day="1" month="6" year="2001"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new protected method <code>protected boolean checkVirtual(String
                    name)</code>.Tests if file really exists or is missing. Some operation on
                it may be restricted if returns true.
            </description>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Can mark files as being important</summary>
            <date day="1" month="6" year="2001"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new protected method <code>protected void markImportant(String name,
                    boolean important)</code>. Mark the file as being important or
                unimportant.
            </description>
            <class package="org.openide.filesystems" name="AbstractFileSystem"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Added <code>XMLFileSystem</code>
            </summary>
            <date day="1" month="11" year="2000"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new <code>XMLFileSystem</code> that reads content of special XML
                file and represents it as filesystem. This filesystem is used by modules
                to provide their own content of menus, toolbars, templates, component
                palette, etc.
            </description>
            <class package="org.openide.filesystems" name="XMLFileSystem"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Get default <code>Repository</code> from within Filesystems API</summary>
            <date day="7" month="2" year="2001"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added method <code>Repository.getDefault()</code> that allows standalone
                tools (using just filesystems library) without access to
                <code>TopManager</code> to get the default repository of the system.
            </description>
            <class package="org.openide.filesystems" name="Repository"/>
        </change>
        <change id='not-a-cookie' >
            <api name="filesystems"/>
            <summary>
                <code>Repository</code> is not a cookie</summary>
            <date day="8" month="1" year="2001"/>
            <author login="jtulach"/>
            <compatibility source="incompatible" modification="yes" binary="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no">
                Code that used <code>Repository</code> as cookie should be changed to:
                <pre>
                    ic = (<span class="type">InstanceCookie</span>)node.getCookie(InstanceCookie.<span class="keyword">class</span>);
                    <span class="keyword">if</span> (ic != <span class="constant">null</span> &amp;&amp; Repository.<span class="keyword">class</span>.isAssignableFrom(ic.instanceCookie())) {
                    <span class="comment">// do stuff
                    </span>}
                </pre>
            </compatibility>
            <description>
                <code>Repository</code> has been changed not to implement the
                <code>Node.Cookie</code> interface. The reason for such change is that
                this was the only place where filesystems package depended on another part
                in the IDE.
            </description>
            <class package="org.openide.filesystems" name="Repository"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Test if a file object is virtual</summary>
            <date day="1" month="6" year="2001"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new method <code>public isVirtual</code>. Tests if file really
                exists or is missing. Some operation on it may be restricted. Return value
                true indicates that the file is missing.
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
        </change>
        <change id="FileObject.delete-without-lock">
            <api name="filesystems"/>
            <summary>Simplified file object deletion</summary>
            <version major="1" minor="15"/>
            <date day="25" month="6" year="2001"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added method <code>public final void delete()</code>.
                <code>FileObject</code> is locked before delete and finally this lock is
                released.
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
        </change>
        <change id="FileObject.createData-without-ext">
            <api name="filesystems"/>
            <summary>Create file object without extension</summary>
            <version major="1" minor="17"/>
            <date day="27" month="6" year="2001"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added convenience method <code>public FileObject createData(String name)
                    throws IOException</code>. Creates new data file in this folder with the
                specified name. Plainly calls <code>createData(name,"")</code>.
            </description>
            <class package="org.openide.filesystems" name="FileObject"/>
        </change>
        <change>
            <api name="filesystems"/>
            <summary>Create expected file events</summary>
            <date day="29" month="1" year="2001"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                <code>FileEvent</code> and subclass constructors may take a parameter
                <code>boolean expected</code>.
            </description>
            <class package="org.openide.filesystems" name="FileEvent"/>
            <class package="org.openide.filesystems" name="FileAttributeEvent"/>
            <class package="org.openide.filesystems" name="FileRenameEvent"/>
        </change>
        <change id="MIMEResolver">
            <api name="filesystems"/>
            <summary>Added <code>MIMEResolver</code>
            </summary>
            <date day="5" month="2" year="2001"/>
            <author login="rmatous"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
            <description>
                Added new <code>MIMEResolver</code>. This class is intended as superclass
                for individual resolvers.
            </description>
            <class package="org.openide.filesystems" name="MIMEResolver"/>
        </change>
    </changes>
    <htmlcontents>
        <head>
            <title>Change History for the File Systems 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>
