The Basic NetBeans™ Platform Series
The NetBeans™ platform: module overview
Created on 15 July 2007, last updated on 01 June 2009
This article is a quick platform guide, as it provides a tabular overview of all platform modules corresponding to the NetBeans™ platform as of IDE version 6.0. You will also find statistics of inter-module dependencies of the platform.
Introduction
In the previous articles we have already mentioned some of the platform modules. Except for those constituting the NetBeans™ runtime container the whole picture is incomplete until now. First, let us have a glance at the module table; it is the most important part of this article. Next comes a statistical overview of the module-module interdependencies answering the question which modules are most frequently referenced within the platform. Then we take at look at how the table of all platform modules and accompanying information was figured out.
Overview of all platform modules
The listed modules refer to the platform7 cluster corresponding to the NetBeans™ IDE 6.0. As a matter of fact, the number of platform modules is steadily growing: while the platform of the NetBeans™ IDE 5.5 had 34 modules we now have 46 with the NetBeans™ IDE 6.0.
The text colours of the following table are used to distinguish different items in multi-caption columns. The Module name column lists a few names which are stroken-through: such modules are deprecated. And the API access column points out whether the public API packages exposed by a module are really meant for public use (that is: in your applications or modules) or just for friend modules within the platform. Here comes the table sorted alphabetically by module name:
Overview of all NetBeans™ platform modules
| # | Module | Short and long description | API access Stability category Activation type |
Update tracking name Code base name Related JARs and executables |
| 1 | Actions APIs | Definition of common actions for NetBeans. Provides list of common actions used by any NetBeans application. |
|
|
| 2 | Advanced Templating | Advanced Templating not only for Datasystems. This module binds the Datasystems API with Scripting API. As a result it is possible to use any scripting and templating language to generate templates. |
|
|
| 3 | Apple Application Menu | Enables proper support for the Apple Application menu. Enables Apple menu items to work properly, and moves some standard menu items there – Tools | Options becomes Preferences, Help | About becomes about, File | Exit becomes Quit. |
|
|
| 4 | Auto Update Services | Services for searching updates of modules on Update Center, downloading and installing modules in IDE. AutoUpdate feature provides several services to IDE: download and install available updates of installed modules, search and install new modules from subscribed Update Centers, browsing and manipulating the modules in IDE. |
|
|
| 5 | Auto Update UI | Supplies UI of Auto Update Services. he UI enables the IDE to browse IDE installation or content of registered Update Centers, then downloading updates or new modules and automatically install the modules into IDE. |
|
|
| 6 | Bootstrap | The core bootstrap of NetBeans-based applications. This module provides the initial infrastructure that loads all other parts of the application. It cannot be disabled. |
|
|
| 7 | Command Line Parsing API | GetOpts complient API for parsing command line. It is focused on the case when each part of the command line is going to be parsed by different module. |
|
|
| 8 | Some old classes that are now deprecated. Contains some old API classes that have now been deprecated and can be replaced. Specifically: ExplorerActions; ExplorerPanel; HttpServer; and WeakListener. |
|
|
|
| 9 | Core | The basic framework of NetBeans-based applications. This module provides the central infrastructure that lets NetBeans-based applications run. It cannot be disabled. |
|
|
| 10 | Core – Execution | Implementation of the Execution engine. Adds support for execution into the platform. Contains classes which implement the execution part of APIs and corresponding GUI. |
|
|
| 11 | Core – UI | User interface of the platform. Provides classes and resources for the standard basic user interface of the platform and for applications built on top of the platform. |
|
|
| 12 | Core – Windows | Implementation for windowing support. Adds classes implementing the window system part of the APIs. |
|
|
| 13 | Datasystems API | NetBeans Open API for manipulating data objects. The Datasystems API is a layer atop the Filesystems API which recognizes and groups data objects and gives them particular semantics. Once a part of the general Open APIs, it is now split into an independent module. |
|
|
| 14 | Dialogs API | Handles dialogs and wizards. This module handles the dialog and wizard infrastructure used in NetBeans. |
|
|
| 15 | Execution API | Execution API from the Open APIs. Consists of parts of the org.openide.execution.* package from the Open APIs. |
|
|
| 16 | Explorer & Property Sheet API | Various view for displaying node structures. Allows definition of new views that display structures created using Nodes API. |
|
|
| 17 | Favorites | Support for organizing favorite files. Favorites module enables you to create a view of files specifically relevant to your work, simply access them at one common place. |
|
|
| 18 | File System API | Virtual File System API. Allows access to file like resources in a way independent on actual OS files. Supports notification of changes on disk. |
|
|
| 19 | General Queries API | Acts as a general communication channel between modules. Hosts queries which are not particularly domain-specific. Permits different modules to obtain information about files in a flexible way. |
|
|
| 20 | I/O APIs | Open APIs relating to displaying output. Contains classes from org.openide.windows.* relating to creating output tabs, displaying output, and hyperlinking it. |
|
|
| 21 | JavaHelp Integration | Permits JavaHelp help sets to be added to the IDE. Contains the actual JavaHelp runtime library, and the implementation of the part of the Modules API which permits other modules to install help sets using JavaHelp technology. |
|
|
| 22 | Keymap Options | – |
|
|
| 23 | Look & Feel Customization Library | Handles per-look-and-feel UIManager customizations for NetBeans. Defines NetBeans-specific values needed in UIManager and ensures that some values available in BasicLookAndFeel are available on all look and feels. Handles metal-theme support, look and feel selection and initializing custom font sizes. |
|
|
| 24 | Master Filesystem | Merges multiple filesystem providers into a single logical tree. Creates mounts for disk roots and then splices in other filesystems such as VCS mounts, providing a single wrapper FileSystem for them all. |
|
|
| 25 | MIME Lookup API | The MIME lookup API. The MIME Lookup module provides API for looking up MIME type dependant settings, services and other objects. It also provides SPI for implementing additional MIME type related data provider. |
|
|
| 26 | MIME Lookup On SystemFS | The default implementation of MimeDataProvider. The MIME Lookup On SystemFS module implements MimeDataProvider that looks up objects in the folder hierarchy on the System filesystem. |
|
|
| 27 | Module System API | APIs for getting information about installed modules. Allows to get list of installed modules, inspect their properties and dependencies. |
|
|
| 28 | MultiView Windows | MultiView Windows framework and APIs. MultiView Windows framework and APIs. |
|
|
| 29 | Nodes API | API for defining generic tree-like structures. Provides abstraction over tree-like structures by defining Node – the generic extensible interface that can then be displayed by the Explorer API. |
|
|
| 30 | Enumeration API that is in wrong package Enumeration API that is in wrong package, org.openide.util.enum and as such it cannot be compiled with Java 1.5, because enum is a keyword. Is replaced by class org.openide.util.Enumerations. |
|
|
|
| 31 | Options Dialog and SPI | Definition of common actions for NetBeans. Provides list of common actions used by any NetBeans application. |
|
|
| 32 | Output Window | A simple text area based output window implementation. Output window based on a java.swing.text.Document over a ByteBuffer/CharBuffer |
|
|
| 33 | Platform | NetBeans Platform |
|
|
| 34 | Progress API | Task progress visualization APIs. Lets modules register long-running tasks or processes in a central place. |
|
|
| 35 | Progress UI | Task progress visualization. Provides a view of all running tasks and may permit them to be cancelled, etc. |
|
|
| 36 | Scripting API Integration | This module bundles the Scripting APIs. The module bundles the scripting APIs (javax.script package)produced by OpenJDK project,so other modules, running on Java5, can still make use of them. |
|
|
| 37 | Settings API | A library for storing settings in custom formats. This module provides the Settings API for storing module-defined settings in custom formats. It also provides several useful settings format implementations. |
|
|
| 38 | Setting Options API | Support for storing preferences. Provides classes that simplify storage of settings between multiple invocation of NetBeans based application. |
|
|
| 39 | Startup | Loads and enables modules. This module provides the central additional functionality to Bootstrap to locate and enable the right modules. |
|
|
| 40 | Swing Layout Extensions integration | Bundles swing-layout library. This module bundles Swing Layout Extensions library (from swing-layout.dev.java.net). |
|
|
| 41 | Tab Control | The tab control used by the window system. The NetBeans windowing system's tab control bean library. |
|
|
| 42 | Text API | Generic API wrapping Swing based EditorKits. Provide support for defining components that embed Swing text editors. |
|
|
| 43 | UI Utilities API | User interface utilities. Helper methods for various UI related tasks. |
|
|
| 44 | Utilities API | Basic Utilities API. Various helper methods and basic concept definitions including actions, lookup, image handling, parallel execution and branding support. |
|
|
| 45 | Visual Library API | Visual Library API. Visual Library API. |
|
|
| 46 | Window System API | API for managing components on a screen. Provides OS and MDI/SDI neutral abstraction API over concept of components that are displayed to the user. |
|
|
Module dependency statistics
The following table shows how many times a given platform module is refered to by a module-module dependency by other platform modules:
NetBeans™ platform module dependency statistics
| # of modules… | depending on… |
| 35 | Utilities API |
| 18 | UI Utilities API |
| 17 | Nodes API |
| 16 | File System API |
| 16 | Window System API |
| 15 | Dialogs API |
| 11 | Module System API |
| 10 | Datasystems API |
| 8 | Actions API |
| 7 | Progress API |
| 6 | Explorer & Property Sheet API |
| 6 | Text API |
| 5 | Bootstrap |
| 4 | Core |
| 4 | General Queries API |
| 4 | I/O APIs |
| 3 | Look & Feel Customization Library |
| 2 | Auto Update Services |
| 2 | Core – Windows |
| 2 | MIME Lookup API |
| 2 | Startup |
| 2 | Swing Layout Extensions integration |
| 1 | Auto Update UI |
| 1 | Core – UI |
| 1 | Execution API |
| 1 | Favorites |
| 1 | Keymap Options |
| 1 | Master Filesystem |
| 1 | Options Dialog and SPI |
| 1 | Scripting API Integration |
| 1 | Settings API |
| 1 | Tab Control |
| 0 | Advanced Templating |
| 0 | Apple Application Menu |
| 0 | Core – Execution |
| 0 | JavaHelp Integration |
| 0 | MIME Lookup On SystemFS |
| 0 | MultiView Windows |
| 0 | Output Window |
| 0 | Progress UI |
| 0 | Visual Library API |
How to gather module information
Having the overview tables above is a nice thing, but how was all the information assembled? The admittedly tedious work starts with examining the files of the platform7/update_tracking directory and involves these steps explained more thoroughly further below:
- Open an update tracking XML file; it normally references a module status configuration file as well as a module JAR file.
- Open the runtime module XML metadata file to obtain the module's activation type and whether the module is activated (or: enabled) or not.
- Open the JAR file of the module and look at the manifest file to gather information about public packages, friend modules, dependencies and more. Particularly pay attention to the localising bundle given by manifest attribute
OpenIDE-Localizing-Bundle. - Open the localising bundle: it contains the actual module name and descriptions.
Let us look at these steps in more detail now. From the update tracking directory we pick the Progress API module as an example. Its update tracking file is org-netbeans-api-progress.xml:

