站内搜索: 请输入搜索关键词
当前页面: 在线文档首页 > NetBeans API Javadoc (Current Development Version)

Search API - NetBeans Architecture Questions - NetBeans API Javadoc (Current Development Version)

NetBeans Architecture Answers for Search API module

WARNING: answering questions version 1.26 rather than the current 1.29.

Interfaces table

Group of java interfaces
Interface NameIn/OutStabilitySpecified in What Document?
SearchAPIExportedUnder Developmentindex.html

defines interfaces SearchInfo, FileObjectFilter and a factory class SearchInfoFactory

FilesystemsAPIImportedOfficial .../openide/filesystems/doc-files/api.html

.../overview-summary.html

The module is needed for compilation. The module is used during runtime. Specification version 6.2 is required.

LoadersAPIImportedOfficial .../org/openide/loaders/doc-files/api.html

.../overview-summary.html

The module is needed for compilation. The module is used during runtime.

GeneralQueriesAPIImportedUnder Development .../index.html

.../overview-summary.html

The module is needed for compilation. The module is used during runtime.

UtilitiesAPIImportedOfficial../org-openide-util/overview-summary.html

The module is needed for compilation. The module is used during runtime. Specification version 6.2 is required.

NodesAPIImportedOfficial .../overview-summary.html

The module is needed for compilation. The module is used during runtime. Specification version 6.2 is required.

Group of lookup interfaces
Interface NameIn/OutStabilitySpecified in What Document?
SearchInfo-lookupImportedStable

Helper method SearchInfoFactory.createSearchInfoBySubnodes(Node), which combines SearchInfo objects of multiple nodes to a single SearchInfo object, uses the lookup mechanism to obtain SearchInfo objects from the nodes.


