001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.pipeline;
019    
020    
021    /**
022     * This interface represents a data channel into which objects can be fed.
023     * Feeders act as intermediaries between stages in a pipeline and the drivers
024     * for subsequent stages. Each {@link StageDriver} implementation will
025     * ordinarily provide a custom Feeder implementation that integrates receiving
026     * objects with its internal stage processing workflow.
027     */
028    public interface Feeder {
029        /**
030         * This Feeder implementation provides a standard, no-op sink for objects.
031         * It is useful for situations like the terminus of a pipeline, where
032         * there is nothing to be done with a generated object.
033         */
034        public static final Feeder VOID = new Feeder() {
035            public void feed(Object obj) { }
036        };
037        
038        /**
039         * Feeds the specified object to an underlying receiver.
040         * @param obj The object being fed to the receiver.
041         */
042        public void feed(Object obj);
043    }