001 package org.springframework.richclient.exceptionhandling.delegation;
002
003 import java.lang.Thread.UncaughtExceptionHandler;
004
005 /**
006 * Superclass for delegate implementations
007 *
008 * @author Geoffrey De Smet
009 * @since 0.3.0
010 */
011 public abstract class AbstractExceptionHandlerDelegate implements ExceptionHandlerDelegate {
012
013 protected Thread.UncaughtExceptionHandler exceptionHandler;
014 protected ExceptionPurger exceptionPurger = null;
015 protected boolean purgeOnAppropriateCheck = true;
016 protected boolean purgeOnHandling = true;
017
018 public AbstractExceptionHandlerDelegate() {
019 }
020
021 public AbstractExceptionHandlerDelegate(UncaughtExceptionHandler exceptionHandler) {
022 this.exceptionHandler = exceptionHandler;
023 }
024
025 public void setExceptionHandler(Thread.UncaughtExceptionHandler exceptionHandler) {
026 this.exceptionHandler = exceptionHandler;
027 }
028
029 /**
030 * If set the throwable will first be purged before doing the approriate check or handling it.
031 * @param exceptionPurger
032 */
033 public void setExceptionPurger(ExceptionPurger exceptionPurger) {
034 this.exceptionPurger = exceptionPurger;
035 }
036
037 public void setPurgeOnAppropriateCheck(boolean purgeOnAppropriateCheck) {
038 this.purgeOnAppropriateCheck = purgeOnAppropriateCheck;
039 }
040
041 public void setPurgeOnHandling(boolean purgeOnHandling) {
042 this.purgeOnHandling = purgeOnHandling;
043 }
044
045
046 /**
047 * {@inheritDoc}
048 */
049 public final boolean hasAppropriateHandler(Throwable throwable) {
050 if (exceptionPurger != null && purgeOnAppropriateCheck) {
051 throwable = exceptionPurger.purge(throwable);
052 }
053 return hasAppropriateHandlerPurged(throwable);
054 }
055
056
057 public abstract boolean hasAppropriateHandlerPurged(Throwable throwable);
058
059 /**
060 * {@inheritDoc}
061 */
062 public final void uncaughtException(Thread thread, Throwable throwable) {
063 if (exceptionPurger != null && purgeOnHandling) {
064 throwable = exceptionPurger.purge(throwable);
065 }
066 uncaughtExceptionPurged(thread, throwable);
067 }
068
069 public void uncaughtExceptionPurged(Thread thread, Throwable throwable) {
070 exceptionHandler.uncaughtException(thread, throwable);
071 }
072
073 }