package eu.europeana.creative.dataset.indexing;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import org.apache.log4j.Logger;
import eu.europeana.api.client.exception.TechnicalRuntimeException;
import eu.europeana.api.client.thumbnails.processing.LargeThumbnailsetProcessing;
import eu.europeana.service.ir.image.api.ImageIndexingService;
import eu.europeana.service.ir.image.exceptions.ImageIndexingException;
public class ImageIndexingObserver implements
Observer {
Logger log = Logger.getLogger(this.getClass());
ImageIndexingService imageIndexingService;
boolean deleteItems = false;
public ImageIndexingService getImageIndexingService() {
return imageIndexingService;
}
public ImageIndexingObserver(ImageIndexingService imageIndexingService){
super();
this.imageIndexingService = imageIndexingService;
}
public ImageIndexingObserver(ImageIndexingService imageIndexingService, boolean deleteItems){
super();
this.imageIndexingService = imageIndexingService;
this.deleteItems = deleteItems;
}
@Override
public void update(Observable o, Object arg) {
if(! (arg instanceof Map))
throw new TechnicalRuntimeException("Wrong argument type. Expected map but invoked with " + arg.getClass());
@SuppressWarnings("unchecked")
Map<String, String> thumbnailMap = (Map<String, String>) arg;
int succededCount = 0;
try {
if(deleteItems)
succededCount = getImageIndexingService().deleteDatasetByIds(thumbnailMap.keySet());
else
succededCount = getImageIndexingService().insertDatasetByIds(thumbnailMap.keySet());
} catch (ImageIndexingException e) {
e.printStackTrace();
}
int failureCount = thumbnailMap.size() - succededCount;
((LargeThumbnailsetProcessing) o).increaseFailureCount(failureCount);
}
}