package com.google.code.joto.eventrecorder.processor.impl;
import java.io.PrintStream;
import com.google.code.joto.ObjectToCodeGenerator;
import com.google.code.joto.eventrecorder.RecordEventSummary;
import com.google.code.joto.eventrecorder.processor.RecordEventsProcessor;
import com.google.code.joto.eventrecorder.processor.RecordEventsProcessorFactory;
/**
* Formatter for converting RecordEvent(s) -> String as Java "new/call" code,
* using ObjectToCodeGenerator
*/
public class ObjToCodeRecordEventsProcessor implements RecordEventsProcessor {
public static class Factory implements RecordEventsProcessorFactory<PrintStream> {
private ObjectToCodeGenerator objToCode;
public Factory(ObjectToCodeGenerator objToCode) {
super();
this.objToCode = objToCode;
}
@Override
public RecordEventsProcessor create(PrintStream out) {
return new ObjToCodeRecordEventsProcessor(objToCode, out);
}
}
private ObjectToCodeGenerator objToCode;
private PrintStream out;
//-------------------------------------------------------------------------
public ObjToCodeRecordEventsProcessor(ObjectToCodeGenerator objToCode, PrintStream out) {
this.objToCode = objToCode;
this.out = out;
}
// -------------------------------------------------------------------------
@Override
public boolean needEventObjectData() {
return true;
}
@Override
public void processEvent(RecordEventSummary event, Object eventData) {
String simpleClassMethName = "";
String simpleClassName = event.getEventClassName();
if (simpleClassName != null) {
int indexLastDot = simpleClassName.lastIndexOf(".");
if (indexLastDot != -1) {
simpleClassName = simpleClassName.substring(indexLastDot + 1);
}
simpleClassMethName = simpleClassName + ".";
}
simpleClassMethName += event.getEventMethodName();
out.print("{ // evt:" + event.getEventId()
+ ", meth: " + simpleClassMethName + "\n");
String stmtsStr = objToCode.objToStmtsString(eventData, "eventData");
out.print(stmtsStr);
out.print("\n} // \n");
out.print("\n");
}
//-------------------------------------------------------------------------
@Override
public String toString() {
return "ObjToCodeRecordEventsProcessor[..]";
}
}