<?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>
    <!-- Probably should not be used much: -->
    <apidef name="search">Search API</apidef>
  </apidefs>

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

  <changes>

      <change id="SearchGroup.onStopSearch">
        <api name="search"/>
        <summary>Added method <code>SearchGroup.onStopSearch</code></summary>
        <version major="3" minor="31"/>
        <date day="2" month="9" year="2011"/>
        <author login="jhavlin"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Class <code>SearchGroup</code> now contains method 
                <code>onStopSearch</code>, that can be overriden in subclasses 
                to perform some custom operations that are needed to stop the
                search, e.g. terminate internal tasks.
            </p>
        </description>
        <class package="org.openidex.search" name="SearchGroup"/>
        <issue number="193361"/>
      </change>

       <change id="SearchUtils">
        <api name="search"/>
        <summary>Added utility class <code>Utils</code></summary>
        <version major="3" minor="20"/>
        <date day="13" month="1" year="2009"/>
        <author login="kaktus"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Class <code>Utils</code> made public with one public static method
                <code>getFileObjectsIterator(SearchInfo si)</code>. This utility
                method returns <code>Iterator</code> of <code>FileObject</code>s
                for the provided <code>SearchInfo</code>. This change simplifies
                the work with <code>SearchInfo</code> implementations.
            </p>
        </description>
        <class package="org.openidex.search" name="Utils"/>
    </change>

      <change id="SearchInfo.Files">
        <api name="search"/>
        <summary>Added interface <code>SearchInfo.Files</code></summary>
        <version major="3" minor="20"/>
        <date day="13" month="1" year="2009"/>
        <author login="kaktus"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added <code>SearchInfo.Files</code> interface which extends
                <code>SearchInfo</code> interface. It adds method
                <code>filesToSearch()</code> to provide <code>FileObject</code>s
                which should be searched. This change allows to operate <code>FileObject</code>s
                in the search mechanism instead of <code>DataObject</code>s and
                as a result improves search performance.
            </p>
        </description>
        <class package="org.openidex.search" name="SearchInfo"/>
        <issue number="134558"/>
    </change>
 
     <change id="SearchInfoFactory.createCompoundSearchInfo">
        <api name="search"/>
        <summary>Added method <code>createCompoundSearchInfo(...)</code>
                 to class <code>SearchInfoFactory</code></summary>
        <version major="3" minor="13"/>
        <date day="10" month="6" year="2007"/>
        <author login="mpetras"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Compound <code>SearchInfo</code> is a useful functionality that
                has been present in the package since the
                <code>SearchInfo</code> interface had been introduced. It just
                was not available from outside the
                <code>org.openidex.search</code> package. This change makes it
                available through a public factory method.
            </p>
        </description>
        <class package="org.openidex.search" name="SearchInfoFactory"/>
    </change>
  
     <change id="SearchHistory.ADD_TO_HISTORY">
        <api name="search"/>
        <summary>Added <code>ADD_TO_HISTORY</code> field</summary>
        <version major="3" minor="6"/>
        <date day="15" month="2" year="2005"/>
        <author login="mroskanin"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                It is necessary to fire further
                PropertyChangeEvent to fix it. (Details in the
                issue #54028)It is event ADD_TO_HISTORY, that will
                be fired after adding new SearchPattern to
                history. Old value of event would be null, new
                value would be added pattern.
                Also pattern checking before adding to history is
                a subject of the API change.            
            </p>
        </description>
        <class package="org.openidex.search" name="SearchHistory"/>
        <issue number="54028"/>
        <issue number="54451"/>
    </change>
  
     <change id="SearchHistory-SearchPattern">
        <api name="search"/>
        <summary>Added <code>SearchHistory</code> and <code>SearchPattern</code> classes</summary>
        <version major="3" minor="5"/>
        <date day="7" month="1" year="2005"/>
        <author login="mroskanin"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Editor find and replace dialog and search over files
                in explorer should have one and shareable history. Editor module should
                be notified about last selected search expression to highlight(in yellow)
                the matched patterns.
            </p>
        </description>
        <class package="org.openidex.search" name="SearchHistory"/>
        <class package="org.openidex.search" name="SearchPattern"/>
        <issue number="51964"/>
    </change>
  
     <change>
        <api name="search"/>
        <summary>Added <code>SearchInfo</code> interface
                 together with a factory class <code>SearchInfoFactory</code>
                 and interface <code>FileObjectFilter</code></summary>
        <version major="3" minor="3"/>
        <date day="13" month="8" year="2004"/>
        <author login="mpetras"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                In NetBeans 3.6, only nodes representing file folders were
                searchable. In NetBeans 4.0, there are several special views
                and nodes not representing folders. But many of these nodes
                still need to be searchable. Interface <code>SearchInfo</code>
                allows to specify how a particular node should be searched
                - simply by putting a <code>SearchInfo</code> object to the
                node's lookup.
            </p>
        </description>
        <class package="org.openidex.search" name="SearchInfo"/>
        <class package="org.openidex.search" name="SearchInfoFactory"/>
        <class package="org.openidex.search" name="FileObjectFilter"/>
        <issue number="42540"/>
        <issue number="43940"/>
    </change>
    
    <change>
        <api name="search"/>
        <summary>
            <code>SearchInfo</code>
            objects contained in <code>Project</code>s'
            lookups are now taken into account by action <em>Find in Projects...</em>
        </summary>
        <version major="3" minor="11"/>
        <date day="12" month="1" year="2007"/>
        <author login="mpetras"/>
        <compatibility modification="yes"/>  <!-- something must be "yes" -->
        <description>
            The change is not in the API itself but in the range of its usage.
            Before the change, action <em>Find in Projects...</em> did not look
            for
            <a href="@org-openidex-util@/org/openidex/search/SearchInfo.html"><code>SearchInfo</code></a>
            objects &ndash; it always searched
            projects' <a href="@org-netbeans-modules-projectapi@/org/netbeans/api/project/SourceGroup.html"><code>SourceGroup</code></a>s.
            Now the action first checks the
            <a href="@org-netbeans-modules-projectapi@/org/netbeans/api/project/Project.html#getLookup--">project's <code>Lookup</code></a>
            for presence of a <code>SearchInfo</code> object. If some
            <code>SearchInfo</code> is present, it is used for the search,
            and only if there is no <code>SearchInfo</code>,
            the project's <code>SourceGroup</code>s are searched.
        </description>
        <issue number="64392"/>
    </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 openidex/api/apichanges.xml

-->
    <head>
      <title>Change History for the Search 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>

<p>
    This document lists changes made to the <code>Search API</code>.
</p>

<!-- The actual lists of changes, as summaries and details: -->

    <hr/>

    <standard-changelists module-code-name="org.openidex.util/3"/>

    <hr/>

    <p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
