/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.authority.indexer;
import org.apache.log4j.Logger;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.core.Context;
import org.dspace.event.Consumer;
import org.dspace.event.Event;
import java.util.HashSet;
import java.util.Set;
/**
* Consumer that takes care of the indexing of authority controlled metadata fields for installed/updated items
*
* @author Antoine Snyers (antoine at atmire.com)
* @author Kevin Van de Velde (kevin at atmire dot com)
* @author Ben Bosman (ben at atmire dot com)
* @author Mark Diggory (markd at atmire dot com)
*/
public class AuthorityConsumer implements Consumer {
private static final Logger log = Logger.getLogger(AuthorityConsumer.class);
/** A set of all item IDs installed which need their authority updated **/
private Set<Integer> itemsToUpdateAuthority = null;
/** A set of item IDs who's metadata needs to be reindexed **/
private Set<Integer> itemsToReindex = null;
public void initialize() throws Exception {
}
public void consume(Context ctx, Event event) throws Exception {
if(itemsToUpdateAuthority == null){
itemsToUpdateAuthority = new HashSet<Integer>();
itemsToReindex = new HashSet<Integer>();
}
DSpaceObject dso = event.getSubject(ctx);
if(dso instanceof Item){
Item item = (Item) dso;
if(item.isArchived()){
if(!itemsToReindex.contains(item.getID()))
itemsToReindex.add(item.getID());
}
if(("ARCHIVED: " + true).equals(event.getDetail())){
itemsToUpdateAuthority.add(item.getID());
}
}
}
public void end(Context ctx) throws Exception {
if(itemsToUpdateAuthority == null)
return;
try{
ctx.turnOffAuthorisationSystem();
for (Integer id : itemsToUpdateAuthority) {
Item item = Item.find(ctx, id);
AuthorityIndexClient.indexItem(ctx, item);
}
//Loop over our items which need to be re indexed
for (Integer id : itemsToReindex) {
Item item = Item.find(ctx, id);
AuthorityIndexClient.indexItem(ctx, item);
//Commit our DB connection in case new UUID were generated.
ctx.getDBConnection().commit();
}
} catch (Exception e){
log.error("Error while consuming the authority consumer", e);
} finally {
itemsToUpdateAuthority = null;
itemsToReindex = null;
ctx.restoreAuthSystemState();
}
}
public void finish(Context ctx) throws Exception {
}
}