General Information

    Question (arch-what): What is this project good for?

    Answer:

    It allows other modules to define how the nodes they define should be searched, without depending on any concrete module containing the search feature.

    Question (arch-overall): Describe the overall architecture.

    Answer:

    The module is useless by itself. It contains an SPI which can be used by modules defining nodes to make the nodes searchable, or to specify how the nodes should be searched, and an API which makes implementation of the SPI easier.

    Question (arch-usecases): Describe the main use cases 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?

    Answer:

    The SearchInfo API+SPI allows other modules to specify whether and how should nodes they define be searched.

    The definition is represented by objects implementing interface SearchInfo. To enable searching on a custom node, a SearchInfo object must be added to the node's lookup. In most cases, there is no need to define own class implementing the interface - one can use factory methods of class SearchInfoFactory.

    Example:

    import org.openide.util.lookup.Lookups;
      
    public class MyNode extends AbstractNode {
    
        public MyNode(FileObject folder) {
            super( new MyNodeChildren(folder),
                   Lookups.singleton(SearchInfoFactory.createSearchInfo(
                         folder,
                         true,
                         new FileObjectFilter[] {
                                 SearchInfoFactory.VISIBILITY_FILTER
                         }) );
        }
    
        ...
    
    }

    One of the factory methods - createSearchInfoBySubnodes(...) - requires that a reference to the node itself. In this case, it is not possible to fully define the lookup in the super(...) statement of the constructor because a reference to the node is not available until the call of super(...) returns. In this case, a special technique must be used:

    import org.openide.util.lookup.AbstractLookup;
    import org.openide.util.lookup.InstanceContent;
      
    public class MyNode extends AbstractNode {
    
        public MyNode() {
            this(new InstanceContent());
        }
    
        public MyNode(InstanceContent ic) {
            super(new AbstractLookup(ic));
            ic.add(SearchInfoFactory.createSearchInfoBySubnodes(this));
        }
    
        ...
    
    }
    SearchAPI - defines interfaces SearchInfo, FileObjectFilter and a factory class SearchInfoFactory

    Question (arch-time): What are the time estimates of the work?

    Answer:

    The module is fully implemented.

    The test are not real unit tests as they rely on functionality of projects. Modification of tests to real unit tests would require 3 or 4 more days.

    Question (arch-quality): How will the quality of your code be tested and how are future regressions going to be prevented?

    Answer:

    There is one test class which tests implementations of interface SearchInfo produced by factory class SearchInfoFactory.

    Question (arch-where): Where one can find sources for your module?

    Answer:

    The sources for the module are in NetBeans CVS in openidex directory.


Project and platform dependencies

    Question (dep-nb): What other NetBeans projects and modules does this one depend on?

    Answer: FilesystemsAPI - LoadersAPI - GeneralQueriesAPI -

    The default answer to this question is:

    These modules are required in project.xml:

    • FilesystemsAPI - The module is needed for compilation. The module is used during runtime. Specification version 6.2 is required.
    • UtilitiesAPI - The module is needed for compilation. The module is used during runtime. Specification version 6.2 is required.
    • NodesAPI - The module is needed for compilation. The module is used during runtime. Specification version 6.2 is required.
    • LoadersAPI - The module is needed for compilation. The module is used during runtime.
    • GeneralQueriesAPI - The module is needed for compilation. The module is used during runtime.

    Question (dep-non-nb): What other projects outside NetBeans does this one depend on?

    Answer:

    No such project known at the moment.

    Question (dep-platform): On which platforms does your module run? Does it run in the same way on each?

    Answer:

    It runs on all platforms with a JRE 1.4+. It runs in the same way on each.

    Question (dep-jre): Which version of JRE do you need (1.2, 1.3, 1.4, etc.)?

    Answer:

    The module has been tested with JDK 1.4 and JDK 1.5. It should run with JDK/JRE 1.3.x, too, but it has not been tested for it.

    Question (dep-jrejdk): Do you require the JDK or is the JRE enough?

    Answer:

    JRE is enough.


Deployment

    Question (deploy-jar): Do you deploy just module JAR file(s) or other files as well?

    Answer:

    The module consists of just one JAR file.

    Question (deploy-nbm): Can you deploy an NBM via the Update Center?

    Answer:

    XXX no answer for deploy-nbm

    Question (deploy-shared): Do you need to be installed in the shared location only, or in the user directory only, or can your module be installed anywhere?

    Answer:

    XXX no answer for deploy-shared

    Question (deploy-packages): Are packages of your module made inaccessible by not declaring them public?

    Answer:

    Yes. Only package org.openidex.search is declared public.

    Question (deploy-dependencies): What do other modules need to do to declare a dependency on this one, in addition to or instead of the normal module dependency declaration (e.g. tokens to require)?

    Answer:

    Nothing.


Compatibility with environment

    Question (compat-i18n): Is your module correctly internationalized?

    Answer:

    Yes.

    Question (compat-standards): Does the module implement or define any standards? Is the implementation exact or does it deviate somehow?

    Answer:

    No, it does not implement or define any standards.

    Question (compat-version): 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?

    Answer:

    Yes, different versions of the module can coexist. The module has no settings and will not attempt to read settings of the future versions having settings, if any.

    Question (compat-deprecation): How the introduction of your project influences functionality provided by previous version of the product?

    WARNING: Question with id="compat-deprecation" has not been answered!

Access to resources

    Question (resources-file): Does your module use java.io.File directly?

    Answer:

    Yes. But only because it is required by another API, specifically by method org.netbeans.api.queries.SharabilityQuery.getSharability(File).

    Question (resources-layer): 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?

    Answer:

    No.

    Question (resources-read): Does your module read any resources from layers? For what purpose?

    Answer:

    No.

    Question (resources-mask): Does your module mask/hide/override any resources provided by other modules in their layers?

    Answer:

    No.

    Question (resources-preferences): 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 ?

    WARNING: Question with id="resources-preferences" has not been answered!

Lookup of components

    Question (lookup-lookup): Does your module use org.openide.util.Lookup or any similar technology to find any components to communicate with? Which ones?

    Answer:

    Yes.

    Objects implementing interface SearchInfo (defined in this module) are expected to be registered in lookups of nodes (only on instance per node). SearchInfo-lookup - Helper method SearchInfoFactory.createSearchInfoBySubnodes(Node), which combines SearchInfo objects of multiple nodes to a single SearchInfo object, uses the lookup mechanism to obtain SearchInfo objects from the nodes.

    Question (lookup-register): Do you register anything into lookup for other code to find?

    Answer:

    No.

    Question (lookup-remove): Do you remove entries of other modules from lookup?

    Answer:

    No.


Execution Environment

    Question (exec-property): Is execution of your code influenced by any environment or Java system (System.getProperty) property? On a similar note, is there something interesting that you pass to java.util.logging.Logger? Or do you observe what others log?

    Answer:

    No.

    Question (exec-component): Is execution of your code influenced by any (string) property of any of your components?

    Answer:

    No.

    Question (exec-ant-tasks): Do you define or register any ant tasks that other can use?

    Answer:

    No.

    Question (exec-classloader): Does your code create its own class loader(s)?

    Answer:

    No.

    Question (exec-reflection): Does your code use Java Reflection to execute other code?

    Answer:

    No.

    Question (exec-privateaccess): Are you aware of any other parts of the system calling some of your methods by reflection?

    Answer:

    No.

    Question (exec-process): 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?

    Answer:

    No.

    Question (exec-introspection): Does your module use any kind of runtime type information (instanceof, work with java.lang.Class, etc.)?

    Answer:

    No.

    Question (exec-threading): What threading models, if any, does your module adhere to? How the project behaves with respect to threading?

    Answer:

    None.

    Question (security-policy): Does your functionality require modifications to the standard policy file?

    Answer:

    No.

    Question (security-grant): Does your code grant additional rights to some other code?

    Answer:

    No.


Format of files and protocols

    Question (format-types): 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?

    Answer:

    None.

    Question (format-dnd): Which protocols (if any) does your code understand during Drag & Drop?

    Answer:

    Drag & Drop is not applicable.

    Question (format-clipboard): Which data flavors (if any) does your code read from or insert to the clipboard (by access to clipboard on means calling methods on java.awt.datatransfer.Transferable?

    Answer:

    None.


Performance and Scalability

    Question (perf-startup): Does your module run any code on startup?

    Answer:

    No.

    Question (perf-exit): Does your module run any code on exit?

    Answer:

    No.

    Question (perf-scale): 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?

    Answer:

    Implementations of interface SearchInfo produced by factory class SearchInfoFactory scale well, except for the case that there are multiple nodes using SearchInfoFactory.createSearchInfoBySubnodes(Node) in a (sub)tree of a hierarchy of nodes. If the whole branch is being searched, the performance may be a little bit slower. The more such nodes there are on the way from the (sub)tree's root to the leaves, the lower is the speed of the the root node's SearchInfo implementation. This is a theoretical implication and no performance problems have been observed yet.

    Question (perf-limit): Are there any hard-coded or practical limits in the number or size of elements your code can handle?

    Answer:

    No.

    Question (perf-mem): How much memory does your component consume? Estimate with a relation to the number of windows, etc.

    Answer:

    Amount of memory consumed by implementations of interface SearchInfo, produced by class SearchInfoFactory, is related to the maximum nesting level of folder/nodes and to the maximum number of folders/nodes in each level. Except for very extreme conditions, the amount of memory is not essential. Term "extreme conditions" comprises:

    • very deep hierarchy of nodes and very large number of nodes in each level
    • very big amount (thousands and more) of nodes having defined SearchInfo objects

    Memory footprint of SearchInfo implementations returned by factory class SearchInfoFactory is low. This may not be true for custom plugged-in implementations.

    Question (perf-wakeup): Does any piece of your code wake up periodically and do something even when the system is otherwise idle (no user interaction)?

    Answer:

    No.

    Question (perf-progress): Does your module execute any long-running tasks?

    Answer:

    No.

    Question (perf-huge_dialogs): Does your module contain any dialogs or wizards with a large number of GUI controls such as combo boxes, lists, trees, or text areas?

    Answer:

    No.

    Question (perf-menus): Does your module use dynamically updated context menus, or context-sensitive actions with complicated and slow enablement logic?

    Answer:

    No.

    Question (perf-spi): How the performance of the plugged in code will be enforced?

    Answer:

    It is possible to define and plug in a custom implementation of interfaces SearchInfo and FileObjectFilter.

    In case of a buggy or slow implementation, this may not affect the speed of this module but it may affect modules that use functionality of this module, i.e. modules implementing the search feature. But there is no affection until the node which uses such custom implementations, is searched (except for memory leaks, of course).


Built on May 28 2007.  |  Portions Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.