<?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.28"
    author="jtulach@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>
            This module tracks certain UI gestures produced by user and collects a log
            of his actions. It is capable to display such log and also upload it to 
            a central server for additional processing and analysis.
        </p>
    </answer>
    
    
    
    <answer id="arch-quality">
        <p>
            Client side is going to be covered with unit tests to certain extent.
        </p>
    </answer>
    
    
    
    <answer id="arch-time">
        <p>
            The module shall work with NetBeans 6.0. As it needs certain cooperation
            with modules in standard distribution, like 
            <api name="UI-Actions-org.openide.awt" type="import" group="logger" category="friend">
                which log info about invoked actions
            </api> and
            <api name="UI-Actions-org.openide.windows" type="import" group="logger" category="friend">
                which log info about invoked actions by keystrokes
            </api>.
        </p>
    </answer>
    
    <answer id="arch-usecases">
        <usecase id="gather-info" name="Gather information about UI gestures">
            <p>
                Primary purpose of this module is collect information about
                the user actions that take place in the running NetBeans based
                application.
            </p>
            
            <p>
                <api name="UI_LOGGER_NAME" group="logger" category="devel" type="export">
                    The info about various UI events in the system is collected thru
                    listening on 
                    <a href="@JDK@/java/util/logging/LogRecord.html">log records</a> send to
                    <a href="@JDK@/java/util/logging/Logger.html">
                        Logger.getLogger(UI_LOGGER_NAME_VALUE)
                    </a>, where UI_LOGGER_NAME_VALUE is a value of UI_LOGGER_NAME
                    resource bundle key, defining the name of the UI usage logger.
                    Any code in the system can get instance of this logger
                    or any child logger and send useful informations to it. 
                    At the end of the session the last few hundereds events
                    is taken and displayed to the user for further processing.
                </api>
                <api name="METRICS_LOGGER_NAME" group="logger" category="devel" type="export">
                    The info about various UI events in the system is collected thru
                    listening on 
                    <a href="@JDK@/java/util/logging/LogRecord.html">log records</a> send to
                    <a href="@JDK@/java/util/logging/Logger.html">
                        Logger.getLogger(METRICS_LOGGER_NAME_VALUE)
                    </a>, where METRICS_LOGGER_NAME_VALUE is a value of
                    METRICS_LOGGER_NAME resource bundle key, defining the name
                    of the metrics logger.
                    Any code in the system can get instance of this logger
                    or any child logger and send useful informations to it. 
                    At the end of the session the last few hundereds events
                    is taken and displayed to the user for further processing.
                </api>
            </p>
            
        </usecase>
        <usecase id="showing-results" name="Presenting usage statistics">
            <p>
                Important part of the behaviour of this module is the ability
                to cooperate with information analyzing tools and present their 
                results. This is done thru special HTTP contracts, where the 
                module reads and understands various server responses and is
                able to open browser after submitting data to analysis.
            </p>
            
            <p>
                <api name="WELCOME_URL" group="property" category="private" type="export">
                    There is a key in the <code>org.netbeans.modules.uihandler.Bundle</code>
                    that specifies the location of the page on a server one shall
                    query and display to the user when the module is about the
                    submit usage data for analysis.
                </api>
                <api name="METRICS_URL" group="property" category="private" type="export">
                    There is a key in the <code>org.netbeans.modules.uihandler.Bundle</code>
                    that specifies the location of the page on a server one shall
                    query and display to the user when the module is about the
                    submit metrics data for analysis.
                </api>
                <api name="ERROR_URL" group="property" category="private" type="export">
                    There is a key in the <code>org.netbeans.modules.uihandler.Bundle</code>
                    that specifies the location of the page on a server one shall
                    query and display to the user when the module is about the
                    submit an error report.
                </api>
                <api name="WelcomePageContent" group="java.io.File" category="friend" type="export">
                    The page pointed by <code>WELCOME_URL</code> can contain
                    any XHTML text, but it also should contain a &lt;form/&gt; tag 
                    that defines &lt;input type="hidden" name="submit" value="localizedName"/&gt;.
                    The <code>localizedName</code> is then going to be used for a button
                    for the dialog displaying the summary. When this button is invoked,
                    the "action" URL is then feed with data from the UI logs.
                    The server is then supposed to process the data, create 
                    some analytics pages and return them back to the client.
                    If the returned page contains tag like
                    &lt;meta http-equiv='Refresh' content='3; URL=somepage'&gt;
                    an (external) browser is opened with the specified URL and
                    the user can then interact directly with the server, thru
                    pages it serves.
                </api>
                <api name="org.netbeans.modules.uihandler.Submit" group="systemproperty"
                     category="private" type="export">
                    
                    For testing purposes one can 
                    specify different URL for upload of files, by setting
                    <code>org.netbeans.modules.uihandler.Submit</code>
                    property when invoking NetBeans.
                </api>
            </p>
        </usecase>
        <usecase id="extending-info" name="Adding own UI gestures">
            <p>
                The base module is in fact just an infrastructure which collects
                data about UI gestures, but the actual gestures need to be delivered
                to it somehow. Here is the description of the ways how one can
                extend own modules to cooperate with this UI gestures infrastructure.
            </p>
            
            <p>
                To feed own data about special UI gestures one can just create own
                <a href="@JDK@/java/util/logging/Logger.html">
                    Logger.getLogger(UI_LOGGER_NAME_VALUE+".ownname")
                </a> and send own log records to it.
                UI_LOGGER_NAME_VALUE is a value of UI_LOGGER_NAME
                resource bundle key, defining the name of the logger.
                The format of the log messages shall follow the one described by the
                <a href="@org-openide-util@/org/openide/util/doc-files/logging.html">
                    structured logging 
                </a> document, e.g. the 
                <a href="@JDK@/java/util/logging/LogRecord.html">LogRecord</a>
                shall have associated 
                <a href="@JDK@/java/util/ResourceBundle.html">ResourceBundle</a>
                and the record's <code>getMessage</code> shall point to a key
                in that bundle.
                
                <api name="ICON_BASE" group="property" type="export" category="devel">
                    there is an extension to the regular formatting done by
                    the <a href="@JDK@/java/util/logging/Formatter.html">logging
                    formatter</a> that, in order to achieve nicer appearance to
                    the user, allows each record to be associated with an icon. 
                    Just define <code>MSG_KEY_ICON_BASE</code> in the bundle associated
                    with the
                    <a href="@JDK@/java/util/logging/LogRecord.html">LogRecord</a>
                    (where the MSG_KEY is the string returned by <code>record.getMessage()</code>)
                    and the value is then going to be used for the 
                    <a href="@org-openide-nodes@/org/openide/nodes/AbstractNode.html#setIconBaseWithExtension-java.lang.String-">
                        Node
                    </a> representing the UI gesture.
                </api>
            </p>
            
            <p>
                Sometimes direct logging may not be possible. For example for
                performance data it might be meaningful to collect the information
                over a longer time period and only at the end output some statistics.
                This is supported as well. Just implement and register one
                of the 
                <api name="CallbackInterfaces" group="java" type="export" category="devel" 
                     url="@TOP@/org/netbeans/modules/uihandler/api/Activated.html">interfaces from the API of this module</api> 
                and properly register
                them and the implementation will be called when the logger module
                is activated or when the user finishes the work with the application.
                In order to keep dependencies clean, it is strongly adviced 
                to make modules that implement this API 
                eager,
                so they get enabled as soon as the UI logger module is enabled.
            </p>
        </usecase>
        <p>
            These usecases are realized as described in
            <a href="@TOP@/org/netbeans/modules/uihandler/api/doc-files/ui.html">
            here in provided UI specification</a>.
        </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">
        <p>
            XXX no answer for arch-what
        </p>
    </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>
            XXX no answer for compat-deprecation
        </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">
            There are several resource bundle keys related to branding.
            These are:
            <ul>
                <li>
                    <code>userNameURL</code> - The URL used to report Exception
                    reporter results, the user name is appended to the URL.
                </li>
                <li>
                    <code>userIdURL</code> - The URL used to report by user identity,
                    when user name is not defined. The user identity is appended
                    to the URL.
                </li>
                <li>
                    <code>ReportPanel.loginField.AccessibleContext.accessibleName</code> -
                    The accessible name of the application's user name field
                </li>
                <li>
                    <code>ReportPanel.loginField.AccessibleContext.accessibleDescription</code> -
                    The accessible description of the application's user name field
                </li>
                <li>
                    <code>REGISTRATION_URL</code> - The URL to register a new user
                </li>
                <li>
                    <code>ReportPanel.jLabel11.text</code> - A label next to the
                    application's user name field
                </li>
                <li>
                    <code>ReportPanel.jPasswordField1.AccessibleContext.accessibleDescription</code> -
                    The accessible description of the application's user password field
                </li>
                <li>
                    <code>no_data_found</code> - Description text about
                    a connection problem.
                </li>
                <li>
                    <code>METRICS_LOGGER_NAME</code> - The logger name of metrics
                    logging.
                </li>
                <li>
                    <code>UI_LOGGER_NAME</code> - The logger name of UI usages
                    logging.
                </li>
                <li>
                    <code>UI_PERFORMANCE_LOGGER_NAME</code> - The logger name
                    of performance-related logging.
                </li>
                <li>
                    <code>UI_USER_CONFIGURATION</code> - Text of a configuration
                    log message. Following three keys are used to provide the
                    application version:
                    <ul>
                        <li>
                            <code>ApplicationVersionResourceBundle</code> -
                            A resource bundle the application version is read from
                        </li>
                        <li>
                            <code>ApplicationVersionResourceKey</code> -
                            A key with the application version number
                        </li>
                        <li>
                            <code>ApplicationVersionSysPropertyResourceArg</code> -
                            A system property, that is used as an argument to the
                            application version number key
                        </li>
                    </ul>
                </li>
                <li>
                    <code>WELCOME_URL</code> - The URL with the welcome text
                </li>
                <li>
                    <code>METRICS_URL</code> - The URL to upload metrics logs to
                </li>
                <li>
                    <code>ERROR_URL</code> - The URL to upload errors to
                </li>
                <li>
                    <code>CHECKING_SERVER_URL</code> - The URL to authenticate
                    the user with password
                </li>
                <li>
                    <code>LOG_FILE</code> - The application's log file relative
                    to the user directory
                </li>
                <li>
                    <code>MSG_ConnetionFailedReport</code> - This message is
                    displayed when connection to the server fails.
                </li>
                <li>
                    <code>LBL_BottomText1</code>, <code>LBL_BottomText2</code>,
                    <code>LBL_BottomText3</code> - Text displayed on the usage
                    statistics dialog.
                </li>
                <li>
                    <code>METRICS_INFO_URL</code> - This URL is displayed in
                    a browser to provide more information about the metrics
                    usage tracking.
                </li>
            </ul>
    </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>
            XXX no answer for compat-standards
        </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='private' name='org.openide.explorer' url='../org-openide-explorer/overview-summary.html' >
                    The module uses explorer view to present the results before they get submitted to
                    the analysis server.
                </api>
            </li>            
            <li><api type='import' group='java' category='friend' name='uihandler-hooks' >
                    This module makes on of its <code>Handler</code> implement
                    <code>Callable&lt;JButton&gt;</code> which is a signal for
                    core providing the exception dialog to include such a 
                    <code>JButton</code> in its list of options. That way this 
                    module can enhance the dialog with "Report..." button.
                </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>
            XXX no answer for dep-non-nb
        </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>
            XXX no answer for dep-platform
        </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">
        <p>
            Modules may use functionality of this module either by depending on its presence
            and registering <a href="@TOP@/org/netbeans/modules/uihandler/api/Deactivated.html">callback interfaces</a> 
            provided by its API. Or the modules do not need to depend on this module at all,
            and just generate <a href="@JDK@/java/util/logging/LogRecord.html">log records</a>
            to the <code>UI_LOGGER_NAME_VALUE+".someloggername"</code> logger. These records are 
            then going to be consumed by this module, if enabled.
        </p>
    </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>
            XXX no answer for deploy-packages
        </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">
        <p>
            XXX no answer for exec-component
        </p>
    </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?
            
            <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">
        <p>
            <api name="MSG_USER_CONFIGURATION" group="logger" category="devel" type="export">
                Before the results are submitted one more LogRecord is added. This LogRecord message is
                set to <code>MSG_USER_CONFIGURATION</code> . Four upto six parameters are added.
                Four common parameters are added always before sending logger info and two error 
                parameters are added only if an exception rised.
                
                <ul title="common parameters">
                    <li>Operating system name, version and architecture</li>
                    <li>Virtual machine name and version</li>
                    <li>Application version and build number</li>
                    <li>User name</li>
                </ul>
                <ul title="error parameters">
                    <li>Error summary</li>
                    <li>User's comment to an error situation</li>
                </ul>
            </api>
            <api name="REGISTRATION_URL" group="property" category="private" type="export">
                There is a key in the <code>org.netbeans.modules.exceptions.Bundle</code>
                that specifies the location of the page on a server. This page 
                should be display to the user when he uses a &quot;register here&quot; link on ReportPanel.
            </api>
            
        </p>
    </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>
            XXX no answer for exec-threading
        </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">
        <p>
            XXX no answer for lookup-lookup
        </p>
    </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>
            XXX no answer for perf-limit
        </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>
            XXX no answer for perf-scale
        </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>
            XXX no answer for perf-spi
        </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">
        <p>
            <api name="var-log-uigestures" group="java.io.File" category="private" type="export">
            The module stores its loggging
            information in $userdir/var/log/uigestures and 
            $userdir/var/log/uigestures.1 files. There are written whenever
            a UI action happens and read when the data are send to server.
            Each of these files is supposed to contain at most 1000 of 
            actions</api>
        </p>
    </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-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>
    
    
    
    
    <!--
        <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>
            <api name="org.netbeans.modules.autoupdate.ideIdentity" category="friend" group="preferences" type="import">
                This module shares the identity with autoupdate and reads it from its preferences node.
            </api>
            <api name="org.netbeans.modules.uihandler.autoautoSubmitWhenFull" category="devel" group="preferences" type="export">
                This property allows other parts of the system to turn on/off the
                automatic submission of log files to the server. This can be
                used for example by installer to query the user and on his
                confirmation create <code>config/Preferences/org/netbeans/modules/uihandler.properties</code>
                file in user dir or in nbX.Y cluster with one line saying:
                <code>autoSubmitWhenFull=true</code>. This works since 
                version 1.30 of this module.
            </api>
        </p>
        <api type="export" group="systemproperty"  name="nb.show.statistics.ui" category="private">
            System property "nb.show.statistics.ui" controls if UI for Usage statistics is displayed in General panel.
            If this property is non null (for IDE) UI is shown. This property contains key of preference used
            to save status - true if usage statistics are collected and uploaded, false if not.
            Key is "usageStatisticsEnabled" and is described below.
        </api>
        <api type="import" group="preferences"  name="org.netbeans.core.usageStatisticsEnabled" category="private">
            Key "usageStatisticsEnabled" is read and controls if metrics logging is enabled or disabled.
            Installer has also similar UI to set this and stores it into NetBeans install dir
            <code>nb/config/Preferences/org/netbeans/core.properties</code>
        </api>
    </answer>
    
</api-answers>
