<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<!DOCTYPE api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [
  <!ENTITY api-questions SYSTEM "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml">
]>

<api-answers
  question-version="1.28"
  author="vstejskal@netbeans.org"
>

  &api-questions;


<!--
        <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">
    The implementation of the <code>MimeDataProvider</code> interface that serves
    data from the folder hierarchy underneath the Editor/ folder on the system
    filesystem.
</answer>


<!--
        <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 module implements <code>MimeDataProvider</code> and registers this implementation
    in the default Lookup via META-INF/services. The implementation relies on
    <code>ProxyLookup</code> and <code>AbsrtactLookup</code> classes, which are used
    for looking up data (i.e. settings, services and other objects) from the
    hierarchy of folders on the system filesystem.
    </p>
    <p>The hierarchy starts in the Editors/ folder and uses subfolders for each
    part of MimePath, for which a user wants to get Lookup. Therefore, when
    asking for Lookup for 'text/x-java' MimePath the lookup will contain objects
    registered underneath the 'Editors/text/x-java' folder.</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">
Unit tests are available.
</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">
Done.
</answer>


<!--
        <question id="arch-usecases" when="init">
            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">

<usecase id="known-clients-summary" name="Known clients summary">
<b>Fold Manager Factories</b>
<br/>
The editor/fold module clients are expected to register fold manager factories
(<code>org.netbeans.spi.editor.fold.FoldManagerFactory</code> classes)
in the <b>Editors/&lt;mime-path&gt;/FoldManager</b> layer folder.
<br/>
<br/>
<b>Completion Providers</b>
<br/>
The editor/completion module clients are expected to register completion providers
(<code>org.netbeans.spi.editor.completion.CompletionProvider</code> classes)
in the <b>Editors/&lt;mime-path&gt;/CompletionProviders</b> layer folder.
<br/>
<br/>
<b>Editor Context Menu Actions</b>
<br/>
The editor module clients are expected to register popup menu actions
(<code>javax.swing.Action</code> classes or names of actions
(i.e. value of Action.NAME attribute) present in editor kit e.g. "goto-source")
in the <b>Editors/&lt;mime-path&gt;/Popup</b> layer folder.
<br/>
<br/>
<b>Side Bars</b>
<br/>
The editor/lib module clients are expected to register factories for components
to be placed on the sides of the editor component (<code>org.netbeans.editor.SideBarFactory</code> classes)
in the <b>Editors/&lt;mime-path&gt;/SideBar</b> layer folder.
<br/>
<br/>
<b>Hyperlink Providers</b>
<br/>
The editor/lib module clients are expected to register hyperlink providers
(<code>org.netbeans.lib.editor.hyperlink.spi.HyperlinkProvider</code> classes)
in the <b>Editors/&lt;mime-path&gt;/HyperlinkProviders</b> layer folder.
<br/>
<br/>
<b>Code Template Processors</b>
<br/>
The editor/codetemplates module clients are expected to register factories for
code template processors
(<code>org.netbeans.lib.editor.codetemplates.spi.CodeTemplateProcessorFactory</code> classes)
in the <b>Editors/&lt;mime-path&gt;/CodeTemplateProcessorFactories</b> layer folder.
<br/>
<br/>
<b>Hints Providers</b>
<br/>
The editor/hints module clients are expected to register editor hints providers
(<code>org.netbeans.modules.editor.hints.spi.HintsProvider</code> classes)
in the <b>Editors/&lt;mime-path&gt;/Hints</b> layer folder.
</usecase>

<br/>
<br/>
<br/>
<b>
SPI Use Cases
</b>
<hr/>

<usecase id="declare-mime-type-specific-object-in-layer" name="Declare the mime specific object via xml layer">
This is the simpliest way of declaring, it is suitable for objects stored directly in mime specific
folders:
<pre>
&lt;filesystem&gt;
    &lt;folder name="Editors"&gt;
        &lt;folder name="text"&gt;
            &lt;folder name="x-java"&gt;
                &lt;file name="org-netbeans-modules-editor-mimelookuptest-MimeSpecificObject.instance"/&gt;
            &lt;/folder&gt;
        &lt;/folder&gt;
    &lt;/folder&gt;
