/*
* Copyright 2014 GoDataDriven B.V.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.divolte.server.processing;
import static io.divolte.server.processing.ItemProcessor.ProcessingDirective.*;
import java.util.Queue;
public interface ItemProcessor<E> {
ProcessingDirective process(Item<E> e);
default ProcessingDirective process(final Queue<Item<E>> batch) {
ProcessingDirective directive;
do {
// Note: processing should not throw an unchecked
// exception unless no further processing should
// take place.
directive = process(batch.remove());
} while (!batch.isEmpty() && directive == CONTINUE);
return directive;
}
default ProcessingDirective heartbeat() {
return CONTINUE;
}
default void cleanup() {
// noop, override to implement cleanup
}
enum ProcessingDirective {
CONTINUE,
PAUSE
}
}