I see the following requirements for the plugin support:
Plugins enable process and collaboration specific additional functions on top of the ESME kernel. They are implemented in Java, located on the server and are to be provided as jar-files to ease packaging and deployment handling.
(--> Not sure how packaging for Scala works)
- Plugins are listeners to events coming from the ESME kernel, such as MESSAGE_SENT, MESSAGE_RECEIVED, TAG_CREATED, USER_CREATED, USER_LOGGED_ON, USER_LOGGED_OFF. (more to be added)
- A plugin can be registered to multiple events.
- Plugins can not rely on assumptions in which order which plugin processes the incoming events. (this would require a prioritization handling for plugins)
- Plugins performs activity initiated on the ESME server, they communicate with endusers via messages.
- By default, plugins use the same database as ESME, they can link with database entries from the kernel tables, but do not modify or delete them.
- Plugins are to be placed for deployment in a specific directory in the ESME directory structure (to be defined).
- Plugins get registered and subscribed to the defined events during ESME startup,
- Deployment should be supported by the plugin through special methods (e.g. "initializePlugin", "removePlugin")
Settings of properties:
- Plugins can have general (=not user-specific) and user-specific settings.
- The plugin settings are collected in a specific database table in the ESME kernel during ESME runtime.
- Initial plugin settings are transported to ESME via specific files holding the property values.
- Plugin settings are set either through an admin/user profile interface or through the REST interface.