001    // Copyright 2009 Waterken Inc. under the terms of the MIT X license
002    // found at http://www.opensource.org/licenses/mit-license.html
003    package org.waterken.trace;
004    
005    import java.io.PrintStream;
006    import java.io.Serializable;
007    
008    import org.joe_e.Struct;
009    import org.ref_send.deserializer;
010    import org.ref_send.name;
011    import org.ref_send.log.Comment;
012    import org.ref_send.log.Event;
013    import org.ref_send.promise.Receiver;
014    
015    /**
016     * Prints {@linkplain Comment comments} to an output stream.
017     */
018    public final class
019    Verbose extends Struct implements Receiver<Event>, Serializable {
020        static private final long serialVersionUID = 1L;
021        
022        private final PrintStream out;
023        private final Receiver<Event> next;
024        
025        /**
026         * Constructs an instance.
027         * @param out   output stream
028         * @param next  next event receiver
029         */
030        public @deserializer
031        Verbose(@name("out") final PrintStream out,
032                @name("next") final Receiver<Event> next) {
033            this.out = out;
034            this.next = next;
035        }
036        
037        public void
038        apply(final Event value) {
039            if (value instanceof Comment) {
040                out.println(value.anchor.turn.loop + ": " + ((Comment)value).text);
041            }
042            if (null != next) { next.apply(value); }
043        }
044    }