| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| --> |
| <!DOCTYPE api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [ |
| <!ENTITY api-questions SYSTEM "../../nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml"> |
| ]> |
| |
| <api-answers |
| question-version="1.29" |
| author="sdedic@netbeans.org" |
| > |
| |
| &api-questions; |
| |
| |
| <!-- |
| <question id="arch-overall" when="init"> |
| Describe the overall architecture. |
| <hint> |
| What will be API for |
| <a href="http://wiki.netbeans.org/API_Design#Separate_API_for_clients_from_support_API"> |
| clients and what support API</a>? |
| What parts will be pluggable? |
| How will plug-ins be registered? Please use <code><api type="export"/></code> |
| to describe your general APIs and specify their |
| <a href="http://wiki.netbeans.org/API_Stability#Private"> |
| stability categories</a>. |
| If possible please provide simple diagrams. |
| </hint> |
| </question> |
| --> |
| <answer id="arch-overall"> |
| <p> |
| The module concentrates general classes and utilities which are independent of |
| client desktop (and Swing UI library) environment. Its desktop-dependent counterpart |
| moved to<a href="@org-openide-util-ui@/org/openide/util/package-summary.html">org.openide.util.ui module</a>. |
| </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/test/unit/src/">version control</a> |
| system. |
| </p> |
| </answer> |
| <answer id="arch-time"> |
| <p> |
| The implementation is already done, the |
| <a href="@org-openide-util-ui@/org/openide/util/package-summary.html">org.openide.util.ui module</a> |
| was created after NetBeans 8.0 release. |
| </p> |
| </answer> |
| <answer id="arch-usecases"> |
| <p> |
| Use-cases can be found in <a href="@org-openide-util-ui@/architecture-summary.html">org.openide.util.ui module</a> arch summary. |
| <usecase id="CharSequences" name="Efficient char sequences"> |
| Efficiently store character sequences in memory with the |
| help of <a href="@TOP@/org/openide/util/CharSequences.html">CharSequences</a> |
| utility class. |
| </usecase> |
| </p> |
| </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="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> |
| Maintainers of modules, which use <a href="@org-openide-util-ui@/architecture-summary.html">org.openide.util.ui</a> |
| should review and check their code whether they really need Swing/desktop dependencies. If not, they are |
| encouraged to upgrade their module dependencies and work with <a href="@TOP@/org/openide/util/BaseUtilities.html">BaseUtilities</a> |
| class instead of <a href="@org-openide-util-ui@/org/openide/util/Utilities.html">Utilities</a>. |
| </p> |
| </answer> |
| <answer id="compat-i18n"> |
| <p> |
| See <a href="@org-openide-util-ui@/architecture-summary.html">org.openide.util.ui</a>. |
| </p> |
| </answer> |
| |
| <answer id="compat-standards"> |
| <p> |
| No. |
| </p> |
| </answer> |
| <answer id="compat-version"> |
| <p> |
| No settings. |
| </p> |
| </answer> |
| <answer id="dep-jre"> |
| <p> |
| JRE 5 |
| </p> |
| </answer> |
| <answer id="dep-jrejdk"> |
| <p> |
| JRE should be sufficient |
| </p> |
| </answer> |
| <answer id="dep-nb"> |
| <defaultanswer generate='here' /> |
| </answer> |
| <answer id="dep-non-nb"> |
| <p> |
| No. |
| </p> |
| </answer> |
| <answer id="dep-platform"> |
| <p> |
| Independent. |
| </p> |
| </answer> |
| <answer id="deploy-dependencies"> |
| <p> |
| None. |
| </p> |
| </answer> |
| <answer id="deploy-jar"> |
| <p> |
| Just module JAR> |
| </p> |
| </answer> |
| <answer id="deploy-nbm"> |
| <p> |
| Yes. |
| </p> |
| </answer> |
| <answer id="deploy-packages"> |
| <p> |
| Yes. |
| </p> |
| </answer> |
| <answer id="deploy-shared"> |
| <p> |
| See <a href="@org-openide-util-ui@/architecture-summary.html">org.openide.util.ui</a>. |
| </p> |
| </answer> |
| <answer id="exec-ant-tasks"> |
| <p> |
| No. |
| </p> |
| </answer> |
| <answer id="exec-classloader"> |
| <p> |
| No. |
| </p> |
| </answer> |
| <answer id="exec-component"> |
| <p> |
| Does not use Swing, thus no Component |
| </p> |
| </answer> |
| <answer id="exec-introspection"> |
| <p> |
| No. |
| </p> |
| </answer> |
| <answer id="exec-privateaccess"> |
| <p> |
| <a href="@org-openide-util-ui@/architecture-summary.html">org.openide.util.ui</a> module may |
| call some functionality to preserve compatibility. |
| </p> |
| </answer> |
| <answer id="exec-process"> |
| <p> |
| No. |
| </p> |
| </answer> |
| <answer id="exec-property"> |
| <ul> |
| <li> |
| <api type='import' group="systemproperty" name="line.separator" category="standard" > |
| used on few places |
| </api>. |
| </li> |
| <li><api type="export" group="systemproperty" name="org.openide.util.RequestProcessor.inactiveTime" category="private"> |
| Specifies the time in ms unused <a href="@TOP@org/openide/util/RequestProcessor.html">RequestProcessor</a> |
| processor threads remain around, until |
| they get GCed. By default 60s. Primarily used from tests.</api></li> |
| </ul> |
| </answer> |
| <answer id="exec-reflection"> |
| <p> |
| <api category="devel" group="java" name="WeakListener.setAccessible" type="export" url="@TOP@/org/openide/util/WeakListeners.html"> |
| used to call the remove method using reflection |
| </api>. |
| </p> |
| </answer> |
| <answer id="exec-threading"> |
| <p> |
| See <a href="@org-openide-util-ui@/architecture-summary.html">org.openide.util.ui</a>. |
| </p> |
| </answer> |
| <answer id="format-clipboard"> |
| <p> |
| No such operation. |
| </p> |
| </answer> |
| <answer id="format-dnd"> |
| <p> |
| No such operation. |
| </p> |
| </answer> |
| <answer id="format-types"> |
| <p> |
| The <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Provider%20Configuration%20File">META-INF/services/...</a> files. |
| <api name="TranslateNames" category="official" type="export" group="java.io.File" |
| url="@TOP@/org/openide/util/BaseUtilities.html#translate-java.lang.String-"> |
| <a href="@TOP@/org/openide/util/BaseUtilities.html#translate-java.lang.String-">Utilities.translate</a> |
| reads <code>META-INF/netbeans/translate.names</code> files from JARs</api>. |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="lookup-lookup" when="init"> |
| Does your module use <code>org.openide.util.Lookup</code> |
| or any similar technology to find any components to communicate with? Which ones? |
| |
| <hint> |
| NetBeans is build around a generic registry of services called |
| lookup. It is preferable to use it for registration and discovery |
| if possible. See |
| <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/lookup/doc-files/index.html"> |
| The Solution to Comunication Between Components |
| </a>. If you do not plan to use lookup and insist usage |
| of other solution, then please describe why it is not working for |
| you. |
| <br/> |
| When filling the final version of your arch document, please |
| describe the interfaces you are searching for, where |
| are defined, whether you are searching for just one or more of them, |
| if the order is important, etc. Also classify the stability of such |
| API contract. Use <api group=&lookup& /> tag, so |
| your information gets listed in the summary page of your javadoc. |
| </hint> |
| </question> |
| --> |
| <answer id="lookup-lookup"> |
| <p> |
| XXX no answer for lookup-lookup |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="lookup-register" when="final"> |
| Do you register anything into lookup for other code to find? |
| <hint> |
| Do you register using layer file or using a declarative annotation such as <code>@ServiceProvider</code>? |
| Who is supposed to find your component? |
| </hint> |
| </question> |
| --> |
| <answer id="lookup-register"> |
| <p> |
| XXX no answer for lookup-register |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="lookup-remove" when="final"> |
| Do you remove entries of other modules from lookup? |
| <hint> |
| Why? Of course, that is possible, but it can be dangerous. Is the module |
| your are masking resource from aware of what you are doing? |
| </hint> |
| </question> |
| --> |
| <answer id="lookup-remove"> |
| <p> |
| XXX no answer for lookup-remove |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-exit" when="final"> |
| Does your module run any code on exit? |
| </question> |
| --> |
| <answer id="perf-exit"> |
| <p> |
| XXX no answer for perf-exit |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-huge_dialogs" when="final"> |
| Does your module contain any dialogs or wizards with a large number of |
| GUI controls such as combo boxes, lists, trees, or text areas? |
| </question> |
| --> |
| <answer id="perf-huge_dialogs"> |
| <p> |
| XXX no answer for perf-huge_dialogs |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-limit" when="init"> |
| Are there any hard-coded or practical limits in the number or size of |
| elements your code can handle? |
| <hint> |
| Most of algorithms have increasing memory and speed complexity |
| with respect to size of data they operate on. What is the critical |
| part of your project that can be seen as a bottleneck with |
| respect to speed or required memory? What are the practical |
| sizes of data you tested your project with? What is your estimate |
| of potential size of data that would cause visible performance |
| problems? Is there some kind of check to detect such situation |
| and prevent "hard" crashes - for example the CloneableEditorSupport |
| checks for size of a file to be opened in editor |
| and if it is larger than 1Mb it shows a dialog giving the |
| user the right to decide - e.g. to cancel or commit suicide. |
| </hint> |
| </question> |
| --> |
| <answer id="perf-limit"> |
| <p> |
| XXX no answer for perf-limit |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-mem" when="final"> |
| How much memory does your component consume? Estimate |
| with a relation to the number of windows, etc. |
| </question> |
| --> |
| <answer id="perf-mem"> |
| <p> |
| XXX no answer for perf-mem |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-menus" when="final"> |
| Does your module use dynamically updated context menus, or |
| context-sensitive actions with complicated and slow enablement logic? |
| <hint> |
| If you do a lot of tricks when adding actions to regular or context menus, you can significantly |
| slow down display of the menu, even when the user is not using your action. Pay attention to |
| actions you add to the main menu bar, and to context menus of foreign nodes or components. If |
| the action is conditionally enabled, or changes its display dynamically, you need to check the |
| impact on performance. In some cases it may be more appropriate to make a simple action that is |
| always enabled but does more detailed checks in a dialog if it is actually run. |
| </hint> |
| </question> |
| --> |
| <answer id="perf-menus"> |
| <p> |
| XXX no answer for perf-menus |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-progress" when="final"> |
| Does your module execute any long-running tasks? |
| |
| <hint>Long running tasks should never block |
| AWT thread as it badly hurts the UI |
| <a href="http://performance.netbeans.org/responsiveness/issues.html"> |
| responsiveness</a>. |
| Tasks like connecting over |
| network, computing huge amount of data, compilation |
| be done asynchronously (for example |
| using <code>RequestProcessor</code>), definitively it should |
| not block AWT thread. |
| </hint> |
| </question> |
| --> |
| <answer id="perf-progress"> |
| <p> |
| XXX no answer for perf-progress |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-scale" when="init"> |
| Which external criteria influence the performance of your |
| program (size of file in editor, number of files in menu, |
| in source directory, etc.) and how well your code scales? |
| <hint> |
| Please include some estimates, there are other more detailed |
| questions to answer in later phases of implementation. |
| </hint> |
| </question> |
| --> |
| <answer id="perf-scale"> |
| <p> |
| XXX no answer for perf-scale |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-spi" when="init"> |
| How the performance of the plugged in code will be enforced? |
| <hint> |
| If you allow foreign code to be plugged into your own module, how |
| do you enforce that it will behave correctly and quickly and will not |
| negatively influence the performance of your own module? |
| </hint> |
| </question> |
| --> |
| <answer id="perf-spi"> |
| <p> |
| XXX no answer for perf-spi |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-startup" when="final"> |
| Does your module run any code on startup? |
| </question> |
| --> |
| <answer id="perf-startup"> |
| <p> |
| XXX no answer for perf-startup |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="perf-wakeup" when="final"> |
| Does any piece of your code wake up periodically and do something |
| even when the system is otherwise idle (no user interaction)? |
| </question> |
| --> |
| <answer id="perf-wakeup"> |
| <p> |
| XXX no answer for perf-wakeup |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="resources-file" when="final"> |
| Does your module use <code>java.io.File</code> directly? |
| |
| <hint> |
| NetBeans provide a logical wrapper over plain files called |
| <code>org.openide.filesystems.FileObject</code> that |
| provides uniform access to such resources and is the preferred |
| way that should be used. But of course there can be situations when |
| this is not suitable. |
| </hint> |
| </question> |
| --> |
| <answer id="resources-file"> |
| <p> |
| XXX no answer for resources-file |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="resources-layer" when="final"> |
| Does your module provide own layer? Does it create any files or |
| folders in it? What it is trying to communicate by that and with which |
| components? |
| |
| <hint> |
| NetBeans allows automatic and declarative installation of resources |
| by module layers. Module register files into appropriate places |
| and other components use that information to perform their task |
| (build menu, toolbar, window layout, list of templates, set of |
| options, etc.). |
| </hint> |
| </question> |
| --> |
| <answer id="resources-layer"> |
| <p> |
| XXX no answer for resources-layer |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="resources-mask" when="final"> |
| Does your module mask/hide/override any resources provided by other modules in |
| their layers? |
| |
| <hint> |
| If you mask a file provided by another module, you probably depend |
| on that and do not want the other module to (for example) change |
| the file's name. That module shall thus make that file available as an API |
| of some stability category. |
| </hint> |
| </question> |
| --> |
| <answer id="resources-mask"> |
| <p> |
| XXX no answer for resources-mask |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="resources-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> |
| |
| |
| |
| <!-- |
| <question id="resources-read" when="final"> |
| Does your module read any resources from layers? For what purpose? |
| |
| <hint> |
| As this is some kind of intermodule dependency, it is a kind of API. |
| Please describe it and classify according to |
| <a href="http://wiki.netbeans.org/API_Design#What_is_an_API.3F"> |
| common stability categories</a>. |
| </hint> |
| </question> |
| --> |
| <answer id="resources-read"> |
| <p> |
| XXX no answer for resources-read |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="security-grant" when="final"> |
| Does your code grant additional rights to some other code? |
| <hint>Avoid using a class loader that adds extra |
| permissions to loaded code unless really necessary. |
| Also note that your API implementation |
| can also expose unneeded permissions to enemy code by |
| calling AccessController.doPrivileged().</hint> |
| </question> |
| --> |
| <answer id="security-grant"> |
| <p> |
| XXX no answer for security-grant |
| </p> |
| </answer> |
| |
| |
| |
| <!-- |
| <question id="security-policy" when="final"> |
| Does your functionality require modifications to the standard policy file? |
| <hint>Your code might pass control to third-party code not |
| coming from trusted domains. This could be code downloaded over the |
| network or code coming from libraries that are not bundled |
| with NetBeans. Which permissions need to be granted to which domains?</hint> |
| </question> |
| --> |
| <answer id="security-policy"> |
| <p> |
| XXX no answer for security-policy |
| </p> |
| </answer> |
| |
| </api-answers> |