<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

    <!-- First, a list of API names you may use: -->
    <apidefs>
        <apidef name="general">Project API</apidef>
        <!-- etc. -->
    </apidefs>

    <!-- ACTUAL CHANGES BEGIN HERE: -->

    <changes>
        <change id="run-test-in-parallel-action">
            <api name="general"/>
            <summary>Added action for running tests in parallel</summary>
            <version major="1" minor="99"/>
            <date day="2" month="12" year="2024"/>
            <author login="petrovic-d"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code><a href="@TOP@/org/netbeans/spi/project/ActionProvider.html">ActionProvider.COMMAND_TEST_PARALLEL</a></code> was introduced in order to
                    allow running tests in parallel.
                    <code><a href="@TOP@/org/netbeans/api/project/ContainedProjectFilter.html">ContainedProjectFilter</a></code> was added and
                    it can be used to pass list of projects the project action should apply to.
                    <code><a href="@TOP@/org/netbeans/spi/project/NestedClass.html">NestedClass</a></code> was added in order to support
                    nested classes.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="ContainedProjectFilter"/>
            <class package="org.netbeans.spi.project" name="ActionProvider"/>
            <class package="org.netbeans.spi.project" name="NestedClass"/>
        </change>
        <change id="project-action-context">
            <api name="general"/>
            <summary>Added <code>ProjectActionContext</code> that can pass action-like environment to project queries</summary>
            <version major="1" minor="89"/>
            <date day="10" month="8" year="2022"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code><a href="@TOP@/org/netbeans/api/project/ProjectActionContext.html">ProjectActionContext</a></code> can be used
                    to inform various project queries about the intended action or environment for which the value is requested. This
                    contract is optional for query implementors.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="ProjectActionContext"/>
        </change>
        <change id="active-configuration-getset">
            <api name="general"/>
            <summary>Added <code>ProjectUtils.get/setActiveConfiguration</code> convenience methods</summary>
            <version major="1" minor="89"/>
            <date day="10" month="8" year="2022"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Clients do not need to interact with Project's Lookup and <a href="@TOP@/org/netbeans/spi/project/ProjectConfigurationProvider.html">ProjectConfigurationProvider</a> directly,
                    handling missing provider and mutex; they can use the convenience API method.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="ProjectUtils"/>
        </change>
        <change id="project-priming-action">
            <api name="general"/>
            <summary>Added <code>ActionProvider.COMMAND_PRIME</code> that initializes the project for IDE use.</summary>
            <version major="1" minor="80"/>
            <date day="5" month="3" year="2021"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code><a href="@TOP@/org/netbeans/spi/project/ActionProvider.html">ActionProvider.COMMAND_PRIME</a></code> was introduced, so that
                    projects can declare (and enable/disable as needed) an action that "primes" or initializes the project for the IDE. That often includes
                    downloads, or partial build, which may produce messages, and could be automated by project-opening code.
                </p>
            </description>
        </change>
        <change id="parent-and-root-project-provider">
            <api name="general"/>
            <summary>Added <code>ParentProjectProvider</code> and <code>RootProjectProvider</code> to improve project hierarchy discovery</summary>
            <version major="1" minor="79"/>
            <date day="2" month="1" year="2021"/>
            <author login="lkishalmi"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code><a href="@TOP@/org/netbeans/spi/project/ParentProjectProvider.html">ParentProjectProvider</a></code> and
                    <code><a href="@TOP@/org/netbeans/spi/project/RootProjectProvider.html">RootProjectProvider</a></code> with correspondig
                    utility methods in <code><a href="@TOP@/org/netbeans/api/project/ProjectUtils.html">RootProjectProvider</a></code>
                    to improve project hierarchy discovery.
                </p>
            </description>
            <issue number="NETBEANS-5204"/>
        </change>
        <change id="SourceGroupRelativeModifierImplementation">
            <api name="general"/>
            <summary>Added a <code>SourceGroupRelativeModifierImplementation</code> to improve source root creation</summary>
            <version major="1" minor="68"/>
            <date day="20" month="3" year="2017"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    In presence of multiple source roots, e.g. several source folders, or test folders, some of them may be more
                    related to the 
                </p>
            </description>
            <class package="org.netbeans.spi.project.support" name="LookupProviderSupport"/>
            <issue number="253355"/>
        </change>
        <change id="SharabilityQueryMerger">
            <api name="general"/>
            <summary>Added a <code>LookupMerger</code> for <code>SharabilityQueryImplementation2</code></summary>
            <version major="1" minor="64"/>
            <date day="8" month="6" year="2015"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added a factory method into the <code>LookupProviderSupport</code> creating a
                    <code>LookupMerger</code> for <code>SharabilityQueryImplementation2</code>.
                </p>
            </description>
            <class package="org.netbeans.spi.project.support" name="LookupProviderSupport"/>
            <issue number="253355"/>
        </change>
        <change id="ProjectManagerImplementation">
            <api name="general"/>
            <summary>SPI interface for <code>ProjectManager</code></summary>
            <version major="1" minor="59"/>
            <date day="7" month="4" year="2014"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added a SPI internface for <code>ProjectManager</code> allowing
                    different implementations of <code>ProjectManager</code>
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="ProjectManagerImplementation"/>
            <class package="org.netbeans.api.project" name="ProjectManager"/>
            <issue number="210465"/>
        </change>
         <change id="ProjectManager.Result">
            <api name="general"/>
            <summary>More information in <code>ProjectManager.Result</code></summary>
            <version major="1" minor="60"/>
            <date day="30" month="4" year="2014"/>
            <author login="tstupka"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                  Introduced <code>ProjectManager.Result.getDisplayName()</code> and <code>ProjectManager.Result.getProjectType()</code>
                  to provide more information about a potential project via <code>ProjectManager.isProject2(FileObject)</code>.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="ProjectManager"/>
            <issue number="244126"/>
        </change>
        <change id="DependencyProjectProvider">
            <api name="general"/>
            <summary></summary>
            <version major="1" minor="56"/>
            <date day="20" month="11" year="2013"/>
            <author login="mkleint"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                <p>
                    Newly introduced interfaces <code>DependencyProjectProvider</code> and <code>ProjectContainerProvider</code> are meant as less general replacement for <code>SubprojectProvider</code>
                    as they explicitly declaring their contract 
                    (<code>DependencyProjectProvider</code> the project's dependency projects and <code>ProjectContainerProvider</code> projects that are build as part of this project). Code using <code>SubprojectProvider</code> currently
                    should evaluate if <code>DependencyProjectProvider</code> or <code>ProjectContainerProvider</code> contracts suit their usage better. Please note that the new interfaces are not
                    mandatory for project types to implement and if it's missing, <code>SubprojectProvider</code> should be used.
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="DependencyProjectProvider"/>
            <class package="org.netbeans.spi.project" name="ProjectContainerProvider"/>
            <class package="org.netbeans.api.project" name="ProjectUtils"/>
            <issue number="210465"/>
        </change>
        
        <change id="LookupProviderSupport.multi">
            <api name="general"/>
            <summary>New method createCompositeLookup(Lookup, Lookup) in LookupProviderSupport</summary>
            <version major="1" minor="49"/>
            <date day="26" month="9" year="2012"/>
            <author login="mkleint"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Introducing method <code>LookupProviderSupport.createCompositeLookup(Lookup, Lookup)</code> which is a more freeform variant of 
                    already existing method. The first parameter is expected to be the base lookup containing instances to be found in project lookup,
                    the second parameter is a lookup containing just <code>LookupProvider</code>s.
                </p>
            </description>
            <class package="org.netbeans.spi.project.support" name="LookupProviderSupport"/>
            <issue number="200711"/>
        </change>
        
        <change id="FOQ.UNOWNED">
            <api name="general"/>
            <summary>New constant UNOWNED in FileOwnerQuery to mark a folder as definitely not owned by any project.</summary>
            <version major="1" minor="46"/>
            <date day="30" month="5" year="2012"/>
            <author login="mkleint"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Introducing constant <code>FileOwnerQuery.UNOWNED</code>, a pseudoproject indicating just that a directory is definitely unowned. May
                     be returned by either 
                     <code>FileOwnerQueryImplementation.getOwner</code>, in which case null is returned from
                     <code>FileOwnerQuery.getOwner</code>. May also be passed to either
                    <code>FileOwnerQuery.markExternalOwner</code> overload, in which case the standard directory search will be pruned at this point with no result. 
                </p>
            </description>
            <class package="org.netbeans.api.project" name="FileOwnerQuery"/>
            <issue number="212015"/>
        </change>
        <change id="Profiler.Actions">
            <api name="general"/>
            <summary>Profiler actions are an integral part of the project infrastructure - just like the debugger actions</summary>
            <version major="1" minor="44"/>
            <date day="27" month="3" year="2011"/>
            <author login="yardus"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    In order to be able to fully integrate the profiler with the project infrastructure
                    it is necessary to add three new constants to 
                    <code>ActionProvider</code> SPI for profiling a project, profiling a single file and
                    profiling a test for single file. 
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="ActionProvider"/>
            <issue number="203519"/>
        </change>
        <change id="ActionProgress">
            <api name="general"/>
            <summary>Added <code>ActionProgress</code></summary>
            <version major="1" minor="43"/>
            <date year="2012" month="3" day="20"/>
            <author login="jglick"/>
            <compatibility addition="yes">
                <p>
                    <code>ActionProvider</code> implementations should call the
                    new progress listener if possible.
                </p>
            </compatibility>
            <description>
                <p>
                    A new callback was added permitting the invoker of a project
                    action to be notified when the action completes.
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="ActionProgress"/>
            <issue number="71515"/>
        </change>

        <change id="SourceGroup.contains.IAE">
            <api name="general"/>
            <summary><code>SourceGroup.contains</code> no longer throws <code>IllegalArgumentException</code></summary>
            <version major="1" minor="40"/>
            <date day="15" month="11" year="2011"/>
            <author login="jglick"/>
            <compatibility source="compatible" binary="incompatible" modification="yes">
                <p>
                    Implementations previously throwing this exception should just return false now instead.
                    Callers previously catching the exception, or making a special effort to ensure the precondition, no longer need do so.
                </p>
            </compatibility>
            <description>
                <p>
                    For convenience and safety, the <code>contains</code> method no longer throws an unchecked exception;
                    it proved infeasible to ensure the precondition even in the face of projects
                    being renamed or deleted or similar dynamic changes to directory structure.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="SourceGroup"/>
            <issue number="204271"/>
        </change>

        <change id="ActionProviderMerger">
            <api name="general"/>
            <summary>Added <code>LookupProviderSupport.createActionProviderMerger</code> factory method</summary>
            <version major="1" minor="38"/>
            <date day="10" month="9" year="2011"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added <code>LookupProviderSupport.createActionProviderMerger</code> factory method to
                    create a <code>LookupMerger</code> for merging multiple instances of <code>ActionProvider</code>
                    in the project's <code>Lookup</code>.
                </p>
            </description>
            <class package="org.netbeans.spi.project.support" name="LookupProviderSupport"/>
            <issue number="201737"/>
        </change>

        <change id="ProjectIconAnnotator">
            <api name="general"/>
            <summary>Added <code>ProjectIconAnnotator</code></summary>
            <version major="1" minor="33"/>
            <date day="24" month="6" year="2010"/>
            <author login="jbecicka"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    A mechanism for changing the project node icon.
                    You can use it for example to add a badge to the project's icon.
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="ProjectIconAnnotator"/>
            <issue number="171516"/>
        </change>

        <change id="MoveOrRenameOperationImplementation">
            <api name="general"/>
            <summary>Added <code>MoveOrRenameOperationImplementation</code></summary>
            <version major="1" minor="31"/>
            <date day="15" month="4" year="2010"/>
            <author login="jglick"/>
            <compatibility addition="yes">
                <p>
                    Existing implementations of <code>MoveOperationImplementation</code>
                    should be revised to implement the extended interface.
                </p>
            </compatibility>
            <description>
                <p>
                    Extended interface giving projects the ability to implement
                    a simple display name change more safely and efficiently.
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="MoveOrRenameOperationImplementation"/>
            <issue number="183680"/>
        </change>

        <change id="ProjectUtils.getCacheDirectory">
            <api name="general"/>
            <summary>API complement to <code>CacheDirectoryProvider</code></summary>
            <version major="1" minor="26"/>
            <date day="21" month="7" year="2009"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added <code>ProjectUtils.getCacheDirectory</code> to complement
                    the SPI interface <code>CacheDirectoryProvider</code>.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="ProjectUtils"/>
            <issue number="168414"/>
        </change>

        <change id="source-group-modifier">
            <api name="general"/>
            <summary>introduction of SourceGroupModifier, a way to create SourceGroup if missing</summary>
            <version major="1" minor="24"/>
            <date day="18" month="2" year="2009"/>
            <author login="mkleint"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code>SourceGroupModifier</code> provides ways of create specific folders (<code>SourceGroup</code> root folders)
                    in case they don't exist, eg. cannot be retrieved from <code>Sources</code>.
                    The project supporting automated creation of SourceGroup root folders needs to
                    provide <code>SourceGroupModifierImplementation</code> in the project's lookup.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="SourceGroupModifier"/>
            <class package="org.netbeans.spi.project" name="SourceGroupModifierImplementation"/>
            <issue number="102711"/>
        </change>

        <change id="projectfactory2">
            <api name="general"/>
            <summary>Provide project icon without actually loading the project</summary>
            <version major="1" minor="22"/>
            <date day="13" month="1" year="2009"/>
            <author login="mkleint"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                  Introducing <code>ProjectFactory2</code> that extends <code>ProjectFactory</code>
                  and return <code>ProjectManager.Result</code> instead of a simple boolean value.
                  Also add <code>ProjectManager.isProject2(FileObject)</code> method that can be used by
                  3rd party modules that need a fast (yet not 100% reliable) way of finding the project icon for a folder.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="ProjectManager"/>
            <class package="org.netbeans.spi.project" name="ProjectFactory2"/>
            <issue number="153923"/>
        </change>

        <change id="ProjectServiceProvider">
            <api name="general"/>
            <summary>Add annotations <code>@ProjectServiceProvider</code> and <code>@LookupMerger.Registration</code></summary>
            <version major="1" minor="23"/>
            <date day="23" month="1" year="2009"/>
            <author login="jglick"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible">
                <p>
                    Implementations of <code>LookupProvider</code> should be converted wherever possible.
                </p>
            </compatibility>
            <description>
                <p>
                  Added annotations to register entries to project lookup individually.
                  These can be used instead of implementing a <code>LookupProvider</code>.
                  Since the entries are loaded on demand, this can help avoid needless class loading.
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="ProjectServiceProvider"/>
            <class package="org.netbeans.spi.project" name="LookupMerger"/>
            <issue number="150194"/>
        </change>
        <change id="lookupprovider-ann">
            <api name="general"/>
            <summary>Add annotation @LookupProvider.Registration</summary>
            <version major="1" minor="21"/>
            <date day="13" month="11" year="2008"/>
            <author login="mkleint"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                  Add annotation @LookupProvider.Registration to replace registration in layer files.
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="LookupProvider"/>
            <issue number="152392"/>
        </change>

        <change id="test-single-method">
            <api name="general"/>
            <summary>Added class <code>SingleMethod</code></summary>
            <version major="1" minor="19"/>
            <date day="9" month="7" year="2008"/>
            <author login="mpetras"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                    Added class <code>SingleMethod</code>,
                    which represents identification of a single method/function
                    in a file. The new class also contains new constants
                    (<code>COMMAND_RUN_SINGLE_TEST_METHOD</code> and
                    <code>COMMAND_DEBUG_SINGLE_TEST_METHOD</code>) corresponding
                    to commands for running debugging test methods.
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="SingleMethod"/>
            <issue number="137191"/>
        </change>

        <change id="ProjectUtils.getAuxiliaryConfiguration">
            <api name="general"/>
            <summary>Added <code>ProjectUtils.getAuxiliaryConfiguration</code></summary>
            <version major="1" minor="17"/>
            <date day="9" month="6" year="2008"/>
            <author login="jglick"/>
            <compatibility addition="yes">
                <p>
                    Modules which formerly looked for <code>AuxiliaryConfiguration</code>
                    directly in project lookup are strongly encouraged to migrate to the
                    new method instead.
                </p>
            </compatibility>
            <description>
                <p>
                    A new API method was introduced to match the <code>AuxiliaryConfiguration</code>
                    SPI interface. The change simplifies caller code, provides a path for future
                    changes in the SPI, and allows project types to avoid providing an explicit
                    implementation of this SPI if the fallback implementation suffices for their needs.
                </p>
            </description>
            <class package="org.netbeans.api.project" name="ProjectUtils"/>
            <issue number="136333"/>
        </change>

        <change id="projectutils-getPreferences">
            <api name="general"/>
            <summary>Added ProjectUtils.getPreferences.</summary>
            <version major="1" minor="16"/>
            <date day="9" month="6" year="2008"/>
            <author login="jlahoda"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible">
            </compatibility>
            <description>
	        <p>
                    Added new API method <code>ProjectUtils.getPreferences</code> and new SPI interface <code>AuxiliaryProperties</code>.
		</p>
            </description>
            <class package="org.netbeans.api.project" name="ProjectUtils"/>
            <class package="org.netbeans.spi.project" name="AuxiliaryProperties"/>
            <issue number="134580"/>
        </change>
        
        <change id="lookup-provider">
            <api name="general"/>
            <summary>Added support for composing project's lookup from multiple sources.</summary>
            <version major="1" minor="12"/>
            <date day="5" month="10" year="2006"/>
            <author login="mkleint"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible">
            </compatibility>
            <description>
	        <p>
                    Added interfaces and support classes that can be used to compose the project's lookup
                    from multiple 3rd party sources. Framework for creating merged instances included. 
                    <code>LookupMerger</code> implementation for <code>Sources</code> added.
		</p>
            </description>
            <class package="org.netbeans.spi.project" name="LookupProvider"/>
            <class package="org.netbeans.spi.project" name="LookupMerger"/>
            <class package="org.netbeans.spi.project.support" name="LookupProviderSupport"/>
            <issue number="83343"/>
        </change>
        
        <change id="ProjectConfigurationProvider">
            <api name="general"/>
            <summary>Added support for project configurations</summary>
            <version major="1" minor="11"/>
            <date day="8" month="9" year="2006"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added an interface <code>ProjectConfigurationProvider</code>
                    which can be included in a project's lookup to support
                    switchable configurations / profiles.
                </p>
            </description>
            <class package="org.netbeans.spi.project" name="ProjectConfiguration"/>
            <class package="org.netbeans.spi.project" name="ProjectConfigurationProvider"/>
            <issue number="49652"/>
        </change>

        <change id="copy-move-support">
            <api name="general"/>
            <summary>Added support for project delete/copy/rename/move</summary>
            <version major="1" minor="7"/>
            <date day="22" month="8" year="2005"/>
            <author login="jlahoda"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible">
            </compatibility>
            <description>
	        <p>
                    Introduced:
                            New method <code>notifyDeleted</code> added to <code>ProjectState</code>.
                            Interfaces DataFilesProviderImplementation, DeleteOperationImplementation, CopyOperationImplementation, MoveOperationImplementation has
                            been added to support project delete/copy/rename/move.
                            Support class ProjectOperations has been added to simplify operations on compound projects.
		</p>
            </description>
            <issue number="61546"/>
        </change>
        
        <change id="markExternal-for-file-and-URIs">
            <api name="general"/>
            <summary>The FileOwnerQuery.markExternalOwner allows registration of individal files and URIs</summary>
            <version major="1" minor="5"/>
            <date day="27" month="5" year="2005"/>
            <author login="jlahoda"/>
            <compatibility addition="yes" semantic="compatible" binary="compatible">
                <p>
                    This changes add a new method <code>FileOwnerQuery.markExternalOwner(URI, FileObject, int)</code>,
                    and also extends sematics of the existing
                    <code>FileOwnerQuery.markExternalOwner(FileObject, FileObject, int)</code> method to allow registration
                    of individual files.
                </p>
            </compatibility>
            <description>
                <p>
                    It is possible to register owner of an individual file using <code>FileOwnerQuery.markExternalOwner</code>.
                    It is possible to register owner of a folder or file using URI, so the folder or file does not
                    have to exist at the time of registration.
                </p>
            </description>
            <issue number="58313"/>
        </change>
        
        <change id="rel-vers-1">
            <api name="general"/>
            <summary>Switched to major release version 1</summary>
            <version major="1" minor="3"/>
            <date day="22" month="12" year="2004"/>
            <author login="jglick"/>
            <compatibility>
                <p>
                    Clients should begin requesting the new version to avoid a warning at startup.
                </p>
            </compatibility>
            <description>
                <p>
                    To indicate that this is now considered a stable API, the major release version was
                    incremented to 1 from 0.
                </p>
            </description>
            <issue number="51468"/>
        </change>

    </changes>

    <!-- Now the surrounding HTML text and document structure: -->

    <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <==============

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE projects/projectapi/apichanges.xml

-->
    <head>
      <title>Change History for the Project API</title>
    </head>
    <body>

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

<h1>Introduction</h1>

<p>This document lists changes made to the <a href="@org-netbeans-modules-projectapi@/index.html">Project API</a>.</p>

<!-- The actual lists of changes, as summaries and details: -->
      <hr/>
      <standard-changelists module-code-name="org.netbeans.modules.projectapi/1"/>

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

    </body>
  </htmlcontents>

</apichanges>
