diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java index 4cc0cf7673b735c4641265ac624e68d0204a1970..a768ac37def7977b929a1ecf31cb6d2371f71830 100644 --- a/src/main/java/teetime/framework/Stage.java +++ b/src/main/java/teetime/framework/Stage.java @@ -119,7 +119,7 @@ public abstract class Stage { } catch (TerminateException e) { throw e; } catch (Exception e) { - final FurtherExecution furtherExecution = this.exceptionListener.onStageException(e, this); + final FurtherExecution furtherExecution = this.exceptionListener.reportException(e, this); if (furtherExecution == FurtherExecution.TERMINATE) { throw TerminateException.INSTANCE; } diff --git a/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java index 3cc9dcae8d3218c23cc5194e0ebae60f4b2055ff..81cc2f0297258ddb89dadd5c094f9b28bc41ba71 100644 --- a/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java @@ -31,6 +31,7 @@ import teetime.framework.Stage; public abstract class AbstractExceptionListener { private final List<Exception> exceptionsList = new ArrayList<Exception>(); + private final boolean logExceptions; public enum FurtherExecution { CONTINUE, TERMINATE @@ -41,8 +42,9 @@ public abstract class AbstractExceptionListener { */ protected final Logger logger; - public AbstractExceptionListener() { + protected AbstractExceptionListener(final boolean shouldLogExceptions) { this.logger = LoggerFactory.getLogger(this.getClass().getCanonicalName()); + this.logExceptions = shouldLogExceptions; } /** @@ -61,4 +63,11 @@ public abstract class AbstractExceptionListener { return exceptionsList; } + public FurtherExecution reportException(final Exception e, final Stage stage) { + if (logExceptions) { + exceptionsList.add(e); + } + return onStageException(e, stage); + } + } diff --git a/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java index c46c70a2a585341536612753eaae83cfa3bec38d..3eb5445131482966918d4137e0faee2dc31ec070 100644 --- a/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java @@ -19,6 +19,10 @@ import teetime.framework.Stage; class IgnoringExceptionListener extends AbstractExceptionListener { + IgnoringExceptionListener() { + super(false); + } + @Override public FurtherExecution onStageException(final Exception e, final Stage throwingStage) { return FurtherExecution.CONTINUE; diff --git a/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListener.java index ab7f91768616042130b8430835f6498f5b9a0ef1..8fee623cb29f4068f6d98cedcf68e1dab33cb1ba 100644 --- a/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListener.java @@ -19,6 +19,10 @@ import teetime.framework.Stage; class LoggingExceptionListener extends AbstractExceptionListener { + LoggingExceptionListener() { + super(true); + } + @Override public FurtherExecution onStageException(final Exception e, final Stage throwingStage) { logger.warn("Exception occurred in " + throwingStage.getId(), e); diff --git a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java index b8bcf36df06c6f44d91270df3fa428c0d66e9f69..2490c0e43ad4a15b4ffd47baf86521a642cd1c07 100644 --- a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java +++ b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java @@ -25,7 +25,7 @@ class TerminatingExceptionListener extends AbstractExceptionListener { private final List<Exception> exceptions = new ArrayList<Exception>(); TerminatingExceptionListener() { - // should only be instantiated by its factory + super(true); } @Override diff --git a/src/test/java/teetime/framework/exceptionHandling/TestListener.java b/src/test/java/teetime/framework/exceptionHandling/TestListener.java index 7a8826a9fff58f8d7a84225fa485e3c1e1420e1e..06b32bcd2c3971fe9838776229c0b651ba68fc7e 100644 --- a/src/test/java/teetime/framework/exceptionHandling/TestListener.java +++ b/src/test/java/teetime/framework/exceptionHandling/TestListener.java @@ -19,6 +19,10 @@ import teetime.framework.Stage; public class TestListener extends AbstractExceptionListener { + protected TestListener() { + super(false); + } + private int numExceptionsInvoked; @Override