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.ItemStreamReader;
020import org.springframework.batch.item.support.SynchronizedItemStreamReader;
021import org.springframework.util.Assert;
022
023/**
024 * Creates a fully qualified SynchronizedItemStreamReader.
025 *
026 * @author Glenn Renfro
027 *
028 * @since 4.0
029 */
030public class SynchronizedItemStreamReaderBuilder<T> {
031
032        private ItemStreamReader<T> delegate;
033
034        /**
035         * The item stream reader to use as a delegate. Items are read from the delegate and
036         * passed to the caller in
037         * {@link org.springframework.batch.item.support.SynchronizedItemStreamReader#read()}.
038         *
039         * @param delegate the delegate to set
040         * @return this instance for method chaining
041         * @see SynchronizedItemStreamReader#setDelegate(ItemStreamReader)
042         */
043        public SynchronizedItemStreamReaderBuilder<T> delegate(ItemStreamReader<T> delegate) {
044                this.delegate = delegate;
045
046                return this;
047        }
048
049        /**
050         * Returns a fully constructed {@link SynchronizedItemStreamReader}.
051         *
052         * @return a new {@link SynchronizedItemStreamReader}
053         */
054        public SynchronizedItemStreamReader<T> build() {
055                Assert.notNull(this.delegate, "A delegate is required");
056
057                SynchronizedItemStreamReader<T> reader = new SynchronizedItemStreamReader<>();
058                reader.setDelegate(this.delegate);
059                return reader;
060        }
061}