<?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">

<apichanges>

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

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

    <changes>
        <change id="unpack200">
            <api name="general"/>
            <summary>Allow alternative unpack200 implementation</summary>
            <version major="1" minor="65"/>
            <date day="23" month="8" year="2020"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                    <code>OperationContainer</code> has a new <code>setUnpack200</code>
                    method. There is also a preference also used by
                    upgrader - <a href="@TOP@/architecture-summary.html#preferences-unpack200">read more</a>.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="OperationContainer"/>
        </change>
        <change id="enable-trusted-update-centers">
            <api name="general"/>
            <summary>KeyStoreProviders can now report which trustlevel they intent to supply</summary>
            <version major="1" minor="62"/>
            <date day="4" month="11" year="2019"/>
            <author login="matthiasblaesing"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                    The UpdateUnitProvider can now be declared trusted. If
                    UpdateItems are provided by a trusted UpdateUnitProvider
                    and can be linked to it (for example because the provider provides
                    checksums in the catalog), they are considered trusted by the Autoupdate
                    mechanism and will not trigger certificate warnings.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="OperationContainer"/>
        </change>
        <change id="keystores-for-validation">
            <api name="general"/>
            <summary>KeyStoreProviders can now report which trustlevel they intent to supply</summary>
            <version major="1" minor="61"/>
            <date day="4" month="11" year="2019"/>
            <author login="matthiasblaesing"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                    The validation of signatures of NBMs was done by checking if at least a partial certificate chain was present
                    and if that chain was valid (i.e. not expired, not revoked). Instead of relying on this partial check this
                    version bases the verification on a list of trusted certificates, similar to the existing KeyStoreProvider.
                </p>
                <p>
                    The existing KeyStoreProviders provide Certificates, that are fully trusted. The new getTrustLevel method
                    allows a KeyStoreProvider to provide certificate for the new, lower trusted level. In addition to the to
                    levels TRUST and VALIDATE, two variants: TRUST_CA and VALIDATE_CA are introduced. Certificates provided with
                    that level are expected to be CA certificates and they are only trusted if a `CertPathValidator` validates
                    the chain.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="OperationContainer"/>
        </change>
        <change id="missing-elements">
            <api name="general"/>
            <summary>Report parts of a feature which is not installed yet</summary>
            <version major="1" minor="57"/>
            <date day="30" month="11" year="2018"/>
            <author login="sdedic"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" semantic="compatible" source="compatible"/>
            <description>
                A distributed feature may list a module, which is only available on some update center, in NB IDE case because of
                licensing issues. This token must be reported so the as part of the UpdateElement and Operation so the caller may
                initiate the download operation.
            </description>
            <class package="org.netbeans.api.autoupdate" name="OperationContainer"/>
        </change>
        <change id="visible-ancestor">
            <api name="general"/>
            <summary>Find a visible ancestor of UpdateUnit</summary>
            <version major="1" minor="37"/>
            <date day="31" month="10" year="2012"/>
            <author login="jrechtacek"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                    Added a method {@link org.netbeans.api.autoupdate.UpdateUnit#getVisibleAncestor} which returns a visible plugin
                    which depending upon this unit. Returns a unit if this unit is installed in the system and some of visible
                    units depending upon this one, otherwise returns null.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="UpdateUnit"/>
            <issue number="190246"/>
        </change>
        <change id="preffered-update">
            <api name="general"/>
            <summary>Mark an update as preferred just if needed</summary>
            <version major="1" minor="33"/>
            <date day="16" month="5" year="2012"/>
            <author login="jrechtacek"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                    Added a <code>preferredupdate</code> attribute into <code>Update Center Descriptor</code>
                    to specify if an update has to be installed before other updates or not. This flag is <b>off</b> as default.
                </p>
            </description>
            <class package="org.netbeans.spi.autoupdate" name="UpdateItem"/>
            <issue number="211734"/>
        </change>
        <change id="content-description">
            <api name="general"/>
            <summary>Added a method to get a descprition of content of Upadate Center</summary>
            <version major="1" minor="33"/>
            <date day="16" month="5" year="2012"/>
            <author login="jrechtacek"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                    {@link org.netbeans.api.autoupdate.UpdateUnitProvider#getContentDescription} returns
                    a description of content staging by this provider. The description might contains HTML tags e.g. HTML Links.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="UpdateUnitProvider"/>
            <issue number="211741"/>
        </change>
        <change id="get-license-id">
            <api name="general"/>
            <summary>Added a method to get ID of license agreement</summary>
            <version major="1" minor="33"/>
            <date day="16" month="5" year="2012"/>
            <author login="jrechtacek"/>
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" semantic="compatible" source="compatible"/>
            <description>
                <p>
                    Added a method {@link org.netbeans.api.autoupdate.UpdateElement#getLicenseId}
                    to get ID of license agreement if the <code>UpdateElement</code> has a copyright.
                </p>
                <p>
                    This ID could be stored somewhere once an user approves the license and
                    will not be asked for approval again the same license ID.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="UpdateElement"/>
            <issue number="211736"/>
        </change>
        <change id="check-write-permission">
            <api name="general"/>
            <summary>Check write permissions to installation directory</summary>
            <version major="1" minor="33"/>
            <date day="16" month="5" year="2012"/>
            <author login="jrechtacek"/>
            <compatibility addition="yes" binary="compatible" deletion="no"
                deprecation="yes" semantic="compatible" source="compatible"
            />
            <description>
                <p>
                    <code>InstallSupport</code> find out the right directory where a plugin
                    should be installed. After that it checks if an user has privilege to write there.
                    In the case a lack of write permission, throws
                    {@link org.netbeans.api.autoupdate.OperationException.WRITE_PERMISSION}.
                </p>
                <p>
                    Beside this it allows to write into
                    <code>userdir</code> as a fallback in the case of insufficient privilege.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="InstallSupport"/>
            <class package="org.netbeans.api.autoupdate" name="OperationException"/>
            <issue number="211777"/>
        </change>
        <change id="nbm-external-size">
            <api name="general"/>
            <summary>Allowing to specify external NBM content size</summary>
            <version major="1" minor="32"/>
            <date day="14" month="5" year="2012"/>
            <author login="jlahoda"/>
            <compatibility addition="yes" />
            <description>
                <p>
                    You can now specify the size of the external NBM content in the <code>.external</code> file
                    by using <code>SIZE:</code> property (e.g. <code>SIZE:42</code>). The size will then be incorporated
                    in the download size of the NBM.
                </p>
            </description>
            <issue number="212068"/>
        </change>
        <change id="nbm-external">
            <api name="general"/>
            <summary>External NBM contents</summary>
            <version major="1" minor="24"/>
            <date day="10" month="2" year="2011"/>
            <author login="jtulach"/>
            <compatibility addition="yes" />
            <description>
                <p>
                    You can now ask that publicly downloadable files be included in an NBM.
                    Just replace <code>netbeans/file</code> with a text file <code>netbeans/file.external</code>
                    with lines:
                </p>
                <ol>
                    <li><code>CRC:123456789</code> to specify an expected CRC-32 checksum (nonnegative decimal format)</li>
                    <li><code>URL:http://.../...</code> to specify a download location (may be repeated to offer alternatives)</li>
                </ol>
                <p>
                    You can embed system properties in a URL using Ant-like syntax: <samp>http://.../feature-for-${java.specification.version}.nbm</samp>
                </p>
                <p>
                    The <code>&lt;makenbm&gt;</code> Ant task will automatically
                    avoid packing the actual file if the <code>*.external</code>
                    variant is also in the input cluster.
                </p>
                <p>
                    For convenience, the <code>org.netbeans.modules.maven.embedder</code>
                    module (if present) can also handle URLs of the forms
                    <code>m2:/org.grp:art:1.0:jar</code> or <code>m2:/org.grp:art:1.0:jar:javadoc</code>
                    which can take advantage of the local repository as a cache.
                </p>
            </description>
            <issue number="195041"/>
        </change>
        <change id="custom-icons">
            <api name="general"/>
            <summary>Icons for update centers</summary>
            <version major="1" minor="23"/>
            <date day="10" month="1" year="2011"/>
            <author login="jtulach"/>
            <compatibility addition="yes" binary="compatible" deletion="no"
                deprecation="yes" semantic="compatible" source="compatible"
            />
            <description>
                <p>
                Define icon when specifying an update center using
                <code>categoryIconBase</code> attribute.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="UpdateElement"/>
            <class package="org.netbeans.api.autoupdate" name="UpdateUnitProvider"/>
            <issue number="183778"/>
        </change>
        <change id="source-group-modifier">
            <api name="general"/>
            <summary>Feature enabled only when all its dependencies are enabled</summary>
            <version major="1" minor="8"/>
            <date day="15" month="4" year="2009"/>
            <author login="jtulach"/>
            <compatibility semantic="incompatible"/>
            <description>
                <p>
                    The behaviour of <code>UpdateItem.createFeature().getInstalled().isEnabled()</code>
                    has been changed. Now it returns <code>true</code> only if
                    all dependencies are enabled.
                </p>
            </description>
            <class package="org.netbeans.spi.autoupdate" name="UpdateItem"/>
            <issue number="162673"/>
        </change>

        <change id="new-operation-container">
            <api name="general"/>
            <summary>New operation type introduced together with method for create appropriate container</summary>
            <version major="1" minor="11"/>
            <date day="19" month="8" year="2009"/>
            <author login="dlipin"/>
            <compatibility semantic="compatible"/>
            <description>
                <p>
                    New operation type - <code>OperationSupport.OperationType.INTERNAL_UPDATE</code> is introduced.
                    This operation can be used to find out elements which have updates and
                    which the particular element has the dependency on.
                </p>
            </description>
            <class package="org.netbeans.api.autoupdate" name="OperationSupport"/>
            <class package="org.netbeans.api.autoupdate" name="OperationContainer"/>
            <issue number="141714"/>
        </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 Autoupdate Services 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 <a href="@org-netbeans-modules-autoupdate-services@/index.html">Autoupdate Services API</a>.</p>

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

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

    </body>
  </htmlcontents>

</apichanges>
