// Modified or written by Luca Marrocco for inclusion with hoptoad.
// Copyright (c) 2009 Luca Marrocco.
// Licensed under the Apache License, Version 2.0 (the "License")
package hoptoad;
import java.util.*;
import java.util.Map.Entry;
import org.apache.commons.lang.*;
public class NoticeApi2 {
private final StringBuilder stringBuilder = new StringBuilder();
public NoticeApi2(HoptoadNotice notice) {
notice("2.0.0");
{
apikey(notice);
notifier();
{
name("hoptoad");
version("1.7-socrata-SNAPSHOT");
url("http://hoptoad.googlecode.com");
}
end("notifier");
error();
{
tag("class", notice.errorClass());
tag("message", notice.errorMessage());
backtrace();
{
for (final String backtrace : notice.backtrace()) {
line(backtrace);
}
}
end("backtrace");
}
end("error");
if (notice.hasRequest()) {
addRequest(notice);
}
server_environment();
{
tag("project-root", notice.projectRoot());
tag("environment-name", notice.env());
}
end("server-environment");
}
end("notice");
}
private void addRequest(HoptoadNotice notice) {
request();
{
tag("url", notice.url());
tag("component", notice.component());
vars("params", notice.request());
vars("session", notice.session());
vars("cgi-data", notice.environment());
}
end("request");
}
private void vars(String sectionName, Map<String, Object> vars) {
if (vars.isEmpty()) {
return;
}
tag(sectionName);
for (Entry<String, Object> var : vars.entrySet()) {
append("<var key=\"" + var.getKey() + "\">");
text(var.getValue().toString());
append("</var>");
}
end(sectionName);
}
private void request() {
tag("request");
}
private void apikey(HoptoadNotice notice) {
tag("api-key");
{
append(notice.apiKey());
}
end("api-key");
}
private void append(String str) {
stringBuilder.append(str);
}
private void backtrace() {
tag("backtrace");
}
private void end(String string) {
append("</" + string + ">");
}
private void error() {
tag("error");
}
private void server_environment() {
tag("server-environment");
}
private void line(String backtrace) {
append(new BacktraceLine(backtrace).toXml());
}
private void name(String name) {
tag("name", name);
}
private void notice(String string) {
append("<?xml version=\"1.0\"?>");
append("<notice version=\"" + string + "\">");
}
private void notifier() {
tag("notifier");
}
private NoticeApi2 tag(String string) {
append("<" + string + ">");
return this;
}
private void tag(String string, String contents) {
tag(string).text(contents).end(string);
}
private NoticeApi2 text(String string) {
append(StringEscapeUtils.escapeXml(string));
return this;
}
public String toString() {
return stringBuilder.toString();
}
private void url(String url) {
tag("url", url);
}
private void version(String version) {
tag("version", version);
}
}