2017-01-30 2 views
0

Ist es möglich, eine curation task einzuschränken, die nur ausgeführt wird, wenn sie für ein einzelnes Element aufgerufen wird und abgebrochen wird, wenn sie für eine Community, Sammlung oder den gesamten DSpace aufgerufen wird?Einschränken der Kuratierungsaufgabe auf * single * item

Ich weiß, dass es möglich ist, ein curation task zu beschränken nur Artikel s im Gegensatz zu Gemeinden und Sammlungen zu verarbeiten, aber das ist nicht das, was ich suche.

Hintergrund:

Ich habe ein curation task, die eine E-Mail über einen Gegenstand sendet.
Es soll für einen einzelnen Artikel aufgerufen werden.
Wenn jemand versehentlich auf eine Sammlung oder den gesamten DSpace aufruft, würde es Tausende von E-Mails senden, was natürlich ein Problem wäre.

Antwort

1

Die Antwort war im Handbuch zu finden:

Da arbeiten Aufgaben auf DSOs das kann entweder einfach sein (Artikel) oder Container (Sammlungen und Gemeinschaften), gibt es ein fundamentales Problem oder Mehrdeutigkeit in, wie eine Aufgabe aufgerufen wird: wenn die DSO ist eine Sammlung sollte die CS die Aufgabe aufrufen für jedes Mitglied der Sammlung, oder weiß die Aufgabe "wie" t selbst? Die Entscheidung wird von der Suche nach der @Distributive Anmerkung gemacht: wenn geht derzeit davon aus, dass die CS Aufgabe, die Details zu verwalten, andernfalls CS wird die Sammlung gehen, und rufen Sie die Aufgabe an jedem Elemente.

So ist die Aufgabe nicht-distributive zu machen, stellen Sie die @Distributive Anmerkung, die Kuration System mitzuteilen, dass Sie die Verteilung selbst behandeln und dann in Ihrer Aufgabe nicht implementieren Verteilung.

Was die @Distributive Annotation bedeutet ist, „Griffe Verteilung auf seine eigene“ statt „die Verteilung curation System Handle lassen“. Der Name der Anmerkung ist also ein bisschen irreführend.

Dies funktioniert, wenn Sie die org.dspace.curate.CurationTask Schnittstelle implementieren, sowie wenn Sie die org.dspace.curate.AbstractCurationTask Klasse erweitern.

1

Sie sollten die Schnittstelle implementiert org.dspace.curate.CurationTask stattdessen die org.dspace.curate.AbstractCurationTask Klasse zu erweitern.

der Tat ist die abstrakte Klasse ist der Verantwortliche die automatische Verteilung einer Kuration Aufgabe über alle das Objekt in einem DSpace Behälter (Gemeinschaft, Collection) zu implementieren. direkt die Schnittstelle implementieren, können Sie sich entscheiden, sofort zurück, wenn die Kuration auf einer Gemeinde oder einer Sammlung ausgeführt wird

int perform(DSpaceObject dso) throws IOException { 
    if (!(dso instanceof Item)) { 
     return Curator.CURATE_SKIP; 
    } 
    //... do your work on the item 
    return Curator.CURATE_SUCCESS; 
} 
+0

Auf diese Weise kann ich ein 'Community' /' Collection' Objekt überspringen, aber die 'Objekte' der Community/Sammlung werden noch verarbeitet. Es scheint, dass dieses Verhalten in der 'Curator'-Klasse' Curator'-Klasse implementiert ist, die 'distribute'-Methode in' AbstractCurationTask' scheint überhaupt nicht dabei zu sein. – MartinW

+1

Sie haben Recht!Sie können wahrscheinlich die @Suspendable-Annotation über die Curation-Aufgabe verwenden und CURATE_FAIL anstelle von CURATE_SKIP zurückgeben, wenn die Dso kein Item ist (Ich habe dies nicht getestet, aber es sollte durch Code-Inspektion funktionieren) – abollini

+0

Ja, es funktioniert, wenn Sie 'verwenden CURATE_FAIL' anstelle von 'CURATE_SKIP', aber nur so lange, wie Sie davon ausgehen, dass das Kurationssystem den Container vor den einzelnen Elementen verarbeitet (was es im Moment tut). Aber ich habe eine bessere Lösung gefunden, indem ich die Annotation '@ Distributive' verwendet habe. Siehe meine eigene Antwort. – MartinW

Verwandte Themen