&lt;/filesystem&gt;
</pre>

Lookup of this object will look like:
<pre>
MimeLookup lookup = MimeLookup.getMimeLookup("text/x-java");
MimeSpecificObject mso = (MimeSpecificObject) lookup.lookup(MimeSpecificObject.class);
</pre>
</usecase>

<usecase id="declare-mime-type-specific-folder-in-layer" name="Declare the object via xml layer in some specific folder using Class2LayerFolder.">
<p/>
Some objects are connected to some specific folder in mime specific layer folders, e.g.
FoldManagerFactory.class is placed in <b>FoldManager</b>
subfolder in the <b>Editors/&lt;mime-type&gt;/</b>.
Such objects can be registered
to the specific folder using interface <code>Class2LayerFolder</code>.
Let's register FoldManagerFactory.class to <b>FoldManager</b> folder.
First we need to implement the interface:
<pre>
public class FoldManagerClass2LayerFolder implements Class2LayerFolder{
    
    public FoldManagerClass2LayerFolder {
    }
    
    /* declaring the class */
    public Class getClazz(){
        return FoldManagerFactory.class;
    }
    
    /* assigning the declared class to folder */
    public String getLayerFolderName(){
        return "FoldManager";
    }

    /* we will not support InstanceProvider */
    public org.netbeans.spi.editor.mimelookup.InstanceProvider getInstanceProvider() {
        return null;
    }
    
}

</pre>

Then we need to register it to default lookup via META-INF/services registration. We need to create
            a folder structure <code>META-INF/services</code> and place there a file <code>org.netbeans.spi.editor.mimelookup.Class2LayerFolder</code>
            with the content <code>FoldManagerClass2LayerFolder</code>
<p/>
having this we can register appropriate object to specific folder:

<pre>
&lt;filesystem&gt;
    &lt;folder name="Editors"&gt;
        &lt;folder name="text"&gt;
            &lt;folder name="x-java"&gt;
                &lt;folder name="FoldManager"&gt;
                    &lt;file name="org-netbeans-modules-editor-MyFoldManagerFactory.instance"/&gt;
                &lt;/folder&gt;
            &lt;/folder&gt;
        &lt;/folder&gt;
    &lt;/folder&gt;
&lt;/filesystem&gt;
</pre>


Lookup of this object will look like:
<pre>
MimeLookup lookup = MimeLookup.getMimeLookup("text/x-java");
FoldManagerFactory foldManagerFactory =  (FoldManagerFactory) lookup.lookup(FoldManagerFactory.class);
</pre>
or, if there should be more instances of the FoldManagerFactory:
<pre>
MimeLookup lookup = MimeLookup.getMimeLookup("text/x-java");
Collection foldManagerFactories = lookup.lookup(new Lookup.Template(FoldManagerFactory.class)).allInstances();
</pre>

Notice, that the FoldManagerFactory object is found in "FoldManager" folder. It is not necessary for client
of the API to know about some folder structure.
<p/>
</usecase>

<usecase id="mime-lookup-initializer" name="Providing implemented MimeLookupInitializer">
It is the general way of adding mime specific object into the <code>MimeLookup</code>. Implementation of <code>MimeLookupInitializer</code> should be created and
            registered to default lookup via <code>META-INF/services</code> registration.
For details, please look at the simplified 
<code>TestMimeLookupInitializer</code> 
            in <code>mimelookup/test/unit</code> or <code>LayerMimeLookupInitializer</code>.
<b> Usage of MimeLookupInitializer is deprecated, please use MimeDataProvider instead in similar way </b>
</usecase>

