blob: 2ea04062005b508b007e7ad1faba1ca63ea6d01a [file] [log] [blame]
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.lib.cvsclient.io;
import org.netbeans.lib.cvsclient.util.BugLog;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
/**
* @author Thomas Singer
*/
public abstract class AbstractOutputStreamWriter extends Writer {
// Abstract ===============================================================
protected abstract void writeChar(char chr, OutputStream outputStream) throws IOException;
// Fields =================================================================
private final OutputStream outputStream;
// Setup ==================================================================
protected AbstractOutputStreamWriter(OutputStream outputStream) {
BugLog.getInstance().assertNotNull(outputStream);
this.outputStream = outputStream;
}
// Implemented ============================================================
public final void write(int chr) throws IOException {
ensureOpen();
writeChar((char)chr, outputStream);
}
public final void write(char buffer[], int offset, int length) throws IOException {
if (offset < 0
|| length < 0
|| offset + length > buffer.length) {
throw new IndexOutOfBoundsException();
}
ensureOpen();
for (; length > 0; offset++, length--) {
final char chr = buffer[offset];
writeChar(chr, outputStream);
}
}
public final void flush() throws IOException {
ensureOpen();
outputStream.flush();
}
public final void close() throws IOException {
ensureOpen();
flush();
outputStream.close();
}
// Utils ==================================================================
private void ensureOpen() throws IOException {
if (outputStream == null) {
throw new IOException("Stream closed");
}
}
}