/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
/*
* ReaderWriterPipe.java
*/
package org.biojava.utils.process;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* A {@linkplain java.lang.Runnable multi threaded} class
* which pipes the contents of an input reader to an output
* writer.
* @author Martin Szugat
* @version $Revision: 3634 $
*/
public class ReaderWriterPipe implements Runnable {
/* STATIC FIELDS */
/**
* The class logger.
*/
private static final Logger LOGGER =
Logger.getLogger(ReaderWriterPipe.class.getName());
/* PRIVATE FIELDS */
/**
* The reader from which to read.
*/
private Reader reader;
/**
* The writer to which to write.
*/
private Writer writer;
/**
* A tag for logging.
*/
private String tag;
/* PUBLIC CONSTRUCTORS */
/**
* Initializes the reader writer pipe.
* @param reader the reader from which to read. May be null
.
* @param writer the writer to which to write. May be null
.
* @param tag a tag for loggging. May be null
.
*/
public ReaderWriterPipe(Reader reader, Writer writer, String tag) {
setReader(reader);
setWriter(writer);
this.tag = tag;
}
/* PUBLIC PROPERTIES */
/**
* Gets the reader.
* @return the reader from which to read. May be null
.
*/
public Reader getReader() {
return reader;
}
/**
* Gets the writer.
* @return the writer to which to write. May be null
.
*/
public Writer getWriter() {
return writer;
}
/**
* Sets the reader.
* @param reader the reader from which to read. May be null
.
*/
public void setReader(Reader reader) {
this.reader = reader;
}
/**
* Sets the writer.
* @param writer the writer to which to write. May be null
.
*/
public void setWriter(Writer writer) {
this.writer = writer;
}
/* INTERFACE Runnable */
/**
* {@inheritDoc}
*/
public void run() {
LOGGER.entering(getClass().getName(), "run");
if (reader != null) {
try {
BufferedWriter bout = null;
if (writer != null) {
bout = new BufferedWriter(writer);
}
BufferedReader bin = new BufferedReader(reader);
boolean log = LOGGER.isLoggable(Level.FINEST);
String line = null;
while ((line = bin.readLine()) != null) {
if (bout != null) {
if (log) {
if (tag == null) {
LOGGER.finest(line);
} else {
LOGGER.finest("<" + tag + "> " + line);
}
}
bout.write(line);
bout.newLine();
bout.flush();
}
}
} catch (Exception e) {
LOGGER.severe(e.toString());
}
}
LOGGER.exiting(getClass().getName(), "run");
}
}