1 17 18 package org.columba.core.scripting; 19 20 import java.io.PrintWriter ; 21 import java.io.StringWriter ; 22 import java.util.Collections ; 23 import java.util.LinkedList ; 24 import java.util.List ; 25 import java.util.Observable ; 26 27 30 public class ScriptLogger 31 extends Observable 32 { 33 34 public static class LogEntry 35 { 36 private String 37 message, 38 details; 39 40 public LogEntry() 41 { 42 this("", ""); 43 } 44 45 public LogEntry(String message) 46 { 47 this(message, ""); 48 } 49 50 public LogEntry(String message, String details) 51 { 52 this.message = message; 53 this.details = details; 54 } 55 56 public String getMessage() 57 { 58 return message; 59 } 60 61 public void setMessage(String message) 62 { 63 this.message = message; 64 } 65 66 public String getDetails() 67 { 68 return details; 69 } 70 71 public void setDetails(String details) 72 { 73 this.details = details; 74 } 75 } 76 77 private LinkedList <LogEntry> logger; 78 private static ScriptLogger self = null; 79 private static final int MAX_LOG_ENTRIES = 200; 80 81 private ScriptLogger() 82 { 83 logger = new LinkedList <LogEntry>(); 84 } 85 86 87 public static ScriptLogger getInstance() 88 { 89 if (self == null) self = new ScriptLogger(); 90 91 return self; 92 } 93 94 public void append(String message, Exception details) 95 { 96 StringWriter writer = new StringWriter (); 97 details.printStackTrace(new PrintWriter (writer)); 98 append(message, writer.toString()); 99 } 100 101 public void append(String message, String details) 102 { 103 append(new LogEntry(message, details)); 104 } 105 106 public void append(String message) 107 { 108 append(message, ""); 109 } 110 111 public void append(LogEntry entry) 112 { 113 logger.addFirst(entry); 114 if (logger.size() > MAX_LOG_ENTRIES) logger.remove(0); 115 116 setChanged(); 117 notifyObservers(entry); 118 } 119 120 public void clear() 121 { 122 logger.clear(); 123 } 124 125 public List <LogEntry> dumpCurrentLog() 126 { 127 return Collections.unmodifiableList(logger); 128 } 129 130 } 131 | Popular Tags |