    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
    018package org.apache.commons.io.build;
    019
    020import java.nio.charset.Charset;
    021
    022import org.apache.commons.io.Charsets;
    023import org.apache.commons.io.IOUtils;
    024
    025/**
    026 * Abstracts building a typed instance of {@code T}.
    027 *
    028 * @param <T> the type of instances to build.
    029 * @param <B> the type of builder subclass.
    030 * @since 2.12.0
    031 */
    032public abstract class AbstractStreamBuilder<T, B extends AbstractStreamBuilder<T, B>> extends AbstractOriginSupplier<T, B> {
    033
    034    /**
    035     * The buffer size, defaults to {@link IOUtils#DEFAULT_BUFFER_SIZE} ({@value IOUtils#DEFAULT_BUFFER_SIZE}).
    036     */
    037    private int bufferSize = IOUtils.DEFAULT_BUFFER_SIZE;
    038
    039    /**
    040     * The buffer size, defaults to {@link IOUtils#DEFAULT_BUFFER_SIZE} ({@value IOUtils#DEFAULT_BUFFER_SIZE}).
    041     */
    042    private int bufferSizeDefault = IOUtils.DEFAULT_BUFFER_SIZE;
    043
    044    /**
    045     * The Charset, defaults to {@link Charset#defaultCharset()}.
    046     */
    047    private Charset charset = Charset.defaultCharset();
    048
    049    /**
    050     * The Charset, defaults to {@link Charset#defaultCharset()}.
    051     */
    052    private Charset charsetDefault = Charset.defaultCharset();
    053
    054    /**
    055     * Gets the buffer size, defaults to {@link IOUtils#DEFAULT_BUFFER_SIZE} ({@value IOUtils#DEFAULT_BUFFER_SIZE}).
    056     *
    057     * @return the buffer size, defaults to {@link IOUtils#DEFAULT_BUFFER_SIZE} ({@value IOUtils#DEFAULT_BUFFER_SIZE}).
    058     */
    059    protected int getBufferSize() {
    060        return bufferSize;
    061    }
    062
    063    /**
    064     * Gets the buffer size default, defaults to {@link IOUtils#DEFAULT_BUFFER_SIZE} ({@value IOUtils#DEFAULT_BUFFER_SIZE}).
    065     *
    066     * @return the buffer size default, defaults to {@link IOUtils#DEFAULT_BUFFER_SIZE} ({@value IOUtils#DEFAULT_BUFFER_SIZE}).
    067     */
    068    protected int getBufferSizeDefault() {
    069        return bufferSizeDefault;
    070    }
    071
    072    /**
    073     * Gets the Charset, defaults to {@link Charset#defaultCharset()}.
    074     *
    075     * @return the Charset, defaults to {@link Charset#defaultCharset()}.
    076     */
    077    protected Charset getCharset() {
    078        return charset;
    079    }
    080
    081    /**
    082     * Gets the Charset default, defaults to {@link Charset#defaultCharset()}.
    083     *
    084     * @return the Charset default, defaults to {@link Charset#defaultCharset()}.
    085     */
    086    protected Charset getCharsetDefault() {
    087        return charsetDefault;
    088    }
    089
    090    /**
    091     * Sets the buffer size.
    092     * <p>
    093     * Subclasses may ignore this setting.
    094     * </p>
    095     *
    096     * @param bufferSize the buffer size.
    097     * @return this.
    098     */
    099    public B setBufferSize(final int bufferSize) {
    100        this.bufferSize = bufferSize >= 0 ? bufferSize : bufferSizeDefault;
    101        return asThis();
    102    }
    103
    104    /**
    105     * Sets the buffer size.
    106     * <p>
    107     * Subclasses may ignore this setting.
    108     * </p>
    109     *
    110     * @param bufferSize the buffer size, null resets to the default.
    111     * @return this.
    112     */
    113    public B setBufferSize(final Integer bufferSize) {
    114        setBufferSize(bufferSize != null ? bufferSize : bufferSizeDefault);
    115        return asThis();
    116    }
    117
    118    /**
    119     * Sets the buffer size for subclasses to initialize.
    120     * <p>
    121     * Subclasses may ignore this setting.
    122     * </p>
    123     *
    124     * @param bufferSizeDefault the buffer size, null resets to the default.
    125     * @return this.
    126     */
    127    protected B setBufferSizeDefault(final int bufferSizeDefault) {
    128        this.bufferSizeDefault = bufferSizeDefault;
    129        return asThis();
    130    }
    131
    132    /**
    133     * Sets the Charset.
    134     * <p>
    135     * Subclasses may ignore this setting.
    136     * </p>
    137     *
    138     * @param charset the Charset, null resets to the default.
    139     * @return this.
    140     */
    141    public B setCharset(final Charset charset) {
    142        this.charset = Charsets.toCharset(charset, charsetDefault);
    143        return asThis();
    144    }
    145
    146    /**
    147     * Sets the Charset.
    148     * <p>
    149     * Subclasses may ignore this setting.
    150     * </p>
    151     *
    152     * @param charset the Charset name, null resets to the default.
    153     * @return this.
    154     */
    155    public B setCharset(final String charset) {
    156        return setCharset(Charsets.toCharset(charset, charsetDefault));
    157    }
    158
    159    /**
    160     * Sets the Charset default for subclasses to initialize.
    161     * <p>
    162     * Subclasses may ignore this setting.
    163     * </p>
    164     *
    165     * @param defaultCharset the Charset name, null resets to the default.
    166     * @return this.
    167     */
    168    protected B setCharsetDefault(final Charset defaultCharset) {
    169        this.charsetDefault = defaultCharset;
    170        return asThis();
    171    }
    172}