Contents of directory 'platform7/update_tracking'
A typical update tracking file is just an entry point which refers to files associated with the module (namely the module status configuration file and the JAR file(s)):

Contents of a typical update tracking file
The config/Modules/org-netbeans-api-progress.xml file reveals further details such as the activiation type, whether or not the module is enabled (or activated), again the JAR location, and others:

Contents of a typical module status configuration file
Most information is provided by the JAR file's manifest; it contains a bunch of data like public module packages, friend modules, different kinds of dependencies and many more:

Contents of a typical JAR manifest
Notice, that the manifest has no locale-specific information in it. These things are kept in the localising bundle file specified by the OpenIDE-Module-Localizing-Bundle attribute; of course, the bundle also contained in the JAR.
Open the bundle within the IDE and figure out the module's human readable name (attribute OpenIDE-Module-Name) and things like the long as well as the short descriptions (OpenIDE-Module-Long-Description and OpenIDE-Module-Short-Description, respectively):

Contents of a typical localising bundle
Obtaining the update tracking name of a module
The table shown in the previous section has mainly been constructed by following the latter approach—with the exception of the modules' update tracking names. They actually are not obtainable by either approach. Instead, you are required to download a stand-alone binary distribution of the platform. After unpacking the archive you will recognise a file named module_tracking.xml:

File 'module_tracking.xml' contained in a binary platform distribution
Open that file to gather the last piece of information from the name attribute of the module element:

The module update tracking name as found in 'module_tracking.xml'
Remember that the update tracking name is nothing but the relative location of a module's project within the source distribution of the platform. So, if you want to do some source code mining it is a good idea to have a module's update tracking name at hand, as it saves you a number of trials and errors when searching for the corresponding NetBeans™ project.
Module-module dependencies
These are best taken from the Project Properties window of the corresponding source project as shown in the next figure for the Actions APIs module:

Module-module dependencies of a given module in the sources' Project Properties window
Copyright © 2007–2009 by Volker Rautenberg. Some rights reserved.
Except where otherwise noted, text and images of this work are licenced to the public under the Creative Commons Attribution-Noncommercial 3.0 Unported License. The names of companies and products mentioned in this work are trademarks or registered trademarks of the respective trademark owners.