package org.mitre.test.impl; import org.mitre.test.Reporter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; /** * Base report writer. * * @author Jason Mathews, MITRE Corp. * Date: 6/28/12 3:32 PM */ public abstract class AbstractReporter implements Reporter { protected long startTime; protected long elapsedTime; protected PrintStream outputStream, origSysOut; public long getStartTime() { return startTime; } public long getElapsedTime() { return elapsedTime; } @Override public void setOutputFile(String outFile) throws IOException { FileOutputStream fos = new FileOutputStream(outFile); outputStream = createPrintStream(fos); if (origSysOut == null) { // save original origSysOut = System.out; // if call setOutputFile multiple times without first calling close() // would lose original System.out so only change if value unset. } System.setOut(outputStream); } /** * Create PrintStream. Allow subclasses to implement custom PrintStream classes * * @param out The output stream to which values and objects will be * printed * @return PrintStream */ protected PrintStream createPrintStream(OutputStream out) { return new PrintStream(out); } public void close() { if (origSysOut != null) { // restore original System.out System.setOut(origSysOut); origSysOut = null; } if (outputStream != null) { outputStream.close(); outputStream = null; } } }