<?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="jhavlin@netbeans.org"
>
<!-- This file was based on arch.xml file in module openide.io. -->

  &api-questions;


    <!--
            <question id="arch-overall" when="init">
                Describe the overall architecture.
                <hint>
                What will be API for
                <a href="http://wiki.netbeans.org/API_Design#Separate_API_for_clients_from_support_API">
                    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://wiki.netbeans.org/API_Stability#Private">
                stability categories</a>.
                If possible please provide simple diagrams.
                </hint>
            </question>
    -->
    <answer id="arch-overall">
        <api
            name="NbInputOutputAPI"
            group="java"
            type="export"
            category="official"
            url="@org-netbeans-api-io@/org/netbeans/api/io/package-summary.html"
        >
            <p>
                The module contains APIs for creating output panes (e.g. output tabs in Output Window in the IDE)
                and for writing data into them. It also supports some advanced techniques, e.g. color text,
                hyperlinks, code folding, scrolling to stored positions.
            </p>
        </api>
        <api
            name="NbInputOutputSPI"
            group="java"
            type="export"
            category="official"
            url="@org-netbeans-api-io@/org/netbeans/spi/io/package-summary.html"
        >
            <p>
                SPI for providing custom implementations of output window is also included in this module, in package
                <code>org.netbeans.spi.io</code>
            </p>
        </api>
    </answer>



    <!--
            <question id="arch-quality" when="init">
                How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
                of your code be tested and
                how are future regressions going to be prevented?
                <hint>
                What kind of testing do
                you want to use? How much functionality, in which areas,
                should be covered by the tests? How you find out that your
                project was successful?
                </hint>
            </question>
    -->
    <answer id="arch-quality">
        <p>
            Unit test will be prepared for invocable code in API classes. But most of the
            code is just definition of API and SPI.
        </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>
            The design, implementation, preparing unit tests and reviews will
            probably take several weeks.
        </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://wiki.netbeans.org/API_Design#The_Importance_of_Being_Use_Case_Oriented">
                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">

        <usecase id="print" name="Print a simple output to a new output tab">
            <p>
                The basic use-case is printing a simple text, e.g. text output of an application,
                into a dedicated pane in the UI, e.g. a tab in Output Window in the IDE.
            </p>
            <pre>
    InputOutput io = InputOutput.get("UseCase1", true);
    io.getOut().println("This is a simple output");
    io.getOut().close();
            </pre>
        </usecase>

        <usecase id="printOnClickHyperlink" name="Print a line with hyperlink for invocation of arbitrary code">
            <p>
                Hyperlinks can be also used to invoke some code when clicked.
            </p>
            <pre>
    InputOutput io = InputOutput.get("UseCase3", true);
    io.getOut().print("A line containing a ");
    io.getOut().print("hyperlink", Hyperlink.from(new Runnable() {
        public void run() {
            System.gc();
        }
    }));
    io.getOut().println(" for invocation of custom code.");
    io.getOut().close();
            </pre>
        </usecase>

        <usecase id="printColor" name="Print color text">
            <p>
                Print a color text. Users can select a predefined color for
                common cases (debug, warning, failure, success), or custom
                color specified as RGB value.
            </p>
            <pre>
    InputOutput io = InputOutput.get("UseCase4", true);
    io.getOut().println("Let's print some info", OutputColor.debug());
    io.getOut().println("or warning with appropriate color", OutputColor.warning());
    io.getOut().println("Maybe also text with custom reddish color", OutputColor.rgb(255, 16, 16));
    io.getOut().close();
            </pre>
        </usecase>

        <usecase id="printAndReset" name="Reset an InputOutput to clear all previosly printed text">
            <p>
                It is possible to reuse already created output pane and clear
                all the previously printed text if it is not needed any more.
            </p>
            <pre>
    InputOutput io = InputOutput.get("UseCase5", true);
    io.getOut().println("Let's print some text");
    io.getErr().println("and reset the pane immediately.");
    io.reset();
    io.getOut().println("The pane is now empty and we can reuse it simply");
    io.getOut().close();
            </pre>
        </usecase>

    </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>
            The Input/Output API and SPI is a small module
            which contains <code>InputOutput</code> and related interfaces used in
            driving the Output Window.
        </p>
        <p>
            The normal implementation is <code>org.netbeans.core.output2</code>.
        </p>
    </answer>



    <!--
            <question id="arch-where" when="impl">
                Where one can find sources for your module?
                <hint>
                    Please provide link to the Hg web client at
                    http://hg.netbeans.org/
                    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>
            Backward compatibility of other modules is not broken.
        </p>
        <p>
            This module should replace original I/O API module
            <code>org.openide.io</code>, which has the same goals, but which is
            not UI independent, and which is difficult to extend.
        </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. There is not much to internationalize.
        </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>
            The module defines an API.
        </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>
            N/A. No settings are read or written by this module.
        </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">
        1.7
    </answer>



    <!--
            <question id="dep-jrejdk" when="final">
                Do you require the JDK or is the JRE enough?
            </question>
    -->
    <answer id="dep-jrejdk">
        JRE
    </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='here' />
    </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">
        None.
    </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">
        Any.
    </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>
            Normal module dependency is enough.
        </p>
        <p>
            Availability of some implementation of the SPI is guaranteed by
            "OpenIDE-Module-Needs: org.netbeans.spi.io.InputOutputProvider" in
            the manifest of this module.
        </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>
            Just the module 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>
            Yes.
        </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>
            No; only API classes are public.
        </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>
            Anywhere.
        </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>
            No.
        </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>
            No.
        </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>
            No.
        </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>
            No.
        </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>
            No.
        </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>
            No.
        </p>
    </answer>



    <!--
            <question id="exec-property" when="impl">
                Is execution of your code influenced by any environment or
                Java system (<code>System.getProperty</code>) property?
                On a similar note, is there something interesting that you
                pass to <code>java.util.logging.Logger</code>? Or do you observe
                what others log?
                <hint>
                If there is a property that can change the behavior of your
                code, somebody will likely use it. You should describe what it does
                and the <a href="http://wiki.netbeans.org/API_Stability">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>
            No.
        </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>
            No.
        </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>
            API classes are thread safe, they mostly represent immutable
            objects, or delegate to the SPI.
        </p>
        <p>
            Implementators of the SPI should ensure that their code is properly
            synchronized, as it can be called from any thread.
        </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>
            Plain Unicode text only.
        </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>
            N/A
        </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>
            None.
        </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>
            <code>IOProvider.getDefault()</code> asks lookup for the first instance
            of <code>InputOutputProvider</code>. This is normally provided by
            <code>org.netbeans.core.output2</code>.
        </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 a declarative annotation such as <code>@ServiceProvider</code>?
                Who is supposed to find your component?
                </hint>
            </question>
    -->
    <answer id="lookup-register">
        <p>
            No.
        </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>
            No.
        </p>
    </answer>



    <!--
            <question id="perf-exit" when="final">
                Does your module run any code on exit?
            </question>
    -->
    <answer id="perf-exit">
        <p>
            No.
        </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>
            No.
        </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>
            No.
        </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>
            N/A
        </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>
            No.
        </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>
            No.
        </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>
            Scalability in GUI speed and memory consumption is probably limited
            only by the Output Window implementation.
        </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>
            No special behavior.
        </p>
    </answer>



    <!--
            <question id="perf-startup" when="final">
                Does your module run any code on startup?
            </question>
    -->
    <answer id="perf-startup">
        <p>
            No.
        </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>
            No.
        </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>
            No, but the implementation may.
        </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>
            No.
        </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>
            No.
        </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>
            No.
        </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://wiki.netbeans.org/API_Design#What_is_an_API.3F">
                common stability categories</a>.
                </hint>
            </question>
    -->
    <answer id="resources-read">
        <p>
            No.
        </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>
            No.
        </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>
            No.
        </p>
    </answer>

</api-answers>
