| <?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="jtulach@netbeans.org" |
| > |
| |
| &api-questions; |
| |
| <answer id="arch-overall"> |
| <p> |
| This module defines the <a href="@TOP@/org/openide/util/Lookup.html"> |
| Lookup</a> which is the NetBeans way for dynamic registration |
| and lookup of |
| components in our modularized component system. It allows lookup and discovery |
| of features by description of their interfaces. The classes are devided |
| into two parts. The |
| <api group="java" name="LookupAPI" type="export" category="official" url="@TOP@/org/openide/util/lookup/doc-files/lookup-api.html"> |
| allows the discovery</api> and the |
| <api group="java" name="LookupSPI" type="export" category="official" url="@TOP@/org/openide/util/lookup/doc-files/lookup-spi.html"> |
| simplifies creation and registration of own lookup objects</api>. |
| </p> |
| </answer> |
| |
| |
| <answer id="arch-quality"> |
| <p> |
| There is a lot of unit tests in |
| <a href="http://hg.netbeans.org/main-golden/openide.util.lookup/test/unit/src/">version control</a> |
| system. |
| </p> |
| </answer> |
| |
| <answer id="arch-time"> |
| <p> |
| The module has been around since 1997 and is continously being improved |
| from time to time. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="arch-usecases"> |
| <a onclick="target='_blank'" href="https://leanpub.com/nbp4beginners"> |
| <img src="http://wiki.apidesign.org/images/0/03/NetBeansPlatformForBeginners.jpg" |
| style="float: right" |
| width="60" height="70" alt="Cover of NetBeans Platform for Beginners book"/> |
| </a> |
| |
| There is a great introduction to Lookup and its usage in its |
| <a href="@TOP@/org/openide/util/Lookup.html">javadoc</a>. |
| For details on this topic, |
| together with code samples, see chapter 4, |
| of <a onclick="target='_blank'" href="https://leanpub.com/nbp4beginners">NetBeans Platform for Beginners</a> |
| by Jason Wexbridge and Walter Nyland. |
| In addition to that here is |
| a list of frequently asked or interesting questions slowly expanding as |
| people ask them: |
| |
| <h3>Lookup faq:</h3> |
| |
| <usecase id="lookup-on-certain-platform" name="How to specify that a service in Lookup should be available only on Windows?" > |
| <em><b>Q:</b> |
| Most of the time I specify interfaces that I want to add to the Lookup class in the layer.xml file. |
| But, let's say I have a platform-specific interface (something on Windows only, for instance).</em> |
| <p> |
| <em> |
| How can I specify (in the xml, or programmatically) that this service should only be added to the Lookup if the platform is Windows? |
| </em>> |
| </p> |
| In general there are three ways to achieve this. |
| <ul> |
| <li><p>It is possible to write a specific module and enable it only on windows. |
| See <a href="@org-openide-modules@/org/openide/modules/doc-files/api.html#how-os-specific">os specific modules</a> documentation. |
| Then you can put a registration of your instance into your module's |
| <a href="@org-openide-util@/org/openide/util/doc-files/api.html#service-lookup">META-INF/services</a> directory and it |
| will be available only on Windows.</p> |
| </li> |
| |
| <li><p>Another possibility that does not require new module, but which executes |
| a code on startup (which may have performance implications) is to use <code>methodvalue</code> |
| attribute. Register your instance in layer using <code>your-Object.instance</code> file |
| as described at |
| <a href="@org-openide-util@/org/openide/util/doc-files/api.html#ido-methodvalue">services |
| </a> documentation and in your factory method either return the instance |
| your want or <code>null</code> depending on result of <a href="@org-openide-util@/org/openide/util/BaseUtilities.html#isWindows--"> |
| Utilities.isWindows()</a> call.</p> |
| </li> |
| <li> |
| <p> |
| In some cases, the interface for which you will register an implementation permits a |
| no-operation semantics. For example, <code>InstalledFileLocator.locate(...)</code> can |
| return a valid <code>File</code>, or null. You could always register an |
| <code>InstalledFileLocator</code> instance yet disable it on non-Windows platforms |
| (always returning null). |
| </p> |
| </li> |
| </ul> |
| |
| </usecase> |
| |
| <usecase id="lookup-extension-point" name="How shall I write an extension point for my module?" > |
| <p> |
| <em><b>Q:</b> |
| I have more modules one of them providing the core functionality and |
| few more that wish to extend it. What is the right way to do it? |
| How does the Netbeans platform declare such extension point? |
| </em> |
| </p> |
| |
| <p> |
| |
| Start with declaring an extension interface in your |
| core module and put it into the module's <em>public packages</em>. Imagine |
| for example that the core module is in JAR file <code>org-my-netbeans-coremodule.jar</code> |
| and already contains in manifests line like |
| <code>OpenIDE-Module: org.my.netbeans.coremodule/1</code> and wants |
| to display various tips of the day provided by other modules and thus defines: |
| </p><pre> |
| <span class="java-keywords">package</span> <span class="java-identifier">org</span><span class="java-operators">.</span><span class="java-identifier">my</span><span class="java-operators">.</span><span class="java-identifier">netbeans</span><span class="java-operators">.</span><span class="java-identifier">coremodule</span><span class="java-operators">;</span> |
| |
| <span class="java-keywords">public</span> <span class="java-keywords">interface</span> <span class="java-identifier">TipsOfTheDayProvider</span> <span class="java-operators">{</span> |
| <span class="java-keywords">public</span> <span class="java-identifier">String</span> <span class="java-layer-method">provideTipOfTheDay</span> <span class="java-operators">(</span><span class="java-operators">)</span><span class="java-operators">;</span> |
| <span class="java-operators">}</span> |
| </pre><p> |
| And in its manifest adds line |
| <code>OpenIDE-Module-Public-Packages: org.my.netbeans.coremodule.*</code> |
| to specify that this package contains exported API and shall be |
| accessible to other modules. |
| </p> |
| <p> |
| When the core module is about to display the tip of the day it can ask |
| the system for all registered instances of the <code>TipsOfTheDayProvider</code>, |
| randomly select one of them: |
| </p><pre> |
| <span class="java-keywords">import</span> <span class="java-identifier">java</span><span class="java-operators">.</span><span class="java-identifier">util</span><span class="java-operators">.</span><span class="java-identifier">Collection</span><span class="java-operators">;</span> |
| <span class="java-keywords">import</span> <span class="java-identifier">java</span><span class="java-operators">.</span><span class="java-identifier">util</span><span class="java-operators">.</span><span class="java-identifier">Collections</span><span class="java-operators">;</span> |
| <span class="java-keywords">import</span> <span class="java-identifier">org</span><span class="java-operators">.</span><span class="java-identifier">openide</span><span class="java-operators">.</span><span class="java-identifier">util</span><span class="java-operators">.</span><span class="java-identifier">Lookup</span><span class="java-operators">;</span> |
| |
| <a href="@TOP@org/openide/util/Lookup.Result.html"><span class="java-identifier">Lookup</span><span class="java-operators">.</span><span class="java-identifier">Result</span></a> <span class="java-identifier">result</span> <span class="java-operators">=</span> <a href="@TOP@org/openide/util/Lookup.html"><span class="java-identifier">Lookup</span></a><span class="java-operators">.</span><span class="java-layer-method">getDefault</span> <span class="java-operators">(</span><span class="java-operators">)</span><span class="java-operators">.</span><span class="java-layer-method">lookup</span> <span class="java-operators">(</span><span class="java-keywords">new</span> <a href="@TOP@org/openide/util/Lookup.Template.html"><span class="java-identifier">Lookup</span><span class="java-operators">.</span><span class="java-layer-method">Template</span></a> <span class="java-operators">(</span><span class="java-identifier">TipsOfTheDayProvider</span><span class="java-operators">.</span><span class="java-keywords">class</span><span class="java-operators">)</span><span class="java-operators">)</span><span class="java-operators">;</span> |
| <span class="java-identifier">Collection</span> <span class="java-identifier">c</span> <span class="java-operators">=</span> <span class="java-identifier">result</span><span class="java-operators">.</span><a href="@TOP@org/openide/util/Lookup.Result.html#allInstances--"><span class="java-layer-method">allInstances</span></a> <span class="java-operators">(</span><span class="java-operators">)</span><span class="java-operators">;</span> |
| <span class="java-identifier">Collections</span><span class="java-operators">.</span><span class="java-layer-method">shuffle</span> <span class="java-operators">(</span><span class="java-identifier">c</span><span class="java-operators">)</span><span class="java-operators">;</span> |
| <span class="java-identifier">TipsOfTheDayProvider</span> <span class="java-identifier">selected</span> <span class="java-operators">=</span> <span class="java-operators">(</span><span class="java-identifier">TipsOfTheDayProvider</span><span class="java-operators">)</span><span class="java-identifier">c</span><span class="java-operators">.</span><span class="java-layer-method">iterator</span> <span class="java-operators">(</span><span class="java-operators">)</span><span class="java-operators">.</span><span class="java-layer-method">next</span> <span class="java-operators">(</span><span class="java-operators">)</span><span class="java-operators">;</span> |
| </pre><p> |
| and then display the tip. Simple, trivial, just by the usage of |
| <a href="@TOP@org/openide/util/Lookup.html">Lookup</a> interface once |
| creates a registry that other modules can enhance. But such enhancing |
| of course requires work on the other side. Each module that would like |
| to register its <code>TipsOfTheDayProvider</code> needs to depend on the |
| core module - add |
| <code>OpenIDE-Module-Module-Dependencies: org.my.netbeans.coremodule/1</code> |
| into its manifest and write a class with its own implementation of the |
| provider:</p><pre> |
| <span class="java-keywords">package</span> <span class="java-identifier">org</span><span class="java-operators">.</span><span class="java-identifier">my</span><span class="java-operators">.</span><span class="java-identifier">netbeans</span><span class="java-operators">.</span><span class="java-identifier">extramodule</span><span class="java-operators">;</span> |
| |
| <span class="java-keywords">class</span> <span class="java-identifier">ExtraTip</span> <span class="java-keywords">implements</span> <span class="java-identifier">TipsOfTheDayProvider</span> <span class="java-operators">{</span> |
| <span class="java-keywords">public</span> <span class="java-identifier">String</span> <span class="java-layer-method">provideTipOfTheDay</span> <span class="java-operators">(</span><span class="java-operators">)</span> <span class="java-operators">{</span> |
| <span class="java-keywords">return</span> <span class="java-string-literal">"Do you know that in order to write extension point you should use Lookup?"</span><span class="java-operators">;</span> |
| <span class="java-operators">}</span> |
| <span class="java-operators">}</span> |
| </pre><p> |
| Then, the only necessary thing is to register such class by using the |
| J2SE standard <api name="ProviderRegistrationMechanism" |
| type="import" |
| category="standard" |
| group="java" /> into plain text file |
| <code>META-INF/services/org.my.netbeans.coremodule.TipsOfTheDayProvider</code> |
| in the module JAR containing just one line: </p><pre> |
| org.my.netbeans.extramodule.ExtraTip |
| </pre><p> |
| and your modules are now ready to communicate |
| using your own <em>extension point</em>. |
| </p> |
| |
| </usecase> |
| </answer> |
| |
| |
| |
| <answer id="arch-what"> |
| <p> |
| Described in the <a href="@TOP@/architecture-summary.html#answer-arch-overall">overall</a> answer. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="compat-standards"> |
| <p> |
| The default lookup registration follows the JDK's |
| <api name="ProviderRegistrationMechanism" |
| type="import" |
| category="standard" |
| url="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Provider%20Configuration%20File" |
| group="java" |
| /> |
| but enhances it to also support the |
| <api |
| name="ProviderRegistrationRemoval" |
| type="export" |
| category="devel" |
| url="@org-openide-util@/org/openide/util/doc-files/api.html#service-lookup" |
| group="java" |
| />. |
| </p> |
| </answer> |
| |
| <answer id="compat-version"> |
| <p> |
| This module has no settings. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="dep-jre"> |
| <p> |
| Currently JRE 1.5 is needed. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="dep-jrejdk"> |
| <p> |
| JRE is enough. |
| </p> |
| </answer> |
| |
| |
| <answer id="dep-nb"> |
| <p>N/A</p> |
| </answer> |
| |
| <answer id="dep-platform"> |
| <p> |
| Platform independent. |
| </p> |
| </answer> |
| |
| |
| <answer id="deploy-dependencies"> |
| <p> |
| Nothing. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="deploy-jar"> |
| <p> |
| <api category="devel" group="java.io.File" name="FileLocation" type="export" > |
| the JAR file is located in platform cluster under <code>lib/org-openide-util-lookup.jar</code> |
| </api>. |
| </p> |
| </answer> |
| |
| <answer id="deploy-shared"> |
| <p> |
| Module is on real java classpath and as such it has to be in the shared directory. |
| </p> |
| </answer> |
| |
| |
| <answer id="exec-ant-tasks"> |
| <p> |
| No. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="exec-classloader"> |
| <p> |
| No, we do not create own classloader. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="exec-privateaccess"> |
| <p> |
| No. |
| </p> |
| </answer> |
| |
| <answer id="exec-process"> |
| <p> |
| No external processes executed. |
| </p> |
| </answer> |
| |
| |
| <answer id="exec-property"> |
| <ul> |
| <li> |
| <api type="export" group="systemproperty" name="org.openide.util.Lookup" category="devel"> |
| checked by the initialization of the |
| <a href="@TOP@/org/openide/util/Lookup.html#getDefault--">Lookup.getDefault()</a> |
| and can |
| contain name of a class that extends <code>org.openide.util.Lookup</code> and |
| has public constructor, that should be instantiated and returned from |
| <a href="@TOP@/org/openide/util/Lookup.html#getDefault--">Lookup.getDefault()</a> |
| the class will be loaded by |
| <a href="@JDK@/java/lang/Thread.html#getContextClassLoader--"> |
| Thread.currentThread().getContextClassLoader()</a> |
| classloader the first time <code>Lookup.getDefault</code> is invoked. |
| <p/> |
| The property can also contain value <code>"-"</code> which means to completely |
| disable the lookup instantiation and return <a href="@TOP@/org/openide/util/Lookup.html#EMPTY">Lookup.EMPTY</a> |
| from <a href="@TOP@/org/openide/util/Lookup.html#getDefault--">Lookup.getDefault()</a>. |
| <p/> |
| If the property is unspecified, the default <code>MetaInfServicesLookup</code> |
| is constructed for <code>Thread.currentThread().getContextclassLoader()</code> |
| that implements the <a href="architecture-summary.html#answer-compat-standards">JDK's standard</a>. If, by |
| a chance an instance of |
| <a href="@TOP@/org/openide/util/Lookup.Provider.html">Lookup.Provider</a> |
| is found |
| in there, its lookup is returned as result. Otherwise the <code>MetaInfServicesLookup</code> |
| is the result of <a href="@TOP@/org/openide/util/Lookup.html#getDefault--">Lookup.getDefault()</a>. |
| </api> |
| </li> |
| |
| <li> |
| <api type="export" group="systemproperty" name="org.openide.util.Lookup.paths" category="devel"> |
| Sometimes it may be useful for the Lookup to contains objects from |
| some system file system folder. This can be done with |
| <code>org.openide.util.Lookup.paths=Folder1:Folder2:Folder3</code>. |
| If this property is set prior to first call to |
| <a href="@TOP@/org/openide/util/Lookup.html#getDefault--">Lookup.getDefault()</a>, |
| it is split into pieces (separator is <code>':'</code>) and individual |
| parts are then used to construct <code>Lookups.forPath("Folder1")</code>, |
| etc. All these lookups then become part of the |
| <a href="@TOP@/org/openide/util/Lookup.html#getDefault--">Lookup.getDefault()</a> |
| one. This property works since version 7.24 |
| </api> |
| </li> |
| |
| </ul> |
| </answer> |
| |
| |
| |
| <answer id="exec-reflection"> |
| <p> |
| <api category="devel" group="java" name="Lookups.metaInfServices" type="export" url="@TOP@/org/openide/util/lookup/Lookups.html#metaInfServices-java.lang.ClassLoader-"> |
| calls constructor of registered classes using reflection |
| </api>. |
| <api category="friend" group="java" name="Lookup.resetDefaultLookup" type="export"> |
| There is a static private method <code>Lookup.resetDefaultLookup</code> that |
| is called by NbJUnit's <code>MockServices</code> to properly reset default |
| lookup and fire changes to all registred listeners. |
| </api>. |
| |
| </p> |
| </answer> |
| |
| <answer id="exec-threading"> |
| <p> |
| Everything is synchronous, except pluggable use of <code>java.util.concurrent.Executor</code> |
| that allows to make calls asynchronous. The default implementation only delivers |
| changes from <a href="@TOP@/org/openide/util/lookup/Lookups.html#metaInfServices-java.lang.ClassLoader-">metaInfServices</a> |
| lookup in asynchronous thread. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="format-clipboard"> |
| <p> |
| Not used. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="format-dnd"> |
| <p> |
| The same as for clipboard. |
| </p> |
| </answer> |
| |
| <answer id="format-types"> |
| <p> |
| No. |
| </p> |
| </answer> |
| |
| |
| |
| <answer id="lookup-lookup"> |
| <ul> |
| <li><api name="LookupInitializationLookup" category="devel" group="lookup" type="export" url="#systemproperty-org.openide.util.Lookup"> |
| during |
| initialization of the <a href="@TOP@/org/openide/util/Lookup.html#getDefault--">Lookup.getDefault()</a> |
| the <a href="@TOP@/org/openide/util/Lookup.Provider.html">Lookup.Provider</a> |
| is being searched</api>. |
| </li> |
| |
| <li><api name="LookupSharedClassObject" category="devel" group="lookup" type="export"> |
| singleton subclasses of <a href="@org-openide-util-ui@/org/openide/util/SharedClassObject.html">SharedClassObject</a> |
| are searched for using Lookup. |
| </api>.</li> |
| |
| <li><api name="LookupClassLoader" category="devel" group="lookup" type="export"> |
| Nearly all resource looking functions and reflective code |
| uses <a href="@JDK@/java/lang/ClassLoader.html">ClassLoader</a> |
| obtained from <a href="@TOP@/org/openide/util/Lookup.html#getDefault--">Lookup.getDefault()</a> |
| for loading system wide resources. |
| </api>.</li> |
| |
| </ul> |
| </answer> |
| |
| |
| |
| <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> |
| Nothing. |
| </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> |
| The default implementation of the <code>MetaInfServicesLookup</code> just |
| keeps hashmap between queried classes and their implementations. The amount |
| of memory is linear to amount of registered classes, but of course we |
| are not counting the memory occupied by the instances which the lookup |
| creates, that can be arbitrary. |
| </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> |
| There are no big data structures. The amount of memory occupied by |
| instances of <a href="@TOP@/org/openide/util/lookup/AbstractLookup.html">AbstractLookup</a> |
| is measured by unit tests. |
| </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> |
| There are no menus. |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-progress" when="final"> |
| Does your module execute any long-running tasks? |
| |
| <hint>Long running tasks should never block |
| AWT thread as it badly hurts the UI |
| <a href="http://performance.netbeans.org/responsiveness/issues.html"> |
| responsiveness</a>. |
| Tasks like connecting over |
| network, computing huge amount of data, compilation |
| be done asynchronously (for example |
| using <code>RequestProcessor</code>), definitively it should |
| not block AWT thread. |
| </hint> |
| </question> |
| --> |
| <answer id="perf-progress"> |
| <p> |
| 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> |
| Lookup code scales linearily. |
| </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 enforcing is done. |
| </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. |
| </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-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 security permitions manipulated. |
| </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 security permissions manipulated. |
| </p> |
| </answer> |
| |
| |
| |
| |
| <!-- |
| <question id="arch-where" when="init"> |
| Where one can find sources for your module? |
| <hint> |
| Please provide link to the CVS web client at |
| http://www.netbeans.org/download/source_browse.html |
| or just use tag defaultanswer generate='here' |
| </hint> |
| </question> |
| --> |
| <answer id="arch-where"> |
| <defaultanswer generate='here' /> |
| </answer> |
| |
| |
| |
| |
| <!-- |
| <question id="compat-deprecation" when="init"> |
| How the introduction of your project influences functionality |
| provided by previous version of the product? |
| <hint> |
| If you are planning to deprecate/remove/change any existing APIs, |
| list them here accompanied with the reason explaining why you |
| are doing so. |
| </hint> |
| </question> |
| --> |
| <answer id="compat-deprecation"> |
| <p> |
| XXX no answer for compat-deprecation |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="resources-preferences" when="final"> |
| Does your module uses preferences via Preferences API? Does your module use NbPreferences or |
| or regular JDK Preferences ? Does it read, write or both ? |
| Does it share preferences with other modules ? If so, then why ? |
| <hint> |
| You may use |
| <api type="export" group="preferences" |
| name="preference node name" category="private"> |
| description of individual keys, where it is used, what it |
| influences, whether the module reads/write it, etc. |
| </api> |
| 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> |
| XXX no answer for resources-preferences |
| </p> |
| </answer> |
| |
| </api-answers> |