/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.nifi.io.nio.consumer; import java.io.IOException; import java.nio.ByteBuffer; import org.apache.nifi.io.nio.BufferPool; /** * A StreamConsumer must be thread safe. It may be accessed concurrently by a * thread providing data to process and another thread that is processing that * data. * */ public interface StreamConsumer { /** * Will be called once just after construction. It provides the queue to * which processed and emptied and cleared buffers must be returned. For * each time <code>addFilledBuffer</code> is called there should be an * associated add to this given queue. If not, buffers will run out and all * stream processing will halt. READ THIS!!! * * @param returnQueue pool of buffers to use */ void setReturnBufferQueue(BufferPool returnQueue); /** * Will be called by the thread that produces byte buffers with available * data to be processed. If the consumer is finished this should simply * return the given buffer to the return buffer queue (after it is cleared) * * @param buffer filled buffer */ void addFilledBuffer(ByteBuffer buffer); /** * Will be called by the thread that executes the consumption of data. May * be called many times though once <code>isConsumerFinished</code> returns * true this method will likely do nothing. * * @throws java.io.IOException if there is an issue processing */ void process() throws IOException; /** * Called once the end of the input stream is detected */ void signalEndOfStream(); /** * If true signals the consumer is done consuming data and will not process * any more buffers. * * @return true if finished */ boolean isConsumerFinished(); /** * Uniquely identifies the consumer * * @return identifier of consumer */ String getId(); }