001/*
002 * Copyright 2017 the original author or authors.
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *          https://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016
017package org.springframework.batch.item.support.builder;
018
019import org.springframework.batch.item.ItemReader;
020import org.springframework.batch.item.support.SingleItemPeekableItemReader;
021import org.springframework.util.Assert;
022
023/**
024 * Creates a fully qualified SingleItemPeekeableItemReader.
025 *
026 * @author Glenn Renfro
027 *
028 * @since 4.0
029 */
030public class SingleItemPeekableItemReaderBuilder<T> {
031
032        private ItemReader<T> delegate;
033
034        /**
035         * The item reader to use as a delegate. Items are read from the delegate and passed
036         * to the caller in
037         * {@link org.springframework.batch.item.support.SingleItemPeekableItemReader#read()}.
038         *
039         * @param delegate the delegate to set
040         * @return this instance for method chaining
041         * @see SingleItemPeekableItemReader#setDelegate(ItemReader)
042         */
043        public SingleItemPeekableItemReaderBuilder<T> delegate(ItemReader<T> delegate) {
044                this.delegate = delegate;
045
046                return this;
047        }
048
049        /**
050         * Returns a fully constructed {@link SingleItemPeekableItemReader}.
051         *
052         * @return a new {@link SingleItemPeekableItemReader}
053         */
054        public SingleItemPeekableItemReader<T> build() {
055                Assert.notNull(this.delegate, "A delegate is required");
056
057                SingleItemPeekableItemReader<T> reader = new SingleItemPeekableItemReader<>();
058                reader.setDelegate(this.delegate);
059                return reader;
060        }
061}