package dk.statsbiblioteket.medieplatform.autonomous; import java.net.MalformedURLException; import java.util.Collection; import java.util.Iterator; import java.util.List; public class NewspaperSBOIEventStorage extends SBOIEventIndex<Batch> implements EventAccessor<Batch> { public static final String ROUND_TRIP_NO = "newspapr_round_trip_no"; public static final String BATCH_ID = "newspapr_batch_id"; private final DomsEventStorage<Batch> domsEventStorage; public NewspaperSBOIEventStorage(String summaLocation, PremisManipulatorFactory<Batch> premisManipulatorFactory, DomsEventStorage<Batch> domsEventStorage, int pageSize) throws MalformedURLException { super(summaLocation, premisManipulatorFactory, domsEventStorage,pageSize); this.domsEventStorage = domsEventStorage; } @Override public Iterator<Batch> findItems(boolean details, List<String> pastSuccessfulEvents, List<String> futureEvents) throws CommunicationException { Query<Batch> query = new Query<Batch>(); if (futureEvents != null) { query.getFutureEvents().addAll(futureEvents); } if (pastSuccessfulEvents != null) { query.getPastSuccessfulEvents().addAll(pastSuccessfulEvents); } return super.search(details,query); } @Override public Batch getItem(String itemFullID) throws CommunicationException, NotFoundException { return domsEventStorage.getItemFromFullID(itemFullID); } @Override protected String getResultRestrictions(Collection<Batch> items) { String itemsString; StringBuilder batchesString = new StringBuilder(); batchesString.append(" ( "); boolean first = true; for (Item item : items) { if (first) { first = false; } else { batchesString.append(" OR "); } batchesString.append(" ( "); Batch batch = (Batch) item; batchesString.append("+").append(BATCH_ID).append(":B").append(batch.getBatchID()); if (batch.getRoundTripNumber() > 0) { batchesString.append(" +").append(ROUND_TRIP_NO).append(":RT").append(batch.getRoundTripNumber()); } batchesString.append(" ) "); } batchesString.append(" ) "); itemsString = batchesString.toString(); return itemsString; } }