AnyJ is written 100% in Java, though it makes use of some platform specific tools (used by the java code by launching them as external processes).
A small core framework (dark blue in the chart) implements the basic functionality and application logic. The major functionality is provided by plugins and services.
These plugins are able to
- register their own property form,
- get a ‘Card’ in the main window’s TabbedPane, and
- register Services. A Service is sort of an application-level-function which appears to the user as a MenuItem or an ActionButton.
The core tracks the user’s selection and builds a list of selected objects. Each Service that has been registered in the ServiceRegistry is asked if it is able to work on any of the selected Objects. If a service can process one of the selected objects, a corresponding menu item or button will be displayed/enabled to the user in the GUI.
The plugin achitecture enables you to replace plugins easily, provide platform-specific functionality, or reduce the memory footprint by unloading unused plugins. It is possible to ‘plug in’ GUI Builders for libraries other than Swing, support for special (pre-)compilers, debuggers, JDKs, VMs and so on.
The third major module (besides plugins and the core) of AnyJ’s application architecture is the ‘SourceBase’. This module is responsible for scanning the class, method, and field information from various sources (jars, zips, .class files, source files). The gathered information is stored and can be queried by all modules (including plugins) of AnyJ.
The plugin architecture of AnyJ allows the following features
- Customizability & easy extendability to fit specific needs
- Debugger, Compiler, GUI Builders etc. can be replaced or additionally included by the plugin mechanism. Additional browsers or code generators may be added due to the full access to the SourceBase’s (meta-) data.
The programming language on which AnyJ is specialized may be changed by replacing or extending the implementation of the SourceBase module (provided the language belongs to the family of OOP languages).