package org.test4j.module.tracer;
import java.io.IOException;
import java.io.Writer;
import org.test4j.tools.commons.StringHelper;
@SuppressWarnings("rawtypes")
public class XmlFileTracerLogger extends TracerLogger {
private StringBuilder buff = new StringBuilder();
private int tabCount = 1;
public void writerMethodInputInfo(Class claz, String method, Object[] values) {
this.writeTab(1);
buff.append(String.format("<call class=\"%s\" method=\"%s\">\n", claz.getName(), method));
this.writeTab(1);
buff.append(String.format("<paras count=\"%d\">\n", values.length));
for (int index = 1; index <= values.length; index++) {
this.writeTab(0);
buff.append("<para>");
buff.append("<![CDATA[");
buff.append(toJSON(values[index - 1]));
buff.append("]]>");
buff.append("</para>\n");
}
this.tabCount--;
this.writeTab(0);
buff.append("</paras>\n");
}
public void writerMethodException(Class claz, String method, Throwable exception) {
this.writeTab(-1);
buff.append("<throwable><![CDATA[");
if (exception == null) {
buff.append("<null>");
} else {
buff.append(exception.getClass().getName()).append(":").append(exception.getMessage());
}
buff.append("]]></throwable>\n");
// end call
this.writeTab(0);
buff.append("</call>\n");
}
public void writerMethodReturnValue(Class claz, String method, Object result) {
this.writeTab(-1);
buff.append("<return><![CDATA[");
buff.append(toJSON(result));
buff.append("]]></return>\n");
// end call
this.writeTab(0);
buff.append("</call>\n");
}
public void writerSqlStatement(String sql, Object result) {
this.writeTab(0);
buff.append("<sql><![CDATA[");
buff.append(sql);
buff.append("]]></sql>\n");
}
protected String getTracerContext() {
return buff.toString();
}
public void close() {
String log = this.getTracerContext();
if (StringHelper.isBlankOrNull(log)) {
return;
}
try {
Writer writer = getWriter("xml");
writer.write("<test>\n");
writer.write(log);
writer.write("</test>");
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private void writeTab(int step) {
for (int index = 0; index < tabCount; index++) {
buff.append(" ");
}
this.tabCount = tabCount + step;
}
}