<?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 api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [
<!ENTITY api-questions SYSTEM "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml">
]>

<api-answers
    question-version="1.29"
    author="dlipin@netbeans.org"
>

    &api-questions;


    <!--
    <question id="arch-overall" when="init">
    Describe the overall architecture.
    <hint>
    What will be API for
    <a href="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi">
    clients and what support API</a>?
    What parts will be pluggable?
    How will plug-ins be registered? Please use <code>&lt;api type="export"/&gt;</code>
    to describe your general APIs and specify their
    <a href="http://openide.netbeans.org/tutorial/api-design.html#category-private">
    stability categories</a>.
    If possible please provide simple diagrams.
    </hint>
    </question>
    -->
    <answer id="arch-overall">
        <p>
            AutoUpdate feature provides several services to IDE: <b>download and install</b> available updates of installed modules,
            <b>search and install</b> new features from subscribed Update Centers, <b>browsing and manipulating</b>
            the modules in IDE installation and handling of module <b>localizations</b>.
            To use the services have to AutoUpdate supply a GUI to easy manipulating. AutoUpdate feature has to care about
            registration Update Centers as well.
        </p>
        <p>Several several services means that Autoupdate feature contain several <b>parts of functionality</b>.
            These part of AutoUpdate should communicate each other. Moreover, some interface <b>should be public</b>.
            One of them is <b>SPI</b> (<code><api type="export" category="official" group="java" name="org.netbeans.spi.autoupdate" url="@TOP@/overview-summary.html"/></code>) for Update Center backend - allows to create and subscribe the Update Center in IDE.
            Next there should be a <b>API</b> (<code><api type="export" category="official" group="java" name="org.netbeans.api.autoupdate" url="@TOP@/overview-summary.html"/></code>) which communicate to rest of IDE and provide some services what is useful for
            NB installers, a non-visual client of Auto Update which make possible to use Auto Update from command line
            as standalone application in "admin" mode. All of them needs a APIs. This document describes proposed APIs,
            supposed use-cases and design of interaction Auto Update parts each other.
            <br />
            <img class="inline" src="@TOP@/org/netbeans/api/autoupdate/doc-files/schema.png" alt="schema.png" />
        </p>
        <b>Naming</b>: <i>What is feature?</i> Group of modules which are close connected together and cannot acts separately.
        I think that <b>feature</b> is common understand notation
        and fits its matter we will use it from now on.
    </answer>



    <!--
    <question id="arch-quality" when="init">
    How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
    of your code be tested and
    how are future regressions going to be prevented?
    <hint>
    What kind of testing do
    you want to use? How much functionality, in which areas,
    should be covered by the tests? How you find out that your
    project was successful?
    </hint>
    </question>
    -->
    <answer id="arch-quality">
        <p>
            The API will be unit tested, of course. The test over-all will be done by API clients, Autoupdate UI at first
            and CLI client of Autoupdate Services, which is projected as well.
        </p>
    </answer>



    <!--
    <question id="arch-time" when="init">
    What are the time estimates of the work?
    <hint>
    Please express your estimates of how long the design, implementation,
    stabilization are likely to last. How many people will be needed to
    implement this and what is the expected milestone by which the work should be
    ready?
    </hint>
    </question>
    -->
    <answer id="arch-time">
        <p>
            NB6.0/M11.
        </p>
    </answer>



    <!--
    <question id="arch-usecases" when="init">
    <hint>
    Content of this answer will be displayed as part of page at
    http://www.netbeans.org/download/dev/javadoc/usecases.html
    You can use tags &lt;usecase name="name&gt; regular html description &lt;/usecase&gt;
    and if you want to use an URL you can prefix if with @TOP@ to begin
    at the root of your javadoc
    </hint>

    Describe the main <a href="http://openide.netbeans.org/tutorial/api-design.html#usecase">
    use cases</a> of the new API. Who will use it under
    what circumstances? What kind of code would typically need to be written
    to use the module?
    </question>
    -->
    <answer id="arch-usecases">
        <p>
            <usecase id="browse" name="Browse all available units">
                Give overview of IDE installation to users, it involve overview of installed modules (grouped together as feature),
                overview of available updates, overview of available new features.
                The API can return list of <code>UpdateUnit</code> which describes all instances of unit, e.g. installation in IDE,
                all its available updates, optionlly its backup instance.
                <code>UpdateUnit</code> can represent either a feature (e.g. group
                of modules), a single module or a localization.
                <p></p>
                <i>Proposed usage of API:</i> Call <code>List&lt;UpdateUnit&gt; UpdateManager.getDefault().getUpdateUnits()</code>
                <!-- JST:UpdateManager cannot be singleton because it has mutable
                  state with apply method. Imho, there should be UpdateManager.create(...).
                  The arguments could handle various requirements, like
                  create(FEATURE_LEVEL) or create(DETAILED_LEVEL), etc.
                  -->
            </usecase>
            <usecase id="browse-by-style" name="Browse all units by chosen style (e.g. modules, features, localization)">
                Sometimes there can be a need to get overview of units
                by chosen style, e.g. feature, module or localization.
                <p></p>
                <i>Proposed usage of API:</i> Call <code>List&lt;UpdateUnit&gt; UpdateManager.getDefault().getUpdateUnits(UpdateStyle style)</code>
            </usecase>
            <usecase id="browse-installed" name="Browse installed modules">
                When an API client needs to get overview of installed modules.
                <p></p>
                <i>Proposed usage of API:</i> Call <code>List&lt;UpdateUnit&gt; UpdateManager.getDefault().getUpdateUnits(UpdateStyle style)</code>
                and filter units which haven't been installed yet.
                <!-- JST: The comment by Tonda was that this may be too slow.
                  This may turn true, then I suggest to have another argument
                  to the UpdateManager.create(...) method - "correctness":
                    - LOCAL - only return what is available locally
                    - PREFER_CACHES - if caches exists read from them, but
                       if not, go and connect to the websites
                    - EXACT - always try to get the most up-to-date info available,
                       e.g. do not use caches, connect to the web site
                 -->
            </usecase>
            <usecase id="search-by-attribute" name="Search for new functionality">
                Someone is searching for some functionality which can be
                installed into IDE. It needs a set of available <code>UpdateUnit</code>s
                which are applicable to active IDE. <code>UpdateManager</code> will
                search all available <code>UpdateUnit</code> given attribute.
            </usecase>
            <a name="install-new-functionality"></a>
            <usecase id="install-new-functionality" name="Install new functionality">
                An client needs to install new functionality into the IDE installation.
                She knows what unit and what version wants to install.
                Needs to identify if the functionality is ready to install,
                resolve its dependencies, identify possible problems and locate
                other unit what have to be installed together with asked functionality.
                <p></p>
                <i>Proposed usage of API:</i>
                <ul>
                    <li>Client needs install NetBeans module in required minimal specification version.</li>
                    <li>Find corresnponing <code>UpdateUnit</code> by module's code name and finds <code>UpdateElement</code> what fits the required version.</li>
                    <li>So, the client now have <code>UpdateElement</code> which wants to install.</li>
                    <li>Take the <code>OperationContainer</code> for install, e.g. <code>OperationContainer.createForInstall</code></li>
                    <li>Adds the element into container <code>OperationContainer.add(UpdateElement)</code> and gets <code>OperationInfo</code> for that operation.</li>
                    <li>Identify other required elements: <code>OperationInfo.getRequiredElements()</code></li>
                    <li>Check if there is no broken dependencies: <code>OperationInfo.getBrokenDependency()</code> Note: if there are some broken dependencies then operation cannot continue.</li>
                    <li>If all okay, then install the unit: <code>OperationContainer.doOperation()</code></li>
                </ul>
            </usecase>
            <usecase id="update-installed" name="Update of installed unit">
                A client needs to update some unit of functionality which is
                already installed. She knows what unit and what update element (by version) wants to install.
                Needs to identify possible problems with update install, resolve its dependencies, identify possible problems and locate
                other unit what have to be installed together with asked functionality.
                <p></p>
                <i>Proposed usage of API:</i> See above <a href="#install-new-functionality">Install new functionality</a>
            </usecase>
            <usecase id="uninstall-unit" name="Uninstall functionality">
                An client needs to uninstall some functionality from IDE installation. She knows what unit wants to uninstall.
                Needs to identify if the functionality is ready to uninstall, resolve its dependencies, identify possible problems and locate
                other unit what will be disabled together.
                <p></p>
                <i>Proposed usage of API:</i>
                <ul>
                    <li>Client knows <code>UpdateElement</code> which wants to uninstall.</li>
                    <li>Take the <code>OperationContainer</code> for uninstall, e.g. <code>OperationContainer.createForUninstall</code></li>
                    <li>Adds the element into container <code>OperationContainer.add(UpdateElement)</code> and gets <code>OperationInfo</code> for that operation.</li>
                    <li>Identify other required elements: <code>OperationInfo.getRequiredElements()</code></li>
                    <li>If all okay, then uninstall the unit: <code>OperationContainer.doOperation()</code></li>
                </ul>
            </usecase>
            <a name="disable-unit"/>
            <usecase id="disable-unit" name="Switch off functionality">
                An client needs to switch off (disable) some functionality in IDE installation. Needs to resolve its dependencies,
                identify possible problems and locate other unit what will be disabled together.
                <p></p>
                <i>Proposed usage of API:</i>
                <ul>
                    <li>Client knows <code>UpdateElement</code> which wants to uninstall.</li>
                    <li>Take the <code>OperationContainer</code> for disable, e.g. <code>OperationContainer.createForDisable</code></li>
                    <li>Adds the element into container <code>OperationContainer.add(UpdateElement)</code> and gets <code>OperationInfo</code> for that operation.</li>
                    <li>Identify other required elements: <code>OperationInfo.getRequiredElements()</code></li>
                    <li>If all okay, then disable the unit: <code>OperationContainer.doOperation()</code></li>
                </ul>
            </usecase>
            <usecase id="enable-unit" name="Switch on functionality">
                Like <a href="#disable-unit">Switch off functionality</a> An client needs to switch on (enable) some functionality in IDE installation.
            </usecase>
            <usecase id="rollback-of-update" name="Rollback of previous update">
                Sometimes an client needs to rollback of installed update of unit to previous version.
                Needs to resolve its dependencies, identify possible problems and locate
                other unit what are affected by rollback.
                <p></p>
                <i>Proposed usage of API:</i> Like above  <a href="#disable-unit">Switch off functionality</a>
                <ul>
                    <li>Client knows <code>UpdateElement</code> which wants to uninstall.</li>
                    <li>Take the <code>OperationContainer</code> for enable, e.g. <code>OperationContainer.createForEnable</code></li>
                    <li>Adds the element into container <code>OperationContainer.add(UpdateElement)</code> and gets <code>OperationInfo</code> for that operation.</li>
                    <li>Identify other required elements: <code>OperationInfo.getRequiredElements()</code></li>
                    <li>If all okay, then enable the unit: <code>OperationContainer.doOperation()</code></li>
                </ul>
            </usecase>
            <usecase id="resolve-problems" name="Resolve problems what accrued while processing operation">
                <code>OperationContainer</code> and <code>OperationInfo</code> identifies some problems,
                i.e. broken dependencies, needs to install more units, the operation causes disable some
                other modules and so on. The client can use this information to consult these with end-user.
            </usecase>
            <usecase id="make-ide-up-to-date" name="Make IDE up-to-date">
                Sometimes need to make whole IDE installation up-to-date. Find all available updates of installed units and install the latest available version.
                It is covered by previous use-cases.
            </usecase>
            <usecase id="browse-update-providers" name="Get all subscriptions to Update Center">
                Show me all registered subscriptions to Update Center, e.g. get me list of <code>UpdateUnitProvider</code>.
                <i>Proposed usage of API:</i> Call <code>UpdateUnitProviderFactory.getUpdateUnitProviders()</code>
            </usecase>
            <usecase id="add-update-provider" name="Subscribe new Update Center">
                If there is a new Update Center which is not already subscribed into IDE user wants to subscribe new one Update
                Center which will be connected from that time in periodically checks.
                There should be a factory where subscribe new one Update Center, known types of Update Center have own factory method.
                <i>Proposed usage of API:</i> Simply call <code>UpdateUnitProviderFactory.create()</code> which creates and registered
                new one subscription in the system and will be used from that time in the future.
            </usecase>
            <usecase id="custom-update-provider" name="Customization of Update Center subscription">
                An user wants to enable or disable of Update Center subscription.
                <i>Proposed usage of API:</i> Simply call <code>UpdateUnitProviderFactory.setEnable(UpdateUnitProvider, boolean)</code>.
            </usecase>
            <usecase id="remove-update-provider" name="Unsubscribe of some Update Center">
                Simple unsubscribe a chosen Update Center from the system. Need to know of chosen Update Provider Id.
                This Update Center won't be checked anymore.
                <i>Proposed usage of API:</i> Simply call <code>UpdateUnitProviderFactory.remove(Id)</code>.
            </usecase>
            <usecase id="refresh-content" name="Refresh content of subscribed Update Center">
                The content of Update Provider is cached and the system works across there caches. There is a cache per each
                Update Center subscription. The caches are refreshed periodically by the system. But, sometime an user wants to
                call refresh manually.
                <i>Proposed usage of API:</i> Simply call <code>UpdateUnitProvider.refresh()</code>.
            </usecase>
            <usecase id="specify-target-cluster" name="Specify the cluster where to install">TBD</usecase>
            <usecase id="get-installed-files" name="Get all installed files of given unit">TBD</usecase>
        </p>
    </answer>



    <!--
    <question id="arch-what" when="init">
    What is this project good for?
    <hint>
    Please provide here a few lines describing the project,
    what problem it should solve, provide links to documentation,
    specifications, etc.
    </hint>
    </question>
    -->
    <answer id="arch-what">
        Provides the APIs and SPIs to support the AutoUpdate feature.
    </answer>



    <!--
    <question id="arch-where" when="impl">
    Where one can find sources for your module?
    <hint>
    Please provide link to the CVS web client at
    http://www.netbeans.org/download/source_browse.html
    or just use tag defaultanswer generate='here'
    </hint>
    </question>
    -->
    <answer id="arch-where">
        <defaultanswer generate='here' />
    </answer>



    <!--
    <question id="compat-deprecation" when="init">
    How the introduction of your project influences functionality
    provided by previous version of the product?
    <hint>
    If you are planning to deprecate/remove/change any existing APIs,
    list them here accompanied with the reason explaining why you
    are doing so.
    </hint>
    </question>
    -->
    <answer id="compat-deprecation">
        <p>
            Replacement of <code>Autoupdate</code> module. Autoupdate didn't provide
            any official API in previous releases, the ad-hoc usage of <code>Autoupdate</code> module
            will be covered of proposed API.
            <br></br>
            The proposed module will keep using structure of <code>NBM</code>, e.g. these APIs
            <api name="catalog-dtd" type="export" group="dtd" category="stable" url="@TOP@/org/netbeans/spi/autoupdate/doc-files/autoupdate-catalog-2_4.dtd"/>
            <api name="info-dtd" type="export" category="stable" group="dtd" url="@TOP@/org/netbeans/spi/autoupdate/doc-files/autoupdate-info-2_4.dtd"/>
            <br></br>
            Also registration of Update Centers in the layer will work after.
            <br></br>
            The module provides <code>Unique ID</code> to tracking of active users.
            <api name="unique-id" category="stable" group="preferences" type="export"/>
            <br></br>
            In module's preferences are stored properties what <code>UpdateUnitProvider</code> are enabled or disabled and when has been connected at the last time.
            <api name="enable-update-provider" category="private" group="preferences" type="export"/>
            <api name="last-check-of-provider" category="private" group="preferences" type="export"/>
        </p>
    </answer>



    <!--
    <question id="compat-i18n" when="impl">
    Is your module correctly internationalized?
    <hint>
    Correct internationalization means that it obeys instructions
    at <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/i18n-branding.html">
    NetBeans I18N pages</a>.
    </hint>
    </question>
    -->
    <answer id="compat-i18n">
        <p>
            XXX no answer for compat-i18n
        </p>
    </answer>



    <!--
    <question id="compat-standards" when="init">
    Does the module implement or define any standards? Is the
    implementation exact or does it deviate somehow?
    </question>
    -->
    <answer id="compat-standards">
        <p>
            No.
        </p>
    </answer>



    <!--
    <question id="compat-version" when="impl">
    Can your module coexist with earlier and future
    versions of itself? Can you correctly read all old settings? Will future
    versions be able to read your current settings? Can you read
    or politely ignore settings stored by a future version?

    <hint>
    Very helpful for reading settings is to store version number
    there, so future versions can decide whether how to read/convert
    the settings and older versions can ignore the new ones.
    </hint>
    </question>
    -->
    <answer id="compat-version">
        <p>
            XXX no answer for compat-version
        </p>
    </answer>



    <!--
    <question id="dep-jre" when="final">
    Which version of JRE do you need (1.2, 1.3, 1.4, etc.)?
    <hint>
    It is expected that if your module runs on 1.x that it will run
    on 1.x+1 if no, state that please. Also describe here cases where
    you run different code on different versions of JRE and why.
    </hint>
    </question>
    -->
    <answer id="dep-jre">
        <p>
            XXX no answer for dep-jre
        </p>
    </answer>



    <!--
    <question id="dep-jrejdk" when="final">
    Do you require the JDK or is the JRE enough?
    </question>
    -->
    <answer id="dep-jrejdk">
        <p>
            XXX no answer for dep-jrejdk
        </p>
    </answer>



    <!--
    <question id="dep-nb" when="init">
    What other NetBeans projects and modules does this one depend on?
    <hint>
    Depending on other NetBeans projects influnces the ability of
    users of your work to customize their own branded version of
    NetBeans by enabling and disabling some modules. Too
    much dependencies restrict this kind of customization. If that
    is your case, then you may want to split your functionality into
    pieces of autoload, eager and regular modules which can be
    enabled independently. Usually the answer to this question
    is generated from your <code>project.xml</code> file, but
    if it is not guessed correctly, you can suppress it by
    specifying &lt;defaultanswer generate="none"/&gt; and
    write here your own. Please describe such projects as imported APIs using
    the <code>&lt;api name="identification" type="import or export" category="stable" url="where is the description" /&gt;</code>.
    By doing this information gets listed in the summary page of your
    javadoc.
    </hint>
    </question>
    -->
    <answer id="dep-nb">
        <defaultanswer generate="none" />
        <ul>
            <li><api type='import' group='java' category='official' name='org.netbeans.api.progress' url='../org-netbeans-api-progress/overview-summary.html' >
                    The module is needed for compilation.

                    The module is used during runtime.

                    Specification version
                    1.9
                    is required.
                </api>
            </li>
            <li><api type='import' group='java' category='friend' name='org.netbeans.bootstrap'>
                    The module is needed for compilation.

                    The module is used during runtime.

                    Specification version
                    2.6
                    is required.
                </api>
            </li>
            <li><api type='import' group='java' category='friend' name='org.netbeans.core.startup' >
                    The module is needed for compilation.

                    The module is used during runtime.

                    Specification version
                    1.9
                    is required.
                </api>
            </li>
            <li><api type='import' group='java' category='official' name='org.openide.filesystems' url='../org-openide-filesystems/overview-summary.html' >
                    The module is needed for compilation.

                    The module is used during runtime.

                    Specification version
                    7.0
                    is required.
                </api>
            </li>
            <li><api type='import' group='java' category='official' name='org.openide.modules' url='../org-openide-modules/overview-summary.html' >
                    The module is needed for compilation.

                    The module is used during runtime.

                    Specification version
                    7.2
                    is required.
                </api>
            </li>
            <li><api type='import' group='java' category='official' name='org.openide.util' url='../org-openide-util/overview-summary.html' >
                    The module is needed for compilation.

                    The module is used during runtime.

                    Specification version
                    7.5
                    is required.
                </api>
            </li>
            <li><api type='import' group='java' category='official' name='org.openide.windows' url='../org-openide-windows/overview-summary.html' >
                    The module is needed for compilation.

                    The module is used during runtime.

                    Specification version
                    6.15
                    is required.
                </api>
            </li>
        </ul>
    </answer>



    <!--
    <question id="dep-non-nb" when="init">
    What other projects outside NetBeans does this one depend on?

    <hint>
    Depending on 3rd party libraries is always problematic,
    especially if they are not open source, as that complicates
    the licensing scheme of NetBeans. Please enumerate your
    external dependencies here, so it is correctly understood since
    the begining what are the legal implications of your project.
    Also please note that
    some non-NetBeans projects are packaged as NetBeans modules
    (see <a href="http://libs.netbeans.org/">libraries</a>) and
    it is preferred to use this approach when more modules may
    depend and share such third-party libraries.
    </hint>
    </question>
    -->
    <answer id="dep-non-nb">
        <p>
            None.
        </p>
    </answer>



    <!--
    <question id="dep-platform" when="init">
    On which platforms does your module run? Does it run in the same
    way on each?
    <hint>
    If you plan any dependency on OS or any usage of native code,
    please describe why you are doing so and describe how you envision
    to enforce the portability of your code.
    Please note that there is a support for <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-os-specific">OS conditionally
    enabled modules</a> which together with autoload/eager modules
    can allow you to enable to provide the best OS aware support
    on certain OSes while providing compatibility bridge on the not
    supported ones.
    Also please list the supported
    OSes/HW platforms and mentioned the lovest version of JDK required
    for your project to run on. Also state whether JRE is enough or
    you really need JDK.
    </hint>
    </question>
    -->
    <answer id="dep-platform">
        <p>
            All platforms.
        </p>
    </answer>



    <!--
    <question id="deploy-dependencies" when="final">
    What do other modules need to do to declare a dependency on this one,
    in addition to or instead of the normal module dependency declaration
    (e.g. tokens to require)?
    <hint>
    Provide a sample of the actual lines you would add to a module manifest
    to declare a dependency, for example OpenIDE-Module-Requires: some.token.
    If other modules should not depend on this module, or should just use a
    simple regular module dependency, you can just answer "nothing". If you
    intentionally expose a semistable API to clients using implementation
    dependencies, you should mention that here (but there is no need to give
    an example of usage).
    </hint>
    </question>
    -->
    <answer id="deploy-dependencies">
        <defaultanswer generate="here"/>
    </answer>



    <!--
    <question id="deploy-jar" when="impl">
    Do you deploy just module JAR file(s) or other files as well?
    <hint>
    Usually a module consist of one JAR file (perhaps with Class-Path
    extensions) and also a configuration file that enables it. If you
    have any other files, use
    &lt;api group="java.io.File" name="yourname" type="export" category="friend"&gt;...&lt;/api&gt;
    to define the location, name and stability of your files (of course
    changing "yourname" and "friend" to suit your needs).

    If it uses more than one JAR, describe where they are located, how
    they refer to each other.
    If it consist of module JAR(s) and other files, please describe
    what is their purpose, why other files are necessary. Please
    make sure that installation/uninstallation leaves the system
    in state as it was before installation.
    </hint>
    </question>
    -->
    <answer id="deploy-jar">
        <p>
            XXX no answer for deploy-jar
        </p>
    </answer>



    <!--
    <question id="deploy-nbm" when="impl">
    Can you deploy an NBM via the Update Center?
    <hint>
    If not why?
    </hint>
    </question>
    -->
    <answer id="deploy-nbm">
        <p>
            XXX no answer for deploy-nbm
        </p>
    </answer>



    <!--
    <question id="deploy-packages" when="init">
    Are packages of your module made inaccessible by not declaring them
    public?

    <hint>
    By default NetBeans build harness treats all packages are private.
    If you export some of them - either as public or friend packages,
    you should have a reason. If the reason is described elsewhere
    in this document, you can ignore this question.
    </hint>
    </question>
    -->
    <answer id="deploy-packages">
        <p>
            Autoupdate UI will depends on this API, next one client of this API
            would be NetBeans installer.
            Modules which want to declare own Update Provider (aka Update Center)
            depends on Autoupdate SPI.
        </p>
    </answer>



    <!--
    <question id="deploy-shared" when="final">
    Do you need to be installed in the shared location only, or in the user directory only,
    or can your module be installed anywhere?
    <hint>
    Installation location shall not matter, if it does explain why.
    Consider also whether <code>InstalledFileLocator</code> can help.
    </hint>
    </question>
    -->
    <answer id="deploy-shared">
        <p>
            XXX no answer for deploy-shared
        </p>
    </answer>



    <!--
    <question id="exec-ant-tasks" when="impl">
    Do you define or register any ant tasks that other can use?

    <hint>
    If you provide an ant task that users can use, you need to be very
    careful about its syntax and behaviour, as it most likely forms an
    API for end users and as there is a lot of end users, their reaction
    when such API gets broken can be pretty strong.
    </hint>
    </question>
    -->
    <answer id="exec-ant-tasks">
        <p>
            XXX no answer for exec-ant-tasks
        </p>
    </answer>



    <!--
    <question id="exec-classloader" when="impl">
    Does your code create its own class loader(s)?
    <hint>
    A bit unusual. Please explain why and what for.
    </hint>
    </question>
    -->
    <answer id="exec-classloader">
        <p>
            XXX no answer for exec-classloader
        </p>
    </answer>



    <!--
    <question id="exec-component" when="impl">
    Is execution of your code influenced by any (string) property
    of any of your components?

    <hint>
    Often <code>JComponent.getClientProperty</code>, <code>Action.getValue</code>
    or <code>PropertyDescriptor.getValue</code>, etc. are used to influence
    a behavior of some code. This of course forms an interface that should
    be documented. Also if one depends on some interface that an object
    implements (<code>component instanceof Runnable</code>) that forms an
    API as well.
    </hint>
    </question>
    -->
    <answer id="exec-component">
        <api name="InitialTab" category="friend" group="property" type="export">
            <p>
            The associated module autoupdate.ui provides possibility to open plugin manager dialog (<code>PluginManagerUI</code>) with the specified tab.
            That is controlled by setting this string property to one of the following values:
            </p>
            <ul>
                <li>update</li>
                <li>available</li>
                <li>local</li>
                <li>installed</li>
            </ul>
            <p>
            If property is not set (as default) then default tab is choosen due to the UI spec.
            </p>
            <i>Proposed usage of API:</i>
            <pre>
