将策展任务限制为*单个*项目

Restrict curation task to *single* item

是否可以将 curation task 限制为仅在为单个项目调用时执行,而在为社区、集合或整个 DSpace 调用时中止?

我知道可以限制 curation task 仅处理项目s,而不是社区和集合,但这不是我想要的。

背景:

我有一个 curation task 可以发送有关某个项目的电子邮件。
它旨在在单个项目上调用。
如果有人不小心在一个集合或整个 DSpace 上调用它,它会发送数千封电子邮件,这显然是个问题。

您应该实现接口 org.dspace.curate.CurationTask 而不是扩展 org.dspace.curate.AbstractCurationTask class。

事实上,抽象 class 是负责实现跨 DSpace 容器(社区、集合)中所有对象自动分配管理任务的人。如果在社区或集合

上的策展是 运行,则直接实施界面您可以决定立即 return
int perform(DSpaceObject dso) throws IOException {
    if (!(dso instanceof Item)) {
        return Curator.CURATE_SKIP;
    }
    //... do your work on the item
    return Curator.CURATE_SUCCESS;
}

答案在手册中找到:

Since tasks operate on DSOs that can either be simple (Items) or containers (Collections, and Communities), there is a fundamental problem or ambiguity in how a task is invoked: if the DSO is a collection, should the CS invoke the task on each member of the collection, or does the task "know" how to do that itself? The decision is made by looking for the @Distributive annotation: if present, CS assumes that the task will manage the details, otherwise CS will walk the collection, and invoke the task on each member.

所以要创建任务 non-distributive,您设置 @Distributive 注释,告诉管理系统您自己处理分发,然后不要在您的任务中实现分发。

@Distributive注释的意思是,"handles distribution on its own"而不是"let's the curation system handle distribution"。所以注解的名字有点误导。

这在您实现 org.dspace.curate.CurationTask 接口以及扩展 org.dspace.curate.AbstractCurationTask class 时有效。