package com.traxel.lumbermill.event;
import java.io.Serializable;
import java.text.FieldPosition;
import java.text.Format;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
public abstract class Accessor implements Serializable {
private static final Format DEFAULT_TIME_FORMAT = new SimpleDateFormat("HH:mm:ss.SSS");
private static final Format DECIMAL_SECONDS = new Format() {
@Override
public StringBuffer
format(
final Object o,
final StringBuffer buff,
final FieldPosition pos) {
final long value;
final long left;
final long right;
value = ((Long)o).longValue();
left = value / 1000;
buff.append("" + left + ".");
right = value % 1000;
if (right == 0) {
buff.append("000");
} else if (right < 10) {
buff.append("00" + right);
} else if (right < 100) {
buff.append("0" + right);
} else {
buff.append("" + right);
}
return buff;
}
@Override
public Object
parseObject(
final String source,
final ParsePosition pos) {
return Long.valueOf(source.replaceAll("\\.", ""));
}
};
public static final Accessor SEVERITY = new Accessor("Severity") {
@Override
public Object
getValue(
final Event event) {
return event.getSeverity();
}
@Override
return Severity.class;
}
};
public static final Accessor TIMESTAMP = new Accessor("Timestamp") {
{
setFormat(DEFAULT_TIME_FORMAT);
}
@Override
public Object
getValue(
final Event event) {
return new Date(event.getTimestamp());
}
@Override
return Date.class;
}
};
public static final Accessor ELAPSED_TIME = new Accessor("Elapsed Time", "Elapsed") {
{
setFormat(DECIMAL_SECONDS);
}
@Override
public Object
getValue(
final Event event) {
return new Long(event.getElapsedTime());
}
@Override
return Long.TYPE;
}
};
public static final Accessor HAS_THROWN = new Accessor("Has Thrown", "T") {
@Override
public Object
getValue(
final Event event) {
return Boolean.valueOf((event.getStackTrace() != null) && (event.getStackTrace().length() > 0));
}
@Override
return Boolean.class;
}
};
public static final Accessor SHORT_SOURCE = new Accessor("Short Source", "Source") {
@Override
public Object
getValue(
final Event event) {
return event.getLastSourceComponent();
}
@Override
return String.class;
}
};
public static final Accessor SOURCE = new Accessor("Source") {
@Override
public Object
getValue(
final Event event) {
return event.getSource();
}
@Override
return String.class;
}
};
public static final Accessor MESSAGE = new Accessor("Message") {
@Override
public Object
getValue(
final Event event) {
return event.getMessage();
}
@Override
return String.class;
}
};
public static final Accessor NDC = new Accessor("NDC (Log4J)", "NDC") {
@Override
public Object
getValue(
final Event event) {
return event.getNDC();
}
@Override
return String.class;
}
};
private Format _format;
private final String _name;
private final String _shortName;
private final String _description;
this(name, name);
}
public Accessor(
final String name,
final String shortName) {
this(name, shortName, name);
}
public Accessor(
final String name,
final String shortName,
final String description) {
_name = name;
_shortName = shortName;
_description = description;
}
return _name;
}
return _shortName;
}
return _description;
}
_format = format;
}
public abstract Object
getValue(Event event);
if (_format == null) {
return String.valueOf(getValue(event));
} else {
return _format.format(getValue(event));
}
}
}