// 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: src/main/java/org/freehep/util/io/UniquePrintStream.java
* 96b41b903496 2005/11/21 19:50:18 duns $
*/
public class UniquePrintStream extends PrintStream implements
FinishableOutputStream {
private SortedSet<String> msg = new TreeSet<String>();
/**
* 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);
}
}
public void finish() {
for (Iterator<String> i = msg.iterator(); i.hasNext();) {
String s = i.next();
super.println(s);
}
msg = new TreeSet<String>();
}
}