001/*
002 * $Id$
003 */
004
005package edu.jas.util;
006
007
008import java.io.IOException;
009import java.io.Reader;
010
011
012// import org.apache.logging.log4j.Logger;
013// import org.apache.logging.log4j.LogManager; 
014
015
016/**
017 * Reader to conncat two readers. Read from first reader until it is empty, then
018 * read from second reader.
019 * @author Heinz Kredel
020 */
021
022public class CatReader extends Reader {
023
024
025    // private static final Logger logger = LogManager.getLogger(CatReader.class);
026    // private static final boolean debug = logger.isDebugEnabled();
027
028
029    private final Reader first;
030
031
032    private final Reader second;
033
034
035    private boolean doFirst;
036
037
038    /**
039     * Constructor.
040     * @param f first Reader.
041     * @param s second Reader.
042     */
043    public CatReader(Reader f, Reader s) {
044        first = f;
045        second = s;
046        doFirst = true;
047    }
048
049
050    /**
051     * Read char array.
052     * @param cbuf array.
053     * @param off start offset.
054     * @param len number of chars to read.
055     * @return number of chars read, or -1.
056     */
057    @Override
058    public int read(char[] cbuf, int off, int len) throws IOException {
059        int i = -1;
060        if (doFirst) {
061            i = first.read(cbuf, off, len);
062            if (i < 0) {
063                doFirst = false;
064                i = second.read(cbuf, off, len);
065            }
066        } else {
067            i = second.read(cbuf, off, len);
068        }
069        //System.out.println("i = " + i);
070        return i;
071    }
072
073
074    /**
075     * Close this Reader.
076     */
077    @Override
078    public void close() throws IOException {
079        try {
080            first.close();
081        } finally {
082            second.close();
083        }
084    }
085
086}