// Copyright (c) 1996-2002 Brian D. Carlstrom

package bdc.util;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

/**
    MultiPrintWriter

    Multiplex over multiple streams (NOTE: not over writers).

*/
public class MultiPrintWriter extends PrintWriter
{
    private MultiOutputStream stream;

    public MultiPrintWriter ()
    {
        this(new MultiOutputStream());
    }

    public MultiPrintWriter (OutputStream outputStream)
    {
        this(new MultiOutputStream());
        addStream(outputStream);
    }

    public MultiPrintWriter (OutputStream outputStream, boolean buffered)
    {
        this(new MultiOutputStream());
        addStream(outputStream, buffered);
    }

    private MultiPrintWriter (MultiOutputStream stream)
    {
        super(new OutputStreamWriter(stream), true);
        this.stream = stream;
    }

    public OutputStream stream ()
    {
        return stream;
    }

    public void addStream (OutputStream s)
    {
        stream.addStream(s, false);
    }

    public void addStream (OutputStream s, boolean buffered)
    {
        stream.addStream(s, buffered);
    }

    public void removeStream (OutputStream s)
    {
        stream.removeStream(s);
    }

    public int count ()
    {
        return stream.count();
    }
    
    public boolean isEmpty ()
    {
        return stream.isEmpty();
    }

    public void flushIfNotBuffered ()
    {
        try {
            stream.flushIfNotBuffered();
        }
        catch (IOException x) {
            setError();
        }
    }
}