final FileObject fo = FileUtil.getConfigFile("Actions/System/org-netbeans-modules-autoupdate-ui-actions-PluginManagerAction.instance");
CallableSystemAction action = (CallableSystemAction) DataObject.find(fo).getCookie(InstanceCookie.class).instanceCreate();
action.putValue("InitialTab", "installed");
action.performAction();
            </pre>
        </api>
        <api name="Show-In-AutoUpdate-Client" category="stable" group="property" type="export">
            Each module can control whether it shall be visible in a UI
            that presents updates, installed modules, etc. This can be done
            by defining <code>OpenIDE-Module-Show-In-AutoUpdate-Client: false</code>
            (or <code>true</code>) in its own
            <a href="@org-openide-modules@/org/openide/modules/doc-files/api.html#how-manifest">manifest</a>.
            This attribute shall take precedence over
            any default deduced by the UI (e.g. don't show
            <a href="@org-openide-modules@/org/openide/modules/doc-files/api.html#enablement">autoload modules</a>
            for example).
        </api>

        <api group="preferences" category="stable" name="unpack200" type="export">
            If <code>bin/unpack200</code> executable isn't in the JDK executing the NetBeans application (as is the
            case since JDK14 and newer), the updater searches for a preference
            in <code>NbPreferences.forModule(OperatorContainer.class).get("unpack200", null)</code>
            which is usually located in a user directory in file
            <code>config/Preferences/org/netbeans/modules/autoupdate/services.properties</code>
            and if specified, it uses the alternative <code>unpack200</code>
            to process legacy NBM files encoded that way.
        </api>
    </answer>



    <!--
    <question id="exec-introspection" when="impl">
    Does your module use any kind of runtime type information (<code>instanceof</code>,
    work with <code>java.lang.Class</code>, etc.)?
    <hint>
    Check for cases when you have an object of type A and you also
    expect it to (possibly) be of type B and do some special action. That
    should be documented. The same applies on operations in meta-level
    (Class.isInstance(...), Class.isAssignableFrom(...), etc.).
    </hint>
    </question>
    -->
    <answer id="exec-introspection">
        <p>
            XXX no answer for exec-introspection
        </p>
    </answer>



    <!--
    <question id="exec-privateaccess" when="final">
    Are you aware of any other parts of the system calling some of
    your methods by reflection?
    <hint>
    If so, describe the "contract" as an API. Likely private or friend one, but
    still API and consider rewrite of it.
    </hint>
    </question>
    -->
    <answer id="exec-privateaccess">
        <p>
            XXX no answer for exec-privateaccess
        </p>
    </answer>



    <!--
    <question id="exec-process" when="impl">
    Do you execute an external process from your module? How do you ensure
    that the result is the same on different platforms? Do you parse output?
    Do you depend on result code?
    <hint>
    If you feed an input, parse the output please declare that as an API.
    </hint>
    </question>
    -->
    <answer id="exec-process">
        <p>
            XXX no answer for exec-process
        </p>
    </answer>



    <!--
    <question id="exec-property" when="impl">
    Is execution of your code influenced by any environment or
    Java system (<code>System.getProperty</code>) property?
    On a similar note, is there something interesting that you
    pass to <code>java.util.logging.Logger</code>? Or do you observe
    what others log?
    <hint>
    If there is a property that can change the behavior of your
    code, somebody will likely use it. You should describe what it does
    and the <a href="http://openide.netbeans.org/tutorial/api-design.html#life">stability category</a>
    of this API. You may use
    <pre>
    &lt;api type="export" group="property" name="id" category="private" url="http://..."&gt;
    description of the property, where it is used, what it influence, etc.
    &lt;/api&gt;
    </pre>
    </hint>
    </question>
    -->
    <answer id="exec-property">
        <api name="plugin.manager.detail.view.selected" group="systemproperty" category="private" type="export">
            <p>
                Setting this property affects the associated module autoupdate.ui.
                Setting it to <code>true</code> results in the detailed view (all visible plugins) been selected
                when Installed tab is opened in Plugin Manager.
                Otherwise the simple view (high-level features) is selected.
            </p>
        </api>
    </answer>



    <!--
    <question id="exec-reflection" when="impl">
    Does your code use Java Reflection to execute other code?
    <hint>
    This usually indicates a missing or insufficient API in the other
    part of the system. If the other side is not aware of your dependency
    this contract can be easily broken.
    </hint>
    </question>
    -->
    <answer id="exec-reflection">
        <p>
            XXX no answer for exec-reflection
        </p>
    </answer>



    <!--
    <question id="exec-threading" when="init">
    What threading models, if any, does your module adhere to? How the
    project behaves with respect to threading?
    <hint>
    Is your API threadsafe? Can it be accessed from any threads or
    just from some dedicated ones? Any special relation to AWT and
    its Event Dispatch thread? Also
    if your module calls foreign APIs which have a specific threading model,
    indicate how you comply with the requirements for multithreaded access
    (synchronization, mutexes, etc.) applicable to those APIs.
    If your module defines any APIs, or has complex internal structures
    that might be used from multiple threads, declare how you protect
    data against concurrent access, race conditions, deadlocks, etc.,
    and whether such rules are enforced by runtime warnings, errors, assertions, etc.
    Examples: a class might be non-thread-safe (like Java Collections); might
    be fully thread-safe (internal locking); might require access through a mutex
    (and may or may not automatically acquire that mutex on behalf of a client method);
    might be able to run only in the event queue; etc.
    Also describe when any events are fired: synchronously, asynchronously, etc.
    Ideas: <a href="http://core.netbeans.org/proposals/threading/index.html#recommendations">Threading Recommendations</a> (in progress)
    </hint>
    </question>
    -->
    <answer id="exec-threading">
        <p>
            The API is threadsafe. The objects are immutable.
        </p>
    </answer>



    <!--
    <question id="format-clipboard" when="impl">
    Which data flavors (if any) does your code read from or insert to
    the clipboard (by access to clipboard on means calling methods on <code>java.awt.datatransfer.Transferable</code>?

    <hint>
    Often Node's deal with clipboard by usage of <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
    Check your code for overriding these methods.
    </hint>
    </question>
    -->
    <answer id="format-clipboard">
        <p>
            XXX no answer for format-clipboard
        </p>
    </answer>



    <!--
    <question id="format-dnd" when="impl">
    Which protocols (if any) does your code understand during Drag &amp; Drop?
    <hint>
    Often Node's deal with clipboard by usage of <code>Node.drag, Node.getDropType</code>.
    Check your code for overriding these methods. Btw. if they are not overridden, they
    by default delegate to <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
    </hint>
    </question>
    -->
    <answer id="format-dnd">
        <p>
            XXX no answer for format-dnd
        </p>
    </answer>



    <!--
    <question id="format-types" when="impl">
    Which protocols and file formats (if any) does your module read or write on disk,
    or transmit or receive over the network? Do you generate an ant build script?
    Can it be edited and modified?

    <hint>
    <p>
    Files can be read and written by other programs, modules and users. If they influence
    your behaviour, make sure you either document the format or claim that it is a private
    api (using the &lt;api&gt; tag).
    </p>

    <p>
    If you generate an ant build file, this is very likely going to be seen by end users and
    they will be attempted to edit it. You should be ready for that and provide here a link
    to documentation that you have for such purposes and also describe how you are going to
    understand such files during next release, when you (very likely) slightly change the
    format.
    </p>
    </hint>
    </question>
    -->
    <answer id="format-types">
        <p>
            XXX no answer for format-types
        </p>
    </answer>



    <!--
    <question id="lookup-lookup" when="init">
    Does your module use <code>org.openide.util.Lookup</code>
    or any similar technology to find any components to communicate with? Which ones?

    <hint>
    NetBeans is build around a generic registry of services called
    lookup. It is preferable to use it for registration and discovery
    if possible. See
    <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/lookup/doc-files/index.html">
    The Solution to Comunication Between Components
    </a>. If you do not plan to use lookup and insist usage
    of other solution, then please describe why it is not working for
    you.
    <br/>
    When filling the final version of your arch document, please
    describe the interfaces you are searching for, where
    are defined, whether you are searching for just one or more of them,
    if the order is important, etc. Also classify the stability of such
    API contract. Use &lt;api group=&amp;lookup&amp; /&gt; tag, so
    your information gets listed in the summary page of your javadoc.
    </hint>
    </question>
    -->
    <answer id="lookup-lookup">
        <ul>
            <li>Registred Update Providers (aka Update Center) are searching in <code>org.openide.util.Lookup</code>.</li>
            <li>Module loaded in running IDE are found in <code>org.openide.util.Lookup</code>.</li>
        </ul>
    </answer>



    <!--
    <question id="lookup-register" when="final">
    Do you register anything into lookup for other code to find?
    <hint>
    Do you register using layer file or using <code>META-INF/services</code>?
    Who is supposed to find your component?
    </hint>
    </question>
    -->
    <answer id="lookup-register">
        <p>
            XXX no answer for lookup-register
        </p>
    </answer>



    <!--
    <question id="lookup-remove" when="final">
    Do you remove entries of other modules from lookup?
    <hint>
    Why? Of course, that is possible, but it can be dangerous. Is the module
    your are masking resource from aware of what you are doing?
    </hint>
    </question>
    -->
    <answer id="lookup-remove">
        <p>
            XXX no answer for lookup-remove
        </p>
    </answer>



    <!--
    <question id="perf-exit" when="final">
    Does your module run any code on exit?
    </question>
    -->
    <answer id="perf-exit">
        <p>
            XXX no answer for perf-exit
        </p>
    </answer>



    <!--
    <question id="perf-huge_dialogs" when="final">
    Does your module contain any dialogs or wizards with a large number of
    GUI controls such as combo boxes, lists, trees, or text areas?
    </question>
    -->
    <answer id="perf-huge_dialogs">
        <p>
            XXX no answer for perf-huge_dialogs
        </p>
    </answer>



    <!--
    <question id="perf-limit" when="init">
    Are there any hard-coded or practical limits in the number or size of
    elements your code can handle?
    <hint>
    Most of algorithms have increasing memory and speed complexity
    with respect to size of data they operate on. What is the critical
    part of your project that can be seen as a bottleneck with
    respect to speed or required memory? What are the practical
    sizes of data you tested your project with? What is your estimate
    of potential size of data that would cause visible performance
    problems? Is there some kind of check to detect such situation
    and prevent "hard" crashes - for example the CloneableEditorSupport
    checks for size of a file to be opened in editor
    and if it is larger than 1Mb it shows a dialog giving the
    user the right to decide - e.g. to cancel or commit suicide.
    </hint>
    </question>
    -->
    <answer id="perf-limit">
        <p>
            The number of objects to handling is limited in reality to count of modules
            loaded in running IDE plus published plugings on Update Centers. It cannot
            reach over the Autoupdate Services capability.
        </p>
    </answer>



    <!--
    <question id="perf-mem" when="final">
    How much memory does your component consume? Estimate
    with a relation to the number of windows, etc.
    </question>
    -->
    <answer id="perf-mem">
        <p>
            XXX no answer for perf-mem
        </p>
    </answer>



    <!--
    <question id="perf-menus" when="final">
    Does your module use dynamically updated context menus, or
    context-sensitive actions with complicated and slow enablement logic?
    <hint>
    If you do a lot of tricks when adding actions to regular or context menus, you can significantly
    slow down display of the menu, even when the user is not using your action. Pay attention to
    actions you add to the main menu bar, and to context menus of foreign nodes or components. If
    the action is conditionally enabled, or changes its display dynamically, you need to check the
    impact on performance. In some cases it may be more appropriate to make a simple action that is
    always enabled but does more detailed checks in a dialog if it is actually run.
    </hint>
    </question>
    -->
    <answer id="perf-menus">
        <p>
            XXX no answer for perf-menus
        </p>
    </answer>



    <!--
    <question id="perf-progress" when="final">
    Does your module execute any long-running tasks?

    <hint>Long running tasks should never block
    AWT thread as it badly hurts the UI
    <a href="http://performance.netbeans.org/responsiveness/issues.html">
    responsiveness</a>.
    Tasks like connecting over
    network, computing huge amount of data, compilation
    be done asynchronously (for example
    using <code>RequestProcessor</code>), definitively it should
    not block AWT thread.
    </hint>
    </question>
    -->
    <answer id="perf-progress">
        <p>
            XXX no answer for perf-progress
        </p>
    </answer>



    <!--
    <question id="perf-scale" when="init">
    Which external criteria influence the performance of your
    program (size of file in editor, number of files in menu,
    in source directory, etc.) and how well your code scales?
    <hint>
    Please include some estimates, there are other more detailed
    questions to answer in later phases of implementation.
    </hint>
    </question>
    -->
    <answer id="perf-scale">
        <p>
            None.
        </p>
    </answer>



    <!--
    <question id="perf-spi" when="init">
    How the performance of the plugged in code will be enforced?
    <hint>
    If you allow foreign code to be plugged into your own module, how
    do you enforce that it will behave correctly and quickly and will not
    negatively influence the performance of your own module?
    </hint>
    </question>
    -->
    <answer id="perf-spi">
        <p>
            The performance is affected by responsiveness Update Providers (plugged via proposed SPI)
            which are mined for available updates or new functionality. Also these providers are
            responsible for downloading of chosen files. The critical dependence on traffic accessibility
            of user's connection to Internet. These dependencies will be transparent
            to the users and won't affect API usage.
        </p>
    </answer>



    <!--
    <question id="perf-startup" when="final">
    Does your module run any code on startup?
    </question>
    -->
    <answer id="perf-startup">
        <p>
            XXX no answer for perf-startup
        </p>
    </answer>



    <!--
    <question id="perf-wakeup" when="final">
    Does any piece of your code wake up periodically and do something
    even when the system is otherwise idle (no user interaction)?
    </question>
    -->
    <answer id="perf-wakeup">
        <p>
            XXX no answer for perf-wakeup
        </p>
    </answer>



    <!--
    <question id="resources-file" when="final">
    Does your module use <code>java.io.File</code> directly?

    <hint>
    NetBeans provide a logical wrapper over plain files called
    <code>org.openide.filesystems.FileObject</code> that
    provides uniform access to such resources and is the preferred
    way that should be used. But of course there can be situations when
    this is not suitable.
    </hint>
    </question>
    -->
    <answer id="resources-file">
        <api category="devel" group="java.io.File" name=".lastModified" type="import">
            <p>
            Whenever updater touches a cluster, it creates <code>.lastModified</code>
            file in it and sets its timestamp to current time millis. This is
            an information for module system, so it knows to reset its caches.
            </p>
        </api>
    </answer>



    <!--
    <question id="resources-layer" when="final">
    Does your module provide own layer? Does it create any files or
    folders in it? What it is trying to communicate by that and with which
    components?

    <hint>
    NetBeans allows automatic and declarative installation of resources
    by module layers. Module register files into appropriate places
    and other components use that information to perform their task
    (build menu, toolbar, window layout, list of templates, set of
    options, etc.).
    </hint>
    </question>
    -->
    <answer id="resources-layer">
        <p>
            XXX no answer for resources-layer
        </p>
    </answer>



    <!--
    <question id="resources-mask" when="final">
    Does your module mask/hide/override any resources provided by other modules in
    their layers?

    <hint>
    If you mask a file provided by another module, you probably depend
    on that and do not want the other module to (for example) change
    the file's name. That module shall thus make that file available as an API
    of some stability category.
    </hint>
    </question>
    -->
    <answer id="resources-mask">
        <p>
            XXX no answer for resources-mask
        </p>
    </answer>



    <!--
    <question id="resources-preferences" when="final">
    Does your module uses preferences via Preferences API? Does your module use NbPreferences or
    or regular JDK Preferences ? Does it read, write or both ?
    Does it share preferences with other modules ? If so, then why ?
    <hint>
    You may use
    &lt;api type="export" group="preferences"
    name="preference node name" category="private"&gt;
    description of individual keys, where it is used, what it
    influences, whether the module reads/write it, etc.
    &lt;/api&gt;
    Due to XML ID restrictions, rather than /org/netbeans/modules/foo give the "name" as org.netbeans.modules.foo.
    Note that if you use NbPreferences this name will then be the same as the code name base of the module.
    </hint>
    </question>
    -->
    <answer id="resources-preferences">
        <p>
            XXX no answer for resources-preferences
        </p>
    </answer>



    <!--
    <question id="resources-read" when="final">
    Does your module read any resources from layers? For what purpose?

    <hint>
    As this is some kind of intermodule dependency, it is a kind of API.
    Please describe it and classify according to
    <a href="http://openide.netbeans.org/tutorial/api-design.html#categories">
    common stability categories</a>.
    </hint>
    </question>
    -->
    <answer id="resources-read">
        <p>
            XXX no answer for resources-read
        </p>
    </answer>



    <!--
    <question id="security-grant" when="final">
    Does your code grant additional rights to some other code?
    <hint>Avoid using a class loader that adds extra
    permissions to loaded code unless really necessary.
    Also note that your API implementation
    can also expose unneeded permissions to enemy code by
    calling AccessController.doPrivileged().</hint>
    </question>
    -->
    <answer id="security-grant">
        <p>
            XXX no answer for security-grant
        </p>
    </answer>



    <!--
    <question id="security-policy" when="final">
    Does your functionality require modifications to the standard policy file?
    <hint>Your code might pass control to third-party code not
    coming from trusted domains. This could be code downloaded over the
    network or code coming from libraries that are not bundled
    with NetBeans. Which permissions need to be granted to which domains?</hint>
    </question>
    -->
    <answer id="security-policy">
        <p>
            XXX no answer for security-policy
        </p>
    </answer>

</api-answers>
