001 /* 002 @license.text@ 003 */ 004 package biz.hammurapi.util; 005 006 import java.util.Collections; 007 import java.util.Iterator; 008 import java.util.LinkedList; 009 import java.util.List; 010 011 /** 012 * @author Pavel Vlasov 013 * @version $Revision: 1.1 $ 014 */ 015 public class AccumulatingExceptionSink implements ExceptionSink { 016 private List exceptions=new LinkedList(); 017 018 public class Entry { 019 Entry(Object source, Exception exception) { 020 super(); 021 this.source = source; 022 this.exception = exception; 023 } 024 Object source; 025 Exception exception; 026 027 public Exception getException() { 028 return exception; 029 } 030 public Object getSource() { 031 return source; 032 } 033 } 034 035 public synchronized void consume(Object source, Exception e) { 036 exceptions.add(new Entry(source, e)); 037 } 038 039 public synchronized List getExceptions() { 040 return Collections.unmodifiableList(exceptions); 041 } 042 043 public synchronized void reset() { 044 exceptions.clear(); 045 } 046 047 /** 048 * Invokes printStackTrace() for all accumulated exceptions 049 */ 050 public synchronized void dump() { 051 Iterator it=exceptions.iterator(); 052 while (it.hasNext()) { 053 Entry entry=(Entry) it.next(); 054 System.err.println("Source: "+entry.getSource()); 055 entry.getException().printStackTrace(); 056 } 057 } 058 }