EMMA Coverage Report (generated Wed Feb 26 21:48:09 GMT 2014)
[all classes][uk.org.simonsite.log4j.appender.sync]

COVERAGE SUMMARY FOR SOURCE FILE [LoggingEventLinkedList.java]

nameclass, %method, %block, %line, %
LoggingEventLinkedList.java100% (1/1)100% (5/5)86%  (97/113)93%  (27.1/29)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class LoggingEventLinkedList100% (1/1)100% (5/5)86%  (97/113)93%  (27.1/29)
poll (): LoggingEvent 100% (1/1)78%  (18/23)96%  (5.8/6)
put (LoggingEvent): void 100% (1/1)84%  (31/37)87%  (8.7/10)
take (): LoggingEvent 100% (1/1)84%  (26/31)96%  (7.6/8)
LoggingEventLinkedList (ActiveAsynchronousAppenderProperties): void 100% (1/1)100% (11/11)100% (4/4)
removeFirst (): LoggingEvent 100% (1/1)100% (11/11)100% (1/1)

1/*
2 * Licensed under the Apache License, Version 2.0 (the "License");
3 * you may not use this file except in compliance with the License.
4 * You may obtain a copy of the License at
5 * 
6 *      http://www.apache.org/licenses/LICENSE-2.0
7 * 
8 * Unless required by applicable law or agreed to in writing, software
9 * distributed under the License is distributed on an "AS IS" BASIS,
10 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 * See the License for the specific language governing permissions and
12 * limitations under the License.
13 */
14package uk.org.simonsite.log4j.appender.sync;
15 
16import java.util.LinkedList;
17 
18import org.apache.log4j.spi.LoggingEvent;
19 
20import uk.org.simonsite.log4j.appender.ActiveAsynchronousAppenderProperties;
21import uk.org.simonsite.log4j.appender.LoggingEventQueue;
22 
23/**
24 * Double-ended queue used to buffer {@link LoggingEvent}s for asynchronous
25 * dispatch. This is backed by a {@link LinkedList} and is thread-safe.
26 * 
27 * @author <a href="mailto:simon_park_mail AT yahoo DOT co DOT uk">Simon
28 *         Park</a>
29 * @version 3.0
30 */
31public final class LoggingEventLinkedList implements LoggingEventQueue {
32 
33  private final LinkedList linkedList;
34 
35  private final ActiveAsynchronousAppenderProperties properties;
36 
37  public LoggingEventLinkedList(
38      final ActiveAsynchronousAppenderProperties properties) {
39    super();
40    this.linkedList = new LinkedList();
41    this.properties = properties;
42  }
43 
44  /**
45   * @see uk.org.simonsite.log4j.appender.LoggingEventQueue#poll()
46   */
47  public final LoggingEvent poll() {
48    LoggingEvent loggingEvent = null;
49    synchronized (this.linkedList) {
50      loggingEvent = this.removeFirst();
51      this.linkedList.notifyAll();
52    }
53    return loggingEvent;
54  }
55 
56  /**
57   * @see uk.org.simonsite.log4j.appender.LoggingEventQueue#put(org.apache.log4j.spi.LoggingEvent)
58   */
59  public final void put(final LoggingEvent loggingEvent)
60      throws InterruptedException {
61    if (loggingEvent == null) {
62      return;
63    }
64    final int maxSize = this.properties.getMaxSize();
65    synchronized (this.linkedList) {
66      while (this.linkedList.size() >= maxSize) {
67        this.linkedList.wait();
68      }
69      this.linkedList.addLast(loggingEvent);
70      this.linkedList.notifyAll();
71    }
72  }
73 
74  /**
75   * @see uk.org.simonsite.log4j.appender.LoggingEventQueue#take()
76   */
77  public final LoggingEvent take() throws InterruptedException {
78    LoggingEvent loggingEvent = null;
79    synchronized (this.linkedList) {
80      while (this.linkedList.isEmpty()) {
81        this.linkedList.wait();
82      }
83      loggingEvent = this.removeFirst();
84      this.linkedList.notifyAll();
85    }
86    return loggingEvent;
87  }
88 
89  private LoggingEvent removeFirst() {
90    return (!this.linkedList.isEmpty()) ? (LoggingEvent) this.linkedList
91        .removeFirst() : null;
92  }
93}

[all classes][uk.org.simonsite.log4j.appender.sync]
EMMA 2.0.5312 (C) Vladimir Roubtsov