package net.sourceforge.seqware.common.util.iotools; import com.google.common.collect.EvictingQueue; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import org.apache.commons.lang3.StringUtils; /** * <p> * BufferedReaderThread class. * </p> * * @author jmendler * @version $Id: $Id */ public class BufferedReaderThread extends Thread { BufferedReader reader = null; Collection<String> output = null; String error = null; private File allLinesFile = null; /** * <p> * Constructor for BufferedReaderThread. * </p> * * @param input * a {@link java.io.InputStream} object. */ public BufferedReaderThread(InputStream input) { reader = new BufferedReader(new InputStreamReader(input)); output = new ArrayList<>(); } /** * <p> * Constructor for BufferedReaderThread. * </p> * * @param input * a {@link java.io.InputStream} object. * @param lineCapacity * set the capacity for the buffered reader, set to Integer.MAX_VALUE to store everything */ public BufferedReaderThread(InputStream input, int lineCapacity) { reader = new BufferedReader(new InputStreamReader(input)); if (lineCapacity == Integer.MAX_VALUE) { output = new ArrayList<>(); return; } output = EvictingQueue.create(lineCapacity); } /** * <p> * Constructor for BufferedReaderThread. * </p> * * @param input * a {@link java.io.InputStream} object. * @param lineCapacity * set the capacity for the buffered reader, set to Integer.MAX_VALUE to store everything * @param allLinesFile */ public BufferedReaderThread(InputStream input, int lineCapacity, File allLinesFile) { this(input, lineCapacity); this.allLinesFile = allLinesFile; } /** {@inheritDoc} */ @Override public void run() { String line; PrintWriter writer = null; try { if (allLinesFile != null) { writer = new PrintWriter(new BufferedWriter(new FileWriter(allLinesFile))); } while ((line = reader.readLine()) != null) { output.add(line); if (writer != null) { writer.println(line); } } } catch (IOException e) { error = e.getMessage(); } finally { if (writer != null) { writer.flush(); writer.close(); } } } public String getOutput() { return StringUtils.join(output, '\n'); } /** * <p> * Getter for the field <code>error</code>. * </p> * * @return a {@link java.lang.String} object. */ public String getError() { return error; } /** * <p> * Getter for the field <code>reader</code>. * </p> * * @return a {@link java.io.BufferedReader} object. */ public BufferedReader getReader() { return reader; } /** * <p> * Setter for the field <code>reader</code>. * </p> * * @param reader * a {@link java.io.BufferedReader} object. */ public void setReader(BufferedReader reader) { this.reader = reader; } }