<?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="org.netbeans.modules.xml.xam">Extansible Abstract Model (XAM)</apidef>
        <!-- etc. -->
    </apidefs>

    <!-- ACTUAL CHANGES BEGIN HERE: -->
    <changes>
        
        <change id="findEndPosition">
            <api name="org.netbeans.modules.xml.xam"/>
            <summary>Method AbstractDocumentModel.prepareChangeInfo() is replaced with a new one.</summary>
            <version major="1" minor="22"/>
            <date day="11" month="12" year="2012"/>
            <author login="mkleint"/>
            <compatibility binary="compatible" source="compatible" addition="yes"/>
            <description>
                Introduced <code>DocumentComponent2</code> and <code>DocumentModelAccess2</code> to provide additional method 
                <code>findEndPosition()</code> to get the end position of the object representation in document. It's complimentary to existing <code>findPosition</code>
            </description>
            <class package="org.netbeans.modules.xml.xam.dom" name="AbstractDocumentComponent"/>
            <class package="org.netbeans.modules.xml.xam.dom" name="DocumentComponent2"/>
            <class package="org.netbeans.modules.xml.xam.dom" name="DocumentModelAccess2"/>
            <issue number="223226"/>
        </change>
        <change id="fix_issue_166177">
            <api name="org.netbeans.modules.xml.xam"/>
            <summary>Method AbstractDocumentModel.prepareChangeInfo() is replaced with a new one.</summary>
            <version major="1.11" minor="0"/>
            <date day="19" month="5" year="2010"/>
            <author login="supernikita"/>
            <compatibility binary="compatible" source="compatible" addition="yes"/>
            <description>
                The modufication is necessary for fixing issue #166177.
                The old method <code>AbstractDocumentModel.prepareChangeInfo(List)</code>
                is marked as deprecated and a new one <code>AbstractDocumentModel.prepareChangeInfo(List, List)</code> is created.
                The new one contains additional parameter <code>nsContextPathToRoot</code>, which
                is necessary for correct calculation of namespace context after
                deletion of namespace prefix. See the issue for details. 
            </description>
            <class package="org.netbeans.modules.xml.xam.dom" name="AbstractDocumentModel"/>
            <issue number="166177"/>
        </change>

        <change id="model-changes-notification">
            <api name="org.netbeans.modules.xml.xam"/>
            <summary>Two new methods to enhance model's performance</summary>
            <version major="1.6" minor="1"/>
            <date day="30" month="7" year="2009"/>
            <author login="supernikita"/>
            <compatibility binary="incompatible" source="compatible" addition="yes"/>
            <description>
                Two new methods are added:
                <ul>
                <li>{@link org.netbeans.modules.xml.xam.AbstractComponent#checkChildrenPopulated()}</li>
                <li>{@link org.netbeans.modules.xml.xam.AbstractComponent#getChildrenCount()}</li>
                </ul>
                <p>
		        They are intended to be used instead of getChildren() in cases 
                when the children's list isn't required. It helps impove performance.
                </p>
            </description>
            <class package="org.netbeans.modules.xml.xam" name="AbstractComponent"/>
            <issue number="169510"/>
        </change>

    </changes>

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

    <htmlcontents>
<!-- Generated from apichanges.xml -->
    <head>
      <title>Change History for the Extansible Abstract Model (XAM)</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

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

<h1>Introduction</h1>

<p>This document lists changes made to the <a href="@TOP@/overview-summary.html">Extansible Abstract Model (XAM)</a>.</p>
      <hr/>
      <standard-changelists module-code-name="org.netbeans.modules.xml.xam/1"/>
      <hr/><p>@FOOTER@</p>
    </body>
  </htmlcontents>

</apichanges>
