@Override public void resetStream() { count = 0; if (receiver != null) { receiver.resetStream(); } }
@SuppressWarnings("unchecked") // OK because queue is only filled with T by Decoupler<T> @Override public void run() { try { while (true) { final Object object = queue.take(); if (RED_PILL == object) { receiver.closeStream(); break; } if (BLUE_PILL == object) { receiver.resetStream(); continue; } receiver.process((T) object); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }
@Override public void process(final T obj) { getReceiver().process(obj); objectCount += 1; if (objectCount >= batchSize) { batchCount += 1; objectCount = 0; getReceiver().resetStream(); } }
@Test public void shouldEmitResetStreamAfterBatchSizeObjects() { systemUnderTest.setBatchSize(3); systemUnderTest.process("1"); systemUnderTest.process("2"); systemUnderTest.process("3"); InOrder ordered = inOrder(receiver); ordered.verify(receiver).process("1"); ordered.verify(receiver).process("2"); ordered.verify(receiver).process("3"); ordered.verify(receiver).resetStream(); verifyNoMoreInteractions(receiver); }