// Copyright 2001, FreeHEP. package org.freehep.util.io; import java.io.OutputStream; import java.io.PrintStream; import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; /** * The UniquePrintStream keeps Strings buffered in sorted order, but any * duplicates are removed. This stream can be used to print error messages * exactly once. When finish is called all messages are printed. * * It only acts on the println(String) method, any other method will print * directly. * * @author Mark Donszelmann * @version $Id: UniquePrintStream.java,v 1.3 2008-05-04 12:21:08 murkle Exp $ */ public class UniquePrintStream extends PrintStream implements FinishableOutputStream { private SortedSet msg = new TreeSet(); /** * Create a Unique Print Stream. * * @param out * stream to write */ public UniquePrintStream(OutputStream out) { super(out); } @Override public void println(String s) { synchronized (this) { msg.add(s); } } @Override public void finish() { for (Iterator i = msg.iterator(); i.hasNext();) { String s = (String) i.next(); super.println(s); } msg = new TreeSet(); } }