<usecase id="instance-provider" name="Using InstanceProvider for declaration of compound folder objects and inheritance">
Demonstration of <code>InstanceProvider</code> and inheritance will be used together in one use case. Example of
editor context menu construction will be used. Each module can register its actions to 
editor context menu via xml layer. As context menu is mime type sensitive (java editor has 
different menu items than plain editor) the actions are registered into mime specific layer folders
to subfolder "Popup". When the context menu is constructing, the xml layer is scanned for the
action items located in the "Popup" subfolder of specific mime folder. In addition to
this there is inheritance mechanism used to share global actions (like Cut, Copy, Paste) over all mime
types context menus, thus not only the action items from actual mime type are considered. All
underlaying mime types are scanned also and the result is context menu with merged action items.
<p/>
For example JSP scriplet context menu should be merged from action items gathered over:
<ol>
<li> Editors/Popup - this is base level for global actions like Cut, Copy, Paste</li>
<li> Editors/text/x-jsp/Popup - items from jsp mime type</li>
<li> Editors/text/x-jsp/text/x-java/Popup - items specific to java scriplet in JSP document</li>
</ol>
<p/>

Construction mechanism is implemented in editor module in NbEditorKit class. The code 
responsible for construction uses MimeLookup and supports also embeded mime-types.
<code>MimeLookup</code> solves embeding and the gathering of the context menu items such simply as:
<p/>
<pre>
MimePath path = MimePath.parse("text/x-jsp/text/x-java");
Lookup lookup = MimeLookup.getLookup(path);
PopupActions actions = (PopupActions) lookup.lookup(PopupActions.class);
List popupActions = actions.getPopupActions();
</pre>

where PopupActions is implementation of <code>InstanceProvider</code> and PopupActions.class needs to be 
registered to "Popup" subfolder using <code>Class2LayerFolder</code> implementation. Let's register
this step by step.
<p/>

Because action items are instances of various objects like:
<ol>
<li>javax.swing.Action</li>
<li>javax.swing.JSeparator</li>
<li>org.openide.util.actions.SystemAction</li>
<li>java.lang.String</li>
</ol>
the <code>InstanceProvider</code> needs to be created for this:

<pre>
public class PopupActions implements InstanceProvider{
    
    List ordered;

    public PopupActions(){
    }
    
    public PopupActions(List ordered){
        this.ordered = ordered;
    }

    public List getPopupActions(){
        List retList = new ArrayList();
        for (int i = 0; i&lt;ordered.size(); i++){
            DataObject dob = (DataObject) ordered.get(i);
            InstanceCookie ic = (InstanceCookie)dob.getCookie(InstanceCookie.class);
            if (ic!=null){
                try{
                    if (String.class.isAssignableFrom(ic.instanceClass()) ||
                        Action.class.isAssignableFrom(ic.instanceClass()) ||
                        SystemAction.class.isAssignableFrom(ic.instanceClass()) ||
                        JSeparator.class.isAssignableFrom(ic.instanceClass())){
                        Object instance = ic.instanceCreate();
                        retList.add(instance);
                    }
                }catch(IOException ioe){
                    ioe.printStackTrace();
                }catch(ClassNotFoundException cnfe){
                    cnfe.printStackTrace();
                }
            } else{
                retList.add(dob.getName());
            }
        }
        return retList;
    }

    public Object createInstance(List ordered) {
        return new PopupActions(ordered);
    }
}

</pre>

This <code>InstanceProvider</code> needs to be declared in <code>Class2LayerFolder</code> implementation:

<pre>
public class PopupInitializer implements Class2LayerFolder{
    
    public PopupInitializer() {
    }
    
    public Class getClazz(){
        return PopupActions.class;
    }
    
    public String getLayerFolderName(){
        return "Popup"; //NOI18N
    }

    public InstanceProvider getInstanceProvider() {
        return new PopupActions();
    }

}

</pre>

Now, we just need to register PopupInitializer into default lookup via META-INF/services 
registration and the initialization is done.

</usecase>


</answer>






