<?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.25"
    author="mfukala@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>
           The <b>Tag Based Editor Support</b> is a small module based on 
            <api group="java" name="EditorLibrary" category="stable" type="import" ></api> module providing  
            <api group="java" name="DocumentModelAPI" category="friend" type="export"></api>.
        </p>
        
        It consists of
        <ul>
            <li>API in org.netbeans.modules.editor.structure.api</li>
            <li>SPI in org.netbeans.modules.editor.structure.spi</li>
            <li>Implementation in org.netbeans.modules.editor.structure</li>
        </ul>
        
        <p>
           The API is primarily aimed to provide structural views of <b>tags based</b> 
           document types like XML/JSP/HTML which contents comprise a tree structure of nested elements.
           
            <br/><br/>
           
           The API allows other modules to plug in their document model provider(s).
            <code>DocumentModelProvider</code> is an SPI interface implemented by other module(s) 
           which wants to afford a structural view of a particular document type to clients. 
           The view is then used by clients (navigator/folding etc.) to obtain and work with structure of a particullar document.
           The plug-ins are registered via declarative xml layers approach.
           
            <br/><br/>
           
           The views are tree-like structures consisting of <code>DocumentElement</code>-s.
           The <code>DocumentElement</code> function as a model's elements, 
           living in a tree-like structure and describing pieces of the document.  
           They are a kind of nodes - you can traverse through them in the tree structure and 
           get some metadata of the related piece of document.
           
            <br/><br/>
           The heart of the API is <code>DocumentModel</code> which is an entry point allowing clients to get document model structure and listen on its changes.
           
        </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>
            There will be a set of unit tests covering the API/SPI classes. Regression tests will be created if it's possible and appropriate.
        </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>
            Most of the work is done. The API/SPI and implementation is created, stored in cvs and is stable. 
            However there is a need to provide some unit tests, which are not created yet.
        </p>
    </answer>



    <!--
    <question id="arch-usecases" when="init">
    <hint>
    Content of this answer will be displayed as part of page at
    http://www.netbeans.org/download/dev/javadoc/usecases.html 
    You can use tags &lt;usecase name="name&gt; regular html description &lt;/usecase&gt;
    and if you want to use an URL you can prefix if with @TOP@ to begin
    at the root of your javadoc
    </hint>
        
    Describe the main <a href="http://openide.netbeans.org/tutorial/api-design.html#usecase">
    use cases</a> of the new API. Who will use it under
    what circumstances? What kind of code would typically need to be written
    to use the module?
    </question>
    -->
    <answer id="arch-usecases">
        <p>
            <b>API:</b>
        </p>
        <usecase name="Code folding" id="folding">
            uses the API to obtain a list of (XML/JSP/HTML/...) document elements and 
            listen on the document model elements changes. The Elements are then used to manage document folds.
        </usecase>
        <usecase name="Navigator" id="navigator">
            gets a tree structure of a JSP/HTML/XML/... document elements and creates an appropriate nodes 
            view in the navigator panel. Then listen on the changes of the document structure and update the tree.
        </usecase>
        <usecase name="Deployment Descriptor navigator" id="dd_navigator">
            will likely use the API to select appropriate parts of the text when 
            using the DD navigator.
        </usecase>
        <usecase name="" id="potentiall_usages">
            The API can potentially be used by anyone who needs to get the document structure or do some mapping between the
            document text and the semantic of the document content. 
        </usecase>

        <p>
            <b>SPI:</b><br/>
        </p>
        <usecase name="register_plugin" id="regp">
            If a module wants to create a provider, it has to:
                <ol>
                    <li>Create a <code>DocumentModelProvider</code> implementation for a particullar document type.</li>
                    <li>Associate it with a particullar mimetype by registering it into layer.</li>
                </ol>
        </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 API allow clients to get a structural model of a document and listen on changes of the model. 
           It is also possible to listen to the state of the model itself - when the model starts scannig of the document,
           when it starts update of the model data and when the update finishes.
           The model is read-only and is incrementally updated based on changes of the document content (e.g. when user edits the document).
           A provider has to implement an SPI (DocumentModelProvider) for a particullar 
           document type (e.g. XML or JSP) and then register itself into the system. 
        </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">
        <p>
            Sources are stored in <code>xml/tageditorsupport</code> module in <code>tag_editor_support</code> branch.
        </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>
            The module provides neither any localized messages nor UI.
        </p>
    </answer>



    <!--
    <question id="compat-standards" when="init">
    Does the module implement or define any standards? Is the 
    implementation exact or does it deviate somehow?
    </question>
    -->
    <answer id="compat-standards">
        <p>
           No new unusual standard, just layer-based xml registration and SPI
           interface <code>DocumentModelProvider</code> that clients has to implement.
        </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>
           The module has no persistable settings.
        </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>
            The module can run on the same JDK which is supported by netbeans. 
        </p>
    </answer>



    <!--
    <question id="dep-jrejdk" when="final">
    Do you require the JDK or is the JRE enough?
    </question>
    -->
    <answer id="dep-jrejdk">
        <p>
             The module can run on the same JDK which is supported by netbeans. AFAIK JRE is enought.
        </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>
           The Tag Based Editor Support module depends on:
            <api group="java" name="org.netbeans.modules.editor.mimelookup" type="import" category="official">
                Needed for the layer registration mechanism of providers.
            </api>
            <api group="java" name="EditorLibrary" type="import" category="official">
                Needed for access to the Document instance which is the DocumentModel built on.
            </api>

        </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>
           There aren't any non-netbeans modules or libraries which this module depends on.
        </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>
           The module does work on all platforms in the same way.
        </p>
    </answer>



    <answer id="deploy-dependencies">
        <p>
           Only clients of the API needs to have a depenedency to it. 
           So far there is only xml/text-edit module depending on this API 
           (it uses it for xml navigator and folding feature)
        </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>
           The only module's jar file needs to be deployed.
        </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>
            no
        </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>
           There is only <code>org.netbeans.modules.editor.structure</code> package which is not declared in public-packages. 
           It contains code responsible for reading data from the layer creating appropriate DocumentModelProviderFactory instancies.
        </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>
           It is enought to install the module into a shared location.
        </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>
            The methods declaring javax.swing.text.Document needs in fact an instance of org.netbeans.editor.BaseDocument. 
            There is a runtime test in DocumentModel.getDocumentModel(j.s.t.Document) which warns users that the BaseDocument is necessary by throwing an IAE exception in such case.
        </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?
            
    <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>
           There is a consistency check of the model enabled/disabled by system property org.netbeans.editor.model.enable_consistency_check
        </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="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>
            The model is locked for reading during its modifications. <br/>
            <b>!!! Do not access the document model's element under the document writeLock()!!!</b>. 
            This may cause a deadlock if you do a document change, do not do writeUnlock() and access the model.
            In such case the model needs to resort it's elements which is done under document readLock().
        </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>
           there is not clipboard support.
        </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>
           DND is not supported.
        </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>
           There are no custom protocols or file formats.
        </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>
           The module only uses editor's mimeLookup to lookup DocumentModelProviderFactory instancies in the layer.
        </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>
            Nothing is registered.
        </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?
    </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>
            Each document element held by DocumentModel consumes some memory (???bytes).
            The entire amount depends on the size and the strucure of the text file.
        </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>
            This depends on the implementation of the DocumentModelProvider. 
            It's updateModel method can be performed for quite long time, especially when 
            initializing the model for the first time.
            It's up to the clients not to run the code from AWT thread.
        </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>
            The model creation/update time depends on the size of the underlaying document and
            also on its structure. 
        </p>
    </answer>



    <!--
    <question id="perf-spi" when="init">
    How the performance of the plugged in code will be enforced?
    <hint>
    If you allow foreign code to be plugged into your own module, how
    do you enforce that it will behave correctly and quickly and will not
    negatively influence the performance of your own module?
    </hint>
    </question>
    -->
    <answer id="perf-spi">
        <p>
            The providers are supposed to plug-in an effective code. 
            There aren't any extra mechanisms to ensure the plugins 
            uses effective mechanisms which do not last for ages.
        </p>
    </answer>



    <!--
    <question id="perf-startup" when="final">
    Does your module run any code on startup?
    </question>
    -->
    <answer id="perf-startup">
        <p>
            AFAIK 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.
        </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>
            A DocumentModel folder is created in the appropriate folder inside /Editors/&lt;mime-type&gt;/.
            The folder is then looked up by mimeLookup to obtain DocumentModelProviderFactory instance.
        </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-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>
            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>
