@Override
public void retrieveRangeAgain(final Long transactionTicket, final UIntegerList missingIndexes,
final RetrieveRangeAgainInteraction interaction) throws MALInteractionException, MALException {
final Dispatcher dispatcher = dispatchers.get(transactionTicket);
if (dispatcher == null) {
throw new MALInteractionException(new MALStandardError(COMHelper.INVALID_ERROR_NUMBER, null));
}
interaction.sendAcknowledgement();
if (missingIndexes.size() == 2 && missingIndexes.get(1).getValue() == 0) {
UInteger lastIndex = missingIndexes.get(0);
try {
int numberOfChunks = dispatcher.numberOfChunks();
for (int i = (int) lastIndex.getValue(); i < numberOfChunks; i++) {
byte[] chunk = dispatcher.getFlushedChunk(i);
interaction.sendUpdate(new Blob(chunk), new UInteger(i));
}
} catch (IOException ex) {
Logger.getLogger(ArchiveSyncProviderServiceImpl.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
for (UInteger missingIndex : missingIndexes) {
byte[] chunk = dispatcher.getFlushedChunk((short) missingIndex.getValue());
interaction.sendUpdate(new Blob(chunk), missingIndex);
}
}
interaction.sendResponse();
}