2017-01-30 82 views
0

是否可以將curation task限制爲僅針對單個項目調用時執行,並且在針對社區,集合或整個DSpace調用時是否中止?將curation任務限制爲* single *項目

我知道有可能限制curation task只處理項目s而不是社區和集合,但這不是我所期待的。

背景:

我有一個curation task發送電子郵件有關項目。
它打算在單個項目上調用。
如果有人不小心在集合或整個DSpace上調用它,它會發送數千封電子郵件,這顯然是一個問題。

回答

1

答案是手冊中找到:

由於任務在數字存儲示波器操作,可無論是簡單的(Items)還是容器(Collections和Communities),基本的 問題或者如何調用一個任務都是模棱兩可的:如果DSO是一個 集合,那麼CS應該調用任務的每個成員 集合,或者做任務「知道」如何做tha t本身?該 決定由尋找@Distributive註釋提出:如果 目前,CS假定任務將管理的細節,否則 CS會走路的收集,並調用每個成員的任務。

因此,爲了使任務不分配,您將@Distributive註解,告訴你自己處理分佈,則不要在你的任務落實分佈的策展制度。

什麼@Distributive註釋的意思是,「自行處理通訊」代替「讓我們策展制度手柄分配」。所以註釋的名稱有點誤導。

當你實現org.dspace.curate.CurationTask界面,以及當您擴展org.dspace.curate.AbstractCurationTask類作爲這個工程。

1

你應該實現的接口org.dspace.curate.CurationTask,而不是擴展org.dspace.curate.AbstractCurationTask類。

事實上,抽象類是負責實現在DSpace容器(Community,Collection)中的所有對象上自動分配調整任務的人。實現直接的界面,你可以決定是否策展是在一個社區或收集運行立即返回

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

這樣我就可以跳過一個'Community' /'Collection'對象,但社區的/集合的'items'仍然被處理。看起來這種行爲是在'Curator'類'curate'方法中實現的,'AbstractCurationTask'中的'distribute'方法似乎完全沒有涉及到。 – MartinW

+1

你是對的!你可以在curation任務上使用@Suspendable註解,並且如果dso不是一個Item,我們將返回CURATE_FAIL而不是CURATE_SKIP – abollini

+0

是的,如果你使用' CURATE_FAIL'而不是'CURATE_SKIP',但只要你認爲curation系統在單個項目之前處理容器(目前它是這樣做的)。但我發現了一個更好的解決方案,使用'@ Distributive'註釋。看到我自己的答案。 – MartinW