/**
* 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.harvest;
import org.dspace.authorize.AuthorizeException;
import org.dspace.core.Context;
import org.dspace.harvest.service.HarvestSchedulingService;
import org.dspace.harvest.service.HarvestedCollectionService;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
/**
* Service implementation for the scheduling of harvesting tasks.
* This class is responsible for all business logic calls for the harvesting tasks and is autowired by spring
* This class should never be accessed directly.
*
* @author kevinvandevelde at atmire.com
*/
public class HarvestSchedulingServiceImpl implements HarvestSchedulingService {
/* The main harvesting thread */
protected HarvestScheduler harvester;
protected Thread mainHarvestThread;
protected HarvestScheduler harvestScheduler;
@Autowired(required = true)
protected HarvestedCollectionService harvestedCollectionService;
protected HarvestSchedulingServiceImpl()
{
}
@Override
public synchronized void startNewScheduler() throws SQLException, AuthorizeException {
Context c = new Context();
harvestedCollectionService.exists(c);
c.complete();
if (mainHarvestThread != null && harvester != null) {
stopScheduler();
}
harvester = new HarvestScheduler();
HarvestScheduler.setInterrupt(HarvestScheduler.HARVESTER_INTERRUPT_NONE);
mainHarvestThread = new Thread(harvester);
mainHarvestThread.start();
}
@Override
public synchronized void stopScheduler() throws SQLException, AuthorizeException {
synchronized(HarvestScheduler.lock) {
HarvestScheduler.setInterrupt(HarvestScheduler.HARVESTER_INTERRUPT_STOP);
HarvestScheduler.lock.notify();
}
mainHarvestThread = null;
harvester = null;
}
@Override
public void pauseScheduler() throws SQLException, AuthorizeException {
synchronized(HarvestScheduler.lock) {
HarvestScheduler.setInterrupt(HarvestScheduler.HARVESTER_INTERRUPT_PAUSE);
HarvestScheduler.lock.notify();
}
}
@Override
public void resumeScheduler() throws SQLException, AuthorizeException {
HarvestScheduler.setInterrupt(HarvestScheduler.HARVESTER_INTERRUPT_RESUME);
}
@Override
public void resetScheduler() throws SQLException, AuthorizeException, IOException {
Context context = new Context();
List<HarvestedCollection> harvestedCollections = harvestedCollectionService.findAll(context);
for (HarvestedCollection hc : harvestedCollections)
{
hc.setHarvestStartTime(null);
hc.setHarvestStatus(HarvestedCollection.STATUS_READY);
harvestedCollectionService.update(context, hc);
}
}
}