1   package org.slf4j.impl;
2   
3   import java.util.HashMap;
4   import java.util.Iterator;
5   import java.util.Map;
6   
7   import org.slf4j.spi.MDCAdapter;
8   
9   public class Log4jMDCAdapter implements MDCAdapter {
10  
11    public void clear() {
12      Map map = org.apache.log4j.MDC.getContext();
13      if (map != null) {
14        map.clear();
15      }
16    }
17  
18    public String get(String key) {
19      return (String) org.apache.log4j.MDC.get(key);
20    }
21  
22    /**
23     * Put a context value (the <code>val</code> parameter) as identified with
24     * the <code>key</code> parameter into the current thread's context map. The
25     * <code>key</code> parameter cannot be null. Log4j does <em>not</em> 
26     * support null for the <code>val</code> parameter.
27     * 
28     * <p>
29     * This method delegates all work to log4j's MDC.
30     * 
31     * @throws IllegalArgumentException
32     *           in case the "key" or <b>"val"</b> parameter is null
33     */
34    public void put(String key, String val) {
35      org.apache.log4j.MDC.put(key, val);
36    }
37  
38    public void remove(String key) {
39      org.apache.log4j.MDC.remove(key);
40    }
41  
42    public Map getCopyOfContextMap() {
43      Map old = org.apache.log4j.MDC.getContext();
44      if(old != null) {
45        return new HashMap(old);
46      } else {
47        return null;
48      }
49    }
50  
51    public void setContextMap(Map contextMap) {
52      Map old = org.apache.log4j.MDC.getContext();
53      if(old == null) {
54        Iterator entrySetIterator = contextMap.entrySet().iterator();
55        while(entrySetIterator.hasNext()) {
56          Map.Entry mapEntry = (Map.Entry) entrySetIterator.next();
57          org.apache.log4j.MDC.put((String) mapEntry.getKey(), mapEntry.getValue());
58        }
59      } else {
60        old.clear();
61        old.putAll(contextMap);
62      }
63    }
64  }