80 lines
2.6 KiB
Java
80 lines
2.6 KiB
Java
package tc.oc.pgm.map;
|
|
|
|
import java.util.logging.Level;
|
|
import java.util.logging.LogRecord;
|
|
import javax.annotation.Nullable;
|
|
|
|
import org.bukkit.ChatColor;
|
|
import org.jdom2.input.JDOMParseException;
|
|
import tc.oc.commons.bukkit.logging.ChatLogRecord;
|
|
import tc.oc.pgm.module.ModuleLoadException;
|
|
import tc.oc.pgm.xml.InvalidXMLException;
|
|
import tc.oc.pgm.xml.Node;
|
|
|
|
public class MapLogRecord extends ChatLogRecord {
|
|
|
|
private final MapDefinition map;
|
|
private final String location;
|
|
|
|
protected MapLogRecord(MapDefinition map, Level level, @Nullable String location, @Nullable String message, @Nullable Throwable thrown) {
|
|
super(level, message != null ? message : thrown != null ? thrown.getMessage() : null);
|
|
this.map = map;
|
|
if(location == null) {
|
|
if(thrown instanceof InvalidXMLException) {
|
|
location = ((InvalidXMLException) thrown).getFullLocation();
|
|
}
|
|
|
|
if(location == null) {
|
|
location = map.getFolder().getRelativeDescriptionFilePath().toString();
|
|
}
|
|
}
|
|
|
|
this.location = location;
|
|
|
|
if(thrown != null) setThrown(thrown);
|
|
setLoggerName(map.getLogger().getName());
|
|
}
|
|
|
|
public MapLogRecord(MapDefinition map, Level level, Node node, @Nullable String message) {
|
|
this(map, level, node.describeWithDocumentAndLocation(), message, null);
|
|
}
|
|
|
|
public MapLogRecord(MapDefinition map, ModuleLoadException thrown) {
|
|
this(map, Level.SEVERE, null, null, thrown);
|
|
}
|
|
|
|
protected MapLogRecord(MapDefinition map, LogRecord record) {
|
|
this(map, record.getLevel(), null, record.getMessage(), record.getThrown());
|
|
}
|
|
|
|
@Override
|
|
public String getLegacyFormattedMessage() {
|
|
String message = ChatColor.AQUA + getLocation() + ": " + ChatColor.RED + getMessage();
|
|
|
|
Throwable thrown = getThrown();
|
|
if(thrown != null && thrown.getCause() != null && thrown.getCause().getMessage() != null) {
|
|
message += ", caused by: " + thrown.getCause().getMessage();
|
|
}
|
|
|
|
return message;
|
|
}
|
|
|
|
@Override
|
|
public boolean suppressStackTrace() {
|
|
// Don't dump the stack if the root cause is just a parse error
|
|
Throwable thrown = getThrown();
|
|
while(thrown instanceof InvalidXMLException) thrown = thrown.getCause();
|
|
return thrown == null ||
|
|
(thrown instanceof JDOMParseException) ||
|
|
super.suppressStackTrace();
|
|
}
|
|
|
|
public MapDefinition getMap() {
|
|
return map;
|
|
}
|
|
|
|
public String getLocation() {
|
|
return location;
|
|
}
|
|
}
|