1 22 package org.archive.io; 23 24 import java.util.Iterator ; 25 import java.util.Vector ; 26 import java.util.logging.Handler ; 27 import java.util.logging.Level ; 28 import java.util.logging.LogManager ; 29 import java.util.logging.LogRecord ; 30 import java.util.logging.Logger ; 31 32 33 34 46 public class SinkHandler extends Handler { 47 50 private Vector <SinkHandlerLogRecord> sink 51 = new Vector <SinkHandlerLogRecord>(); 52 53 public SinkHandler() { 54 LogManager manager = LogManager.getLogManager(); 55 String className = getClass().getName(); 56 String tmp = manager.getProperty(className + ".level"); 57 if (tmp != null) { 58 setLevel(Level.parse(tmp)); 59 } 60 } 61 62 public void publish(LogRecord record) { 63 if (!isLoggable(record)) { 64 return; 65 } 66 this.sink.add(new SinkHandlerLogRecord(record)); 67 } 68 69 public void flush() { 70 } 72 73 public void close() throws SecurityException { 74 flush(); 75 } 76 77 80 public static SinkHandler getInstance() { 81 SinkHandler h = null; 82 Handler [] handlers = Logger.getLogger("").getHandlers(); 83 for (int i = 0; i < handlers.length; i++) { 84 if (handlers[i] instanceof SinkHandler) { 85 h = (SinkHandler) handlers[i]; 86 break; 87 } 88 } 89 if (h == null) { 90 h = new SinkHandler(); 94 h.setLevel(Level.WARNING); 95 Logger.getLogger("").addHandler(h); 96 } 97 return h; 98 } 99 100 103 public Vector getAll() { 104 return this.sink; 105 } 106 107 110 public Vector <SinkHandlerLogRecord> getAllUnread() { 111 if (this.sink == null) { 112 return null; 113 } 114 Vector <SinkHandlerLogRecord> newLogRecords; 115 newLogRecords = new Vector <SinkHandlerLogRecord>(); 116 for (final Iterator i = this.sink.iterator(); i.hasNext();) { 117 SinkHandlerLogRecord lr = (SinkHandlerLogRecord) i.next(); 118 if (!lr.isRead()) { 119 newLogRecords.add(lr); 120 } 121 } 122 return (newLogRecords.size() == 0) ? null : newLogRecords; 123 } 124 125 128 public int getCount() { 129 return this.sink != null? this.sink.size(): 0; 130 } 131 132 135 public int getUnreadCount() { 136 if (this.sink == null) { 137 return 0; 138 } 139 int n = 0; 140 for (final Iterator i = this.sink.iterator(); i.hasNext();) { 141 SinkHandlerLogRecord lr = (SinkHandlerLogRecord)i.next(); 142 if (!lr.isRead()) { 143 n++; 144 } 145 } 146 return n; 147 } 148 149 153 public SinkHandlerLogRecord get(long id) { 154 if (this.sink == null) { 155 return null; 156 } 157 for (final Iterator i = this.sink.iterator(); i.hasNext();) { 158 SinkHandlerLogRecord lr = (SinkHandlerLogRecord)i.next(); 159 if (lr.getSequenceNumber() == id) { 160 return lr; 161 } 162 } 163 return null; 164 } 165 166 170 public SinkHandlerLogRecord remove(final long id) { 171 SinkHandlerLogRecord shlr = null; 172 if (this.sink == null) { 173 return shlr; 174 } 175 for (final Iterator i = this.sink.iterator(); i.hasNext();) { 176 SinkHandlerLogRecord lr = (SinkHandlerLogRecord)i.next(); 177 if (lr.getSequenceNumber() == id) { 178 i.remove(); 179 shlr = lr; 180 break; 181 } 182 } 183 return shlr; 184 } 185 186 190 public void read(final long id) { 191 for (final Iterator i = this.sink.iterator(); i.hasNext();) { 192 SinkHandlerLogRecord lr = (SinkHandlerLogRecord)i.next(); 193 if (lr.getSequenceNumber() == id) { 194 lr.setRead(); 195 break; 196 } 197 } 198 } 199 } 200 | Popular Tags |