A small number of extensions to curation system to improve task authoring and curation end-user experience. No API or other breaking changes.
Patches forthcoming, but brief write-up follows:
(1) Admin UI - ability to cluster curation tasks into groups for display and selection. The UI code will be adapted to look for and recognize a set of properties that permit grouping of tasks.
Groups can be defined for any purpose, and are optional. If no groups are defined, the behavior in the UI is as present: all tasks that have been mapped by the ui.tasknames property will appear in a single drop-down list. If any group is defined, then the UI will display only tasks associated with defined groups. A task may belong to several groups, and there may be any number of groups. This will give administrators the ability to logically and cleanly present tasks: the UI will first display a set of groups, then when selected, the tasks in that group.
firstgroup = "A sensible collection of tasks",
secondgroup = "Metadata checking tools"
the right hand side customizable phrase will appear in the UI.
ui.group.firstgroup = task1, task2,,,,
ui.group.secondgroup = task3, task4...
these properties will define the members of the group
(2) Scriptable tasks. Support will be added for authoring tasks in non-java languages, specifically those accessible via JSR223 - the Java Scripting API.
Note that these languages are not installed in DSpace by default, and must be for the scripting engine to operate. Support for any specific language is not
included with this extension.
(3) Flexible, hierarchical, task configuration. This facility provides tasks with a convenient way to manage their configuration data. It is an optional feature, and tasks are not required to utilize it, but it is available in the AbstractCurationTask class as a set of convenience methods, so tasks extending this class can use if desired.
The method 'taskProperty(String name)' when invoked by a task named "mytask.prof1" will return a value (if any) as follows:
if there is a file config/modules/mytask.cfg, this is loaded into a property set.
if there is a file confi/modules/mytask.prof1.cfg, this is loaded into the same property set, supplementing or overriding the properties in 'mytask.cfg'
the value associated with 'name' is returned to caller.
Using task properties, task authors can create multiple 'profiles' of the same task (one which forces an update perhaps, one which doesn't), can factor out common properties,
and many other uses. This can greatly diminish the amount of java coding required to support tasks. It relies on the convention that the same task code can have multiple