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

COVERAGE SUMMARY FOR SOURCE FILE [AppenderAttachments.java]

nameclass, %method, %block, %line, %
AppenderAttachments.java100% (2/2)100% (12/12)100% (240/241)98%  (65/66)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AppenderAttachments100% (1/1)100% (9/9)100% (223/224)98%  (63/64)
removeAppender (String): void 100% (1/1)96%  (26/27)89%  (8/9)
AppenderAttachments (): void 100% (1/1)100% (8/8)100% (3/3)
addAppender (Appender): void 100% (1/1)100% (59/59)100% (13/13)
execute (AppenderCommand, LoggingEvent): void 100% (1/1)100% (34/34)100% (8/8)
getAllAppenders (): Enumeration 100% (1/1)100% (10/10)100% (2/2)
getAppender (String): Appender 100% (1/1)100% (25/25)100% (8/8)
isAttached (Appender): boolean 100% (1/1)100% (35/35)100% (11/11)
removeAllAppenders (): void 100% (1/1)100% (18/18)100% (6/6)
removeAppender (Appender): void 100% (1/1)100% (8/8)100% (4/4)
     
class AppenderAttachments$1100% (1/1)100% (3/3)100% (17/17)100% (3/3)
AppenderAttachments$1 (AppenderAttachments, Iterator): void 100% (1/1)100% (9/9)100% (1/1)
hasMoreElements (): boolean 100% (1/1)100% (4/4)100% (1/1)
nextElement (): Object 100% (1/1)100% (4/4)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.backport;
15 
16import java.util.Enumeration;
17import java.util.Iterator;
18 
19import org.apache.log4j.Appender;
20import org.apache.log4j.helpers.LogLog;
21import org.apache.log4j.spi.LoggingEvent;
22 
23import uk.org.simonsite.log4j.appender.AppenderCommand;
24import uk.org.simonsite.log4j.appender.ExecutingAppenderAttachable;
25import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
26 
27/**
28 * @author <a href="mailto:simon_park_mail AT yahoo DOT co DOT uk">Simon
29 *         Park</a>
30 * @version 1.7
31 */
32public final class AppenderAttachments implements ExecutingAppenderAttachable {
33 
34  private final CopyOnWriteArrayList attachments;
35 
36  public AppenderAttachments() {
37    super();
38    this.attachments = new CopyOnWriteArrayList();
39  }
40 
41  public final void addAppender(final Appender newAppender) {
42    if (newAppender == null) {
43      return;
44    }
45    if ((newAppender.getName() == null) || "".equals(newAppender.getName())) {
46      LogLog.warn("Unnamed Appender cannot be attached: "
47          + newAppender.getClass());
48      return;
49    }
50    for (Iterator iter = this.attachments.iterator(); iter.hasNext();) {
51      Appender appender = (Appender) iter.next();
52      if (appender.getName().equals(newAppender.getName())) {
53        LogLog.warn("Appender named '" + newAppender.getName()
54            + "' already attached");
55        return;
56      }
57    }
58    this.attachments.add(newAppender);
59  }
60 
61  public final Enumeration getAllAppenders() {
62    final Iterator iter = this.attachments.iterator();
63    return new Enumeration() {
64 
65      public final boolean hasMoreElements() {
66        return iter.hasNext();
67      }
68 
69      public final Object nextElement() {
70        return iter.next();
71      }
72    };
73  }
74 
75  public final Appender getAppender(final String name) {
76    if (name == null) {
77      return null;
78    }
79    for (Iterator iter = this.attachments.iterator(); iter.hasNext();) {
80      final Appender appender = (Appender) iter.next();
81      if (appender.getName().equals(name)) {
82        return appender;
83      }
84    }
85    return null;
86  }
87 
88  public final boolean isAttached(final Appender appender) {
89    if (appender == null) {
90      return false;
91    }
92    if (appender.getName() == null) {
93      return false;
94    }
95    for (Iterator iter = this.attachments.iterator(); iter.hasNext();) {
96      final Appender attachedAppender = (Appender) iter.next();
97      if (attachedAppender.getName().equals(appender.getName())) {
98        if (attachedAppender.equals(appender)) {
99          return true;
100        }
101      }
102    }
103    return false;
104  }
105 
106  public final void removeAllAppenders() {
107    for (Iterator iter = this.attachments.iterator(); iter.hasNext();) {
108      final Appender appender = (Appender) iter.next();
109      appender.close();
110    }
111    this.attachments.clear();
112  }
113 
114  public final void removeAppender(final Appender appender) {
115    if (appender == null) {
116      return;
117    }
118    this.removeAppender(appender.getName());
119  }
120 
121  public final void removeAppender(final String name) {
122    if (name == null) {
123      return;
124    }
125    for (Iterator iter = this.attachments.iterator(); iter.hasNext();) {
126      final Appender appender = (Appender) iter.next();
127      if (appender.getName().equals(name)) {
128        this.attachments.remove(appender);
129        break;
130      }
131    }
132    // don't close removed appender in this case
133  }
134 
135  public final void execute(final AppenderCommand appenderCommand,
136      final LoggingEvent event) {
137    for (Iterator iter = this.attachments.iterator(); iter.hasNext();) {
138      final Appender appender = (Appender) iter.next();
139      appenderCommand.execute(appender, event);
140      if (appenderCommand.hasErrors()) {
141        LogLog.warn(appenderCommand + " errored for appender "
142            + appender.getName());
143        appenderCommand.resetErrors();
144      }
145    }
146  }
147 
148}

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