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 [AppenderAttachments.java]

nameclass, %method, %block, %line, %
AppenderAttachments.java100% (2/2)92%  (11/12)97%  (147/151)98%  (41/42)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AppenderAttachments$1100% (1/1)67%  (2/3)67%  (8/12)67%  (2/3)
nextElement (): Object 0%   (0/1)0%   (0/4)0%   (0/1)
AppenderAttachments$1 (AppenderAttachments): void 100% (1/1)100% (6/6)100% (1/1)
hasMoreElements (): boolean 100% (1/1)100% (2/2)100% (1/1)
     
class AppenderAttachments100% (1/1)100% (9/9)100% (139/139)100% (40/40)
AppenderAttachments (): void 100% (1/1)100% (8/8)100% (3/3)
addAppender (Appender): void 100% (1/1)100% (45/45)100% (10/10)
execute (AppenderCommand, LoggingEvent): void 100% (1/1)100% (36/36)100% (10/10)
getAllAppenders (): Enumeration 100% (1/1)100% (13/13)100% (4/4)
getAppender (String): Appender 100% (1/1)100% (5/5)100% (1/1)
isAttached (Appender): boolean 100% (1/1)100% (18/18)100% (6/6)
removeAllAppenders (): void 100% (1/1)100% (4/4)100% (2/2)
removeAppender (Appender): void 100% (1/1)100% (5/5)100% (2/2)
removeAppender (String): void 100% (1/1)100% (5/5)100% (2/2)

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.Enumeration;
17import java.util.NoSuchElementException;
18 
19import org.apache.log4j.Appender;
20import org.apache.log4j.helpers.AppenderAttachableImpl;
21import org.apache.log4j.helpers.LogLog;
22import org.apache.log4j.spi.AppenderAttachable;
23import org.apache.log4j.spi.LoggingEvent;
24 
25import uk.org.simonsite.log4j.appender.AppenderCommand;
26import uk.org.simonsite.log4j.appender.ExecutingAppenderAttachable;
27 
28/**
29 * @author <a href="mailto:simon_park_mail AT yahoo DOT co DOT uk">Simon
30 *         Park</a>
31 * @version 1.4
32 */
33public final class AppenderAttachments implements ExecutingAppenderAttachable {
34 
35  private final AppenderAttachable appenderAttachable;
36 
37  public AppenderAttachments() {
38    super();
39    this.appenderAttachable = new AppenderAttachableImpl();
40  }
41 
42  public synchronized final void addAppender(final Appender newAppender) {
43    if (newAppender == null) {
44      return;
45    }
46    if ((newAppender.getName() == null) || "".equals(newAppender.getName())) {
47      LogLog.warn("Unnamed Appender cannot be attached: "
48          + newAppender.getClass());
49      return;
50    }
51    if (this.getAppender(newAppender.getName()) != null) {
52      LogLog.warn("Appender named '" + newAppender.getName()
53          + "' already attached");
54      return;
55    }
56    this.appenderAttachable.addAppender(newAppender);
57 
58  }
59 
60  public synchronized final Enumeration getAllAppenders() {
61    Enumeration appenderEnum = this.appenderAttachable.getAllAppenders();
62    if (appenderEnum != null) {
63      return appenderEnum;
64    }
65    // return a Null Object rather than null
66    return new Enumeration() {
67 
68      public final boolean hasMoreElements() {
69        return false;
70      }
71 
72      public final Object nextElement() {
73        throw new NoSuchElementException();
74      }
75    };
76  }
77 
78  public synchronized final Appender getAppender(final String name) {
79    return this.appenderAttachable.getAppender(name);
80  }
81 
82  public synchronized final boolean isAttached(final Appender appender) {
83    if (appender == null) {
84      return false;
85    }
86    final Appender attachedAppender = this.appenderAttachable
87        .getAppender(appender.getName());
88    if (attachedAppender != null) {
89      return (appender.equals(attachedAppender));
90    }
91    return false;
92  }
93 
94  public synchronized final void removeAllAppenders() {
95    this.appenderAttachable.removeAllAppenders();
96  }
97 
98  public synchronized final void removeAppender(final Appender appender) {
99    this.appenderAttachable.removeAppender(appender);
100  }
101 
102  public synchronized final void removeAppender(final String name) {
103    this.appenderAttachable.removeAppender(name);
104  }
105 
106  public synchronized final void execute(final AppenderCommand appenderCommand,
107      final LoggingEvent event) {
108    final Enumeration enumeration = appenderAttachable.getAllAppenders();
109    if (enumeration != null) {
110      while (enumeration.hasMoreElements()) {
111        final Appender appender = (Appender) enumeration.nextElement();
112        appenderCommand.execute(appender, event);
113        if (appenderCommand.hasErrors()) {
114          LogLog.warn(appenderCommand + " errored for appender "
115              + appender.getName());
116          appenderCommand.resetErrors();
117        }
118      }
119    }
120  }
121 
122}

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