001package org.itsallcode.jdbc.batch;
002
003import java.util.function.Supplier;
004
005import org.itsallcode.jdbc.SimpleStatement;
006
007/**
008 * A builder for {@link StatementBatch}.
009 */
010public class StatementBatchBuilder {
011    private final Supplier<SimpleStatement> statementFactory;
012    private int maxBatchSize = PreparedStatementBatchBuilder.DEFAULT_MAX_BATCH_SIZE;
013
014    /**
015     * Create a new instance.
016     * 
017     * @param statementFactory factory for creating {@link SimpleStatement}.
018     */
019    public StatementBatchBuilder(final Supplier<SimpleStatement> statementFactory) {
020        this.statementFactory = statementFactory;
021    }
022
023    /**
024     * Define maximum batch size, using
025     * {@link PreparedStatementBatchBuilder#DEFAULT_MAX_BATCH_SIZE} as default.
026     * 
027     * @param maxBatchSize maximum batch size
028     * @return {@code this} for fluent programming
029     */
030    public StatementBatchBuilder maxBatchSize(final int maxBatchSize) {
031        this.maxBatchSize = maxBatchSize;
032        return this;
033    }
034
035    /**
036     * Build the batch inserter.
037     * 
038     * @return the statement batch
039     */
040    public StatementBatch build() {
041        final SimpleStatement statement = statementFactory.get();
042        return new StatementBatch(statement, this.maxBatchSize);
043    }
044}