package com.google.code.joto.eventrecorder.processor.impl; import java.io.PrintStream; import com.google.code.joto.eventrecorder.RecordEventSummary; import com.google.code.joto.eventrecorder.processor.RecordEventsProcessor; import com.google.code.joto.eventrecorder.processor.RecordEventsProcessorFactory; import com.thoughtworks.xstream.XStream; /** * a simple Formatter, for converting RecordEvent(s) -> String as XStream dump */ public class XStreamFormatterRecordEventsProcessor implements RecordEventsProcessor { public static class Factory implements RecordEventsProcessorFactory<PrintStream> { XStream xstream; public Factory(XStream xstream) { super(); this.xstream = xstream; } @Override public RecordEventsProcessor create(PrintStream out) { return new XStreamFormatterRecordEventsProcessor(xstream, out); } } private XStream xstream; private PrintStream out; //------------------------------------------------------------------------- public XStreamFormatterRecordEventsProcessor(XStream xstream, PrintStream out) { this.xstream = xstream; this.out = out; } // ------------------------------------------------------------------------- @Override public boolean needEventObjectData() { return true; } @Override public void processEvent(RecordEventSummary event, Object eventData) { out.print("<event " + " id=\"" + event.getEventId() + "\"" + " type=\"" + event.getEventType() + "\"" + " subtype=\"" + event.getEventSubType() + "\"" + "\n" + ((event.getEventMethodName() != null)? " meth=\"" + event.getEventMethodName() + "\"" : "") + ((event.getEventMethodDetail() != null)? " meth=\"" + event.getEventMethodDetail() + "\"" : "") + ">\n"); String eventXml = xstream.toXML(eventData); out.print(eventXml); out.print("\n"); out.print("</event>\n"); out.print("\n"); } //------------------------------------------------------------------------- @Override public String toString() { return "XStreamFormatterRecordEventsProcessor[..]"; } }