release 0.9.6
[debian/openrocket] / src / net / sf / openrocket / logging / BufferLogger.java
1 package net.sf.openrocket.logging;
2
3 import java.util.EnumMap;
4 import java.util.List;
5
6 /**
7  * A logger implementation that buffers specific levels of log lines.
8  * The levels that are logged are set using the method
9  * {@link #setStoreLevel(LogLevel, boolean)}.  The stored LogLines can
10  * be obtained using {@link #getLogs()}.
11  * 
12  * @author Sampo Niskanen <sampo.niskanen@iki.fi>
13  */
14 public class BufferLogger extends LogHelper {
15
16         private final CyclicBuffer<LogLine> buffer;
17         private final EnumMap<LogLevel, Boolean> storeLevels = 
18                 new EnumMap<LogLevel, Boolean>(LogLevel.class);
19         
20         
21         /**
22          * Create a buffered logger with that logs the specified number of log 
23          * lines.  By default all log levels are buffered.
24          * 
25          * @param length        the length of the buffer.
26          */
27         public BufferLogger(int length) {
28                 for (LogLevel l: LogLevel.values()) {
29                         storeLevels.put(l, true);
30                 }
31                 buffer = new CyclicBuffer<LogLine>(length);
32         }
33         
34         
35         @Override
36         public void log(LogLine line) {
37                 if (storeLevels.get(line.getLevel())) {
38                         buffer.add(line);
39                 }
40         }
41
42         /**
43          * Set whether the specified log level is buffered.
44          * 
45          * @param level         the log level.
46          * @param store         whether to store the level.
47          */
48         public void setStoreLevel(LogLevel level, boolean store) {
49                 storeLevels.put(level, store);
50         }
51         
52         /**
53          * Get whether the specified log level is buffered.
54          * 
55          * @param level         the log level.
56          * @return                      whether the log level is stored.
57          */
58         public boolean getStoreLevel(LogLevel level) {
59                 return storeLevels.get(level);
60         }
61
62         
63         /**
64          * Return all the buffered log lines.
65          * 
66          * @return      a list of all buffered log lines.
67          */
68         public List<LogLine> getLogs() {
69                 return buffer.asList();
70         }
71         
72         /**
73          * Return the number of log lines that has been overwritten.
74          * 
75          * @return      the number of log lines missed.
76          */
77         public int getOverwriteCount() {
78                 return buffer.getOverwriteCount();
79         }
80 }