17ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu/**
27ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * Copyright (c) 2004-2011 QOS.ch
37ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * All rights reserved.
47ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
57ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * Permission is hereby granted, free  of charge, to any person obtaining
67ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * a  copy  of this  software  and  associated  documentation files  (the
77ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * "Software"), to  deal in  the Software without  restriction, including
87ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * without limitation  the rights to  use, copy, modify,  merge, publish,
97ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * distribute,  sublicense, and/or sell  copies of  the Software,  and to
107ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * permit persons to whom the Software  is furnished to do so, subject to
117ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * the following conditions:
127ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
137ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * The  above  copyright  notice  and  this permission  notice  shall  be
147ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * included in all copies or substantial portions of the Software.
157ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
167ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
177ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
187ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
197ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
207ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
217ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
227ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
237ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
247ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu */
2588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupackage org.slf4j.impl;
2688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
2788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport java.util.HashMap;
2888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport java.util.Iterator;
2988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport java.util.Map;
3088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
3188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.spi.MDCAdapter;
3288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
3388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupublic class Log4jMDCAdapter implements MDCAdapter {
3488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
3531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void clear() {
3631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        @SuppressWarnings("rawtypes")
3731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        Map map = org.apache.log4j.MDC.getContext();
3831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (map != null) {
3931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            map.clear();
4031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
4188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
4288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
4331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public String get(String key) {
4431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return (String) org.apache.log4j.MDC.get(key);
4531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
4688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
4731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
4831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Put a context value (the <code>val</code> parameter) as identified with
4931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * the <code>key</code> parameter into the current thread's context map. The
5031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <code>key</code> parameter cannot be null. Log4j does <em>not</em>
5131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * support null for the <code>val</code> parameter.
5231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
5331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
5431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This method delegates all work to log4j's MDC.
5531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
5631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @throws IllegalArgumentException
5731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *           in case the "key" or <b>"val"</b> parameter is null
5831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
5931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void put(String key, String val) {
6031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        org.apache.log4j.MDC.put(key, val);
6131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
6288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
6331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void remove(String key) {
6431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        org.apache.log4j.MDC.remove(key);
6531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
6688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
6731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    @SuppressWarnings({ "rawtypes", "unchecked" })
6831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public Map getCopyOfContextMap() {
6931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        Map old = org.apache.log4j.MDC.getContext();
7031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (old != null) {
7131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return new HashMap(old);
7231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
7331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return null;
7431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
7588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
7688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
7731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    @SuppressWarnings({ "rawtypes", "unchecked" })
7831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void setContextMap(Map contextMap) {
7931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        Map old = org.apache.log4j.MDC.getContext();
8031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (old == null) {
8131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            Iterator entrySetIterator = contextMap.entrySet().iterator();
8231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            while (entrySetIterator.hasNext()) {
8331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                Map.Entry mapEntry = (Map.Entry) entrySetIterator.next();
8431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                org.apache.log4j.MDC.put((String) mapEntry.getKey(), mapEntry.getValue());
8531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            }
8631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
8731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            old.clear();
8831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            old.putAll(contextMap);
8931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
9088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
9188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu}
92