<!--
        <question id="compat-i18n" when="impl">
            Is your module correctly internationalized?
            <hint>
            Correct internationalization means that it obeys instructions 
            at <a href="@org-openide-modules@/org/openide/modules/doc-files/i18n-branding.html">
            NetBeans I18N pages</a>.
            </hint>
        </question>
-->
<answer id="compat-i18n">
Yes.
</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">
Compatible with standards.
</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">
No.
</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">
JDK1.4 and higher can be used.
</answer>



<!--
        <question id="dep-jrejdk" when="final">
            Do you require the JDK or is the JRE enough?
        </question>
-->
<answer id="dep-jrejdk">
JRE is sufficient.
</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">
    <defaultanswer generate='here' />
</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">
No other projects.
</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">
All platforms.
</answer>



<answer id="deploy-dependencies">
Nothing.
</answer>



<!--
        <question id="deploy-jar" when="impl">
            Do you deploy just module JAR file(s) or other files as well?
            <hint>
            If your module consists of just one module JAR file, just confirm that.
            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">
No additional files.
</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">
Yes.
</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">
Yes.
</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">
Anywhere.
</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">
No.
</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">
No.
</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">
No.
</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">
No.
</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">
No.
</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">
No.
</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">
No.
</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">
No special threading models used.
</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">
No clipboard support.
</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">
No D&amp;D.
</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?
        </question>
-->
<answer id="format-types">
No files read or written to the disk.
</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.
            </hint>
        </question>
-->
<answer id="lookup-lookup">
Yes. The module searches for implementations of the <code>Class2LayerFolder</code>
interface in the default Lookup.
</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">
Yes. The module registers an implementation of the <code>MimeDataProvider</code>
interface via META-INF/services in the default Lookup.
</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">
No.
</answer>



<!--
        <question id="perf-exit" when="final">
            Does your module run any code on exit?
        </question>
-->
<answer id="perf-exit">
No.
</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">
No.
</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">
No limits.
</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">
    Not sure.
</answer>



<!--
        <question id="perf-menus" when="final">
            Does your module use dynamically updated context menus, or
            context-sensitive actions with complicated enablement logic?
        </question>
-->
<answer id="perf-menus">
No.
</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">
No.
</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">
    The number of Lookups that have been requested for different MimePaths and
    the number of objects (i.e. settings, services, etc.) registered in those
    lookups.
</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">
    The clients code is not enforced in any way to perform well. However, the
    implementation of the module uses caching and lazy loading wherever it is
    possible to minimize the number of objects loaded in memory.
</answer>



<!--
        <question id="perf-startup" when="final">
            Does your module run any code on startup?
        </question>
-->
<answer id="perf-startup">
No.
</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">
No.
</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">
Only in tests.
</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">
No. 
</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">
No.
</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">
Yes. 

<api group="layer" name="EditorsRegistry" type="export" category="official">
The module expects all mime type sensitive settings to be
placed in the subfolders hierarchy under the "Editors" folder on the default filesystem.
</api>
</answer>



<!--
        <question id="security-grant" when="final">
            Does your code grant addition rights to some code?
            <hint>Avoid using a classloder that adds some extra
            permissions to loaded code unless realy necessary.
            Also note that your API implementation
            can also expose unneeded permissions to enemy code by
            AccessController.doPrilileged() calls.</hint>
        </question>
-->
<answer id="security-grant">
No.
</answer>



<!--
        <question id="security-policy" when="final">
            Does your functionality require standard policy file modification?
            <hint>Your code may pass control to third party code not
            coming from trusted domain. It covers code downloaded over
            network or code coming from libraries that are not bundled
            with NetBeans. Which permissions it needs to grant to which domain?</hint>
        </question>
-->
<answer id="security-policy">
No.
</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">
No.
</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">
    Sources can be found in editor/mimelookup/impl module.
 </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">
    As the module's API/SPI has been naturaly evolving over the time the module contains
    several deprecated classes. All of them are still fully supported and the
    module remains backward compatible.
</answer>

</api-answers>
