Plugin certification checklist

Major Checklist Items

User Interface Requirements

  • All interface components (buttons, lists, etc.) of a plugin should always do something. Any buttons or elements that are not in use in a given situation should be disabled.
  • A plugin should display prominent action buttons ("Draw Graph", "Perform Calculation", etc).
  • Plugins should only interact with the application via built in events, no attempt to paint on other areas directly, or affect other internal system objects are allowed.
  • Plugins should avoid having tabs within their interface. Each plugin should be able to be contained within one screen so as to limit the application's interface complexity and to take advantage of the application's modularity.
  • All components must have a full help section.

Plugin Size

  • Plugins should not include large datasets or example data unless totally necessary. Large extra data should be downloaded seperately to save CVS overhead and to allow for easy plugin updates.

Computation Requirements

  • Plugins should never perform large computations upon reception of an event. All large processing should only occur as a result of a user request.
  • With any long running processing the user must be presented with a progress bar and ability to cancel operation.
  • Long running processes should always be executed in a worker thread to allow the user interface to be responsive. Helper classes will be provided to make this easy and consistent across the application.

Events and Dataset handling

  • Plugins should create dataset subnodes for their results so the user can see and navigate to the result.
  • Plugins should specify what datasets they can accept and process through the use of the @AcceptTypes annotation. They should only specify datasets that they can properly support and then will only be visible when relevant to the current data loaded.
  • No plugin should "secretly" depend on the result of another plugin (i.e. display nothing in the interface until some other plugin has been run first). All relationships between plugins should be explicitly described through dataset subnode creation and @AcceptTypes annotations.
  • Plugins should only generate events necessary to their function. Unnecessary event generation can seriously impact application performance.

Licensing Requirements

  • A plugin can only make use of code or libraries which are released under appropriate open source licenses. Currently any LGPL-compatible or BSD-compatible license should be sufficient.

Minor Items

  • Plugin should conform to look and feel guidelines, and should make use of standard button placements and layouts.