<?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="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.
            If possible please provide 
            simple diagrams. 
            </hint>
        </question>
-->
 <answer id="arch-overall">
  <p>
   <api name="NetBeansCore" category="friend" group="java" type="export">
   The heart of NetBeans. It contains basic implementation of all necessary
   interfaces, takes care of the startup sequence and the whole lifecycle
   of any NetBeans based application.
   </api> 
  </p>
 </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? 
            </hint>
        </question>
-->
 <answer id="arch-quality">
  <p>
   Tests in <code>core/test</code>.
  </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>
   Done.
  </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">
   No special APIs exported beyond few friend contracts:
   <ul>
    <li><api name="org.netbeans.core.modules.AutomaticDependencies" category="friend" group="java" type="export" url="@org-openide-modules@/org/openide/modules/doc-files/api.html#refactoring" /></li>
    <li><api name="org.netbeans.core.WindowSystem" category="friend" group="java" type="export"></api></li>
   </ul>
 </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="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>
   Yes, fully I18Ned.
  </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>
    Yes.
  </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>
   Only one core can be present in running NetBeans based application.
  </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>
            If you want, 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>
            </hint>
        </question>
-->
 <answer id="dep-nb">
  <p>
   XXX no answer for dep-nb
  </p>
 </answer>



<!--
        <question id="dep-non-nb" when="init">
            What other projects outside NetBeans does this one depend on?
            
            <hint>
            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 on such third-party library.
            </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 your module is using JNI or deals with special differences of
            OSes like filesystems, etc. please describe here what they are.
            </hint>
        </question>
-->
 <answer id="dep-platform">
  <p>
   XXX no answer for dep-platform
  </p>
 </answer>



 <answer id="deploy-dependencies">
  <p>
   Nothing.
  </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>
            NetBeans module system allows restriction of access rights to
            public classes of your module from other modules. This prevents
            unwanted dependencies of others on your code and should be used
            whenever possible (<a href="http://www.netbeans.org/download/javadoc/OpenAPIs/org/openide/doc-files/upgrade.html#3.4-public-packages">
            public packages
            </a>). If you do not restrict access to your classes you are
            making it too easy for other people to misuse your implementation
            details, that is why you should have good reason for not 
            restricting package access.
            </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>
   Yes.
   <api name='org.netbeans.core.actions.OptionsAction.additionalActionName' 
        category='private'
        type='export'
        group='property'>
        Creates button with given string in bottom left corner of Options Dialog.
   </api>
   <api name='org.netbeans.core.actions.OptionsAction.additionalActionListener' 
        category='private'
        type='export'
        group='property'>
        Given ActionListener is notified when custom button is pressed.
   </api>
   <api name='org.netbeans.core.actions.OptionsAction.optionsDialogTitle' 
        category='private'
        type='export'
        group='property'>
        Allows to redefine default title of Options Dialog.
   </api>
   <api name='USE_Authentication' 
        category='devel'
        type='export'
        group='branding'>
        One can use branding to disable installation of NetBeans own
        <code> java.net.Authenticator</code>. Just brand 
        <code>org.netbeans.core.Bundle</code>
        to say <code>USE_Authentication=false</code>
   </api>
   <api name='StaticNonProxyHosts' 
        category='devel'
        type='export'
        group='branding'>
        Some applications may want to proxy connections to 
        localhost (which by default uses direct connection in NetBeans Platform).
        One can change the default by branding
        <code>org.netbeans.core.Bundle</code>
        specify something else than <code>StaticNonProxyHosts=localhost|127.0.0.1</code>.
   </api>
  </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>
    <api type="export" name="NbKeymap.context" category="friend" group="java"
     url="http://www.netbeans.org/source/browse/editor/src/org/netbeans/core/NbKeymap.html">
        The <code>context</code> field is accessed from editor module by reflection
        from <a href="@org-netbeans-modules-editor-lib@/org/netbeans/editor/MultiKeymap.html">MultiKeymap</a>.
    </api>
    <api type="import" name="SelfProfileAction" category="friend" group="java">
         The module expects profiler to provide <code>SelfProfileAction</code>
         and interacts with it as described in
         <code>profiler/test/unit/src/org/netbeans/modules/profiler/actions/SelfSamplerActionTest.java</code>
         test.
    </api>
  </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="ErrorNotification" category="private" group="property" type="export">
       <p>
        Enabling assertions (either global -ea or for class org.netbeans.core.NotifyException only) 
        changes the default error notification behavior. When assertions are enabled
        an error window pops up each time an error is encountered. Otherwise a small
        icon start flashing in the main status bar and clicking the icon then brings
        up the error dialog.
       </p>
       <ul>
            <li>The status bar notification shows a small icon starts flashing 
                at the rightmost part of the main status bar when an 
                exception occurs</li>
            <li>The icon is flashing for 5 seconds, then it stays
                visible for another 30 seconds. Positioning the mouse pointer 
                over the icon changes the default mouse cursor to 'hand' 
                and stops the flashing. Icon's tooltip provides the exception 
                message or the exception class name when no message is available. 
                Single-clicking the icon brings up the exception dialog and 
                the icon disappers. The exception dialog shows all exceptions 
                encountered since the icon started flashing. When the exception 
                dialog is closed via the Ok button, the exception list is cleared. 
             </li>
            <li>The exception dialog window 'remembers' (per IDE session) the 
            status of the 'Show Details' flag. So when the dialog is 
            displayed again, the last user's settings are reused. 
            </li>
            <li>When another exception is encountered while the icon is 
            already flashing or visible, the flashing timer and the hide 
            icon timer will restart. </li>
            <li>When another exception is encountered while the exception 
            dialog is visible, the exception message is displayed in 
            the current dialog and the icon does not appear.</li>
            <li>There's no tooltip nor any indication on status bar when the 
            icon is not visible. Only a part of status bar area is reserved 
            for the icon.</li>
            <li>It is possible to switch the status bar notification 
            off, e.g. for beta releases, by enabling assertions in JVM (-ea).
            Then each exception shows the exception dialog.</li>    
       </ul>
   </api>
   <api name="netbeans.hack.50423" category="private" group="systemproperty" type="export" url="http://www.netbeans.org/issues/show_bug.cgi?id=50423">
        Set this property to <q>true</q> to workaround the bug #50423 which
        appears on some linuxes on JDK 1.5.
   </api>
   <api name="netbeans.close.no.exit" category="friend" group="systemproperty" type="export">
        Set this property to <q>true</q> if you do want to cleanup the module system,
        but not call System.exit at the end. Used from <code>NbModuleSuite</code> from
        nbjunit library.
   </api>
  </p>
        <api name="java.net.useSystemProxies" category="private" group="systemproperty" type="import">
            Get this property to determine when use JDK's <code>java.net.ProxySelector</code> or core's 
            implementation of <code>ProxySelector</code>.
        </api>
        
    <api name="org.netbeans.core.TimableEventQueue.install" category="friend" group="branding" type="export">
        By default NetBeans based applications install their own <code>EventQueue</code>.
        One can suppress that since version 3.27 of <code>org.netbeans.core</code> module
        by branding key <code>TimableEventQueue.install</code> in
        <code>org/netbeans/core/Bundle</code> to <code>false</code>.
    </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>
   <api name="uihandler-hooks" category="friend" group="java" type="export">
       This module exports an API that allows the UI Gestures Collector module
       to plug and enhance the behaviour of exception dialog by own buttons.
       The behaviour is like this: If any of <code>Handler</code>s of
       <code>Logger.getLogger("")</code> implements <code>Callable&lt;JButton&gt;</code>
       then such button is going to be inserted to the exception dialog and
       can react and change the behaviour of that dialog. Such a button is
       going to be a "closing" one - e.g. the dialog will close as soon as
       the button is pressed.
   </api>
  </p>
 </answer>



<!--
        <question id="exec-threading" when="impl">
            What threading models, if any, does your module adhere to?
            <hint>
                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>
            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. For that use &lt;api group=&amp;lookup&amp; /&gt; tag.
            </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>
   The core module registers an implementation of <code>org.netbeans.core.StatusLineElementProvider</code> interface,
   it allows to display in the status line a notification about thrown exception.
   It's registered by <code>META-INF/services</code>.
  </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?
        </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>
   <api name="org.netbeans.core.TimeableEventQueue" category="private" group="systemproperty" type="export">
   This module contains a hook to identify long running tasks inside the AWT
   dispatch thread. It observers the AWT event queue and if a task takes longer
   than expected, it invokes a sampler that creates a profiling snapshot of the IDE
   until the task returns back to the event queue. Time limits can be
   configured via system properties (in milliseconds):
   <ul>
    <li><code>org.netbeans.core.TimeableEventQueue.quantum=xyz</code> - for how long the event queue must be blocked to start the self-sampler (by default 100ms),</li>
    <li><code>org.netbeans.core.TimeableEventQueue.report=xyz</code> - total time of blocked event queue to report a problem (by default 3s),</li>
    <li><code>org.netbeans.core.TimeableEventQueue.waitcursor=xyz</code> - time for which a problem is not reported if mouse wait cursor is in place (by default 15s),</li>
    <li><code>org.netbeans.core.TimeableEventQueue.pause=xyz</code> - time after reporting a problem for which the detection is disabled (by default 15s).</li>
   </ul>
   In production builds the default time limits are different (10s to start sampler, 20s to report a problem).
   </api>
  </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>
   XXX no answer for resources-file
  </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>
   <api name="Keymaps" group="layer" type="export" category="devel">
   Keymaps folder contains subfolders for individual keymaps (Emacs, JBuilder, NetBeans).
   The name of keymap can be localized. Use "SystemFileSystem.localizingBundle" attribute of your folder 
   for this purpose. Individual keymap folder contains shadows to actions. Shortcut is mapped to the name of file. 
   Emacs shortcut format is used, multikeys are separated by space chars ("C-X P" means Ctrl+X followed by P).
   "currentKeymap" property of "Keymaps" folder contains original (not localized) name of current keymap.
   </api>
   <api name="Shortcuts" group="layer" type="export" category="devel">
   This folder contains registration of shortcuts. Its supported for backward compatibility purpose only.
   All new shortcuts should be registerred in "Keymaps/NetBeans" folder. Shortcuts installed ins Shortcuts folder 
   will be added to all keymaps, if there is no conflict. It means that if the same shortcut is mapped to different 
   actions in Shortcut folder and current keymap folder (like Keymap/NetBeans), the Shortcuts folder mapping 
   will be ignored.
   </api>
  </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="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="init">
            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="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>
      The core module use NbPreferences for storring properties describe current settings
      of Network Proxy.
      <api group="preferences" name="org.netbeans.core" type="export" category="friend" url="">
          <table>
              <tbody>
                  <tr>
                      <th>key</th>
                      <th>description</th>
                      <th>read</th>
                      <th>write</th>
                  </tr>
                  <tr>
                      <td>proxyHttpHost</td>
                      <td>Host name of HTTP Proxy</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxyHttpPort</td>
                      <td>Port of HTTP Proxy</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxyHttpsHost</td>
                      <td>Host name of HTTPS Proxy</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxyHttpsPort</td>
                      <td>Port of HTTPS Proxy</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxySocksHost</td>
                      <td>Host name of Socks server</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxySocksPort</td>
                      <td>Port of Socks server</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxyNonProxyHosts</td>
                      <td>Ignore host list</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxyType</td>
                      <td>Type of Proxy Setting (DIRECT_CONNECTION, AUTO_DETECT_PROXY, MANUAL_SET_PROXY</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>useProxyAuthentication</td>
                      <td>Proxy Server requires user authentication</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxyAuthenticationUsername</td>
                      <td>Username for authentication on Proxy Server</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
                  <tr>
                      <td>proxyAuthenticationUsername</td>
                      <td>Password for authentication on Proxy Server</td>
                      <td>Y</td>
                      <td>Y</td>
                  </tr>
              </tbody>
          </table>
      </api>
  </p>
  <p>
      <i>Does it share preferences with other modules ?</i>
      Yes, the Welcome Screen module listens for changes Proxy Settings and reload content when Proxy changes.
  </p>
 </answer>

</api-answers>
