package com.traxel.lumbermill.event;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
import org.openide.util.NbPreferences;
import java.io.Serializable;
import java.util.List;
import java.util.logging.LogRecord;
import de.cismet.beanmill.NetbeansPanel;
import de.cismet.tools.StaticHtmlTools;
public abstract class Event implements Serializable {
private static final transient Logger LOG = Logger.getLogger(Event.class);
private StringBuilder html;
protected static Event
create(
final Object object) {
final Event event;
if (object == null) {
event = null;
} else if (object instanceof LogRecord) {
event = new JavaEvent((LogRecord)object);
} else if (object instanceof LoggingEvent) {
event = new Log4jEvent((LoggingEvent)object);
} else {
event = null;
}
return event;
}
public abstract String
getNDC();
html = new StringBuilder();
if (getLocation() != null) {
insert("Location", getLocation(), false);
}
if (NbPreferences.forModule(Event.class).getBoolean(NetbeansPanel.PROP_SHOW_HTML_MSG, true)) {
insert(this, Accessor.MESSAGE, true, false);
}
insert(this, Accessor.NDC, false, false);
if (getStackTrace() != null) {
insertStackTrace("Stack Trace", getStackTrace());
}
if (NbPreferences.forModule(Event.class).getBoolean(NetbeansPanel.PROP_SHOW_RAW_MSG, true)) {
insert(this, Accessor.MESSAGE, true, true);
}
return html.toString();
}
private void insert(
final Event event,
final Accessor accessor,
final boolean showIfNull,
final boolean raw) {
if (showIfNull || (accessor.getValue(event) != null)) {
insert(accessor.getName(), accessor.getString(event), raw);
}
}
private void (final String header, final String stackTrace) {
final StringBuilder stackTraceS = new StringBuilder();
boolean first = true;
for (final String line : stackTrace.split("\n")) {
String pre = " ";
if (!first) {
pre = " ";
} else {
first = false;
}
final String filtered = filterLineCommand(line);
if (filtered != null) {
stackTraceS.append(pre).append("<a href=\"")
.append(filtered).append("\">")
.append(htmlReady(line)).append("</a><br>");
} else {
stackTraceS.append(pre).append(line).append("<br>");
}
}
html.append("<b><span style=\"font-family:sans-serif; font-size:115%\">")
.append(header).append("</span></b><br><span style=\"font-family:sans-serif; font-size:80%\">")
.append(stackTraceS).append("<br></span><br>");
}
private void (final String header, final String message, final boolean raw) {
final String filtered = filterLineCommand(message);
final String modMsg;
if (filtered != null) {
modMsg = "<a href=\"" + filtered + "\">" + htmlReady(message) + "</a>";
} else {
modMsg = message.replace("<html>", "").replace("</html>", "");
}
html.append("<b><span style=\"font-family:sans-serif; font-size:115%\">")
.append(raw ? ("Raw " + header) : header).append("</span></b><br><span style=\"font-family:sans-serif")
.append("; font-size:90%\">")
.append(raw ? StaticHtmlTools.stringToHTMLString(modMsg) : modMsg).append("</span><br><br>");
}
private String
htmlReady(
final String line) {
return line.replaceAll("<", "<").replaceAll(">", ">");
}
if (line.matches(".*.java:.*")) {
try {
String classname = "";
classname = line.replaceAll(".*\\(", "");
final String end = classname.replaceAll("\\).*", "");
String[] ar = end.split("\\.java:");
final String linenumber = ar[1];
classname = ar[0];
final String start = new String(line.substring(0, line.lastIndexOf(end) - 1));
ar = start.split(" ");
String path = ar[ar.length - 1];
path = path.replaceAll("\\$", ".");
ar = path.split("\\.");
path = "";
boolean join = false;
for (int i = ar.length - 1; i >= 0; --i) {
if (ar[i].equals(classname)) {
join = true;
}
if (join) {
path = ar[i] + "." + path;
}
}
try {
if (path.length() > 0) {
path = new String(path.substring(0, path.length() - 1));
}
return path + ":" + linenumber;
} catch (final Exception e) {
if (LOG.isInfoEnabled()) {
LOG.info("path processing issue: " + path, e);
}
return path;
}
} catch (final Exception e) {
LOG.error("could not process line: " + line, e);
return null;
}
} else {
return null;
}
}
}