001 package com.hammurapi.review;
002
003 import java.io.PrintStream;
004
005 public class PrintStreamReporter implements Reporter<Object> {
006
007 private PrintStream out;
008 private boolean closeStream;
009
010 public PrintStreamReporter(PrintStream out, boolean closeStream) {
011 this.out = out;
012 this.closeStream = closeStream;
013 out.println("New reporter.");
014 }
015
016 /**
017 * Constructs print stream reporter from System.out
018 */
019 public PrintStreamReporter() {
020 this(System.out, false);
021 }
022
023 @Override
024 public void close() throws ReviewException {
025 out.println("Review finished.");
026 if (closeStream) {
027 out.close();
028 }
029 }
030
031 @Override
032 public ObservationSink createObservationSink(final Module module) throws ReviewException {
033 out.println("Started review of module "+module.getName());
034
035 return new ObservationSink() {
036
037 @Override
038 public void consumeObservation(Observation observation) throws ReviewException {
039 out.println("["+module.getName()+"] "+observation);
040 }
041
042 @Override
043 public void close() throws ReviewException {
044 out.println("Finished review of moudle "+module.getName());
045 }
046 };
047 }
048
049 @Override
050 public void onException(Exception e) {
051 out.println("Exception during review: ");
052 e.printStackTrace(out);
053 }
054
055 }