package de.pzzz.vertx.worker; import java.io.Serializable; import java.util.LinkedList; import java.util.Queue; public class QueueProcessingStatus implements Serializable { private static final long serialVersionUID = 7560765077464782742L; private transient Queue requestsToProcess = new LinkedList<>(); private boolean calculate = false; private int runningCalculations = 0; public T startProcessing() { if (requestsToProcess.isEmpty()) { throw new IllegalStateException("No requests to process!"); } calculate = true; runningCalculations = 1; return requestsToProcess.poll(); } public void stopProcessing() { calculate = false; } public boolean hasNext() { return !requestsToProcess.isEmpty(); } public T processNext() { runningCalculations += 1; return requestsToProcess.poll(); } public void complete() { runningCalculations -= 1; if (runningCalculations == 0 && requestsToProcess.isEmpty()) { calculate = false; } } public void enqueue(final T request) { requestsToProcess.add(request); } public void clear() { requestsToProcess.clear(); } public boolean isCalculate() { return calculate; } public void setCalculate(final boolean calculate) { this.calculate = calculate; } public int getRunningCalculations() { return runningCalculations; } public void setRunningCalculations(final int running) { this.runningCalculations = running; } public int getQueueLength() { return requestsToProcess.size(); } }