/**
 * Copyright (c) 2013, Redsolution LTD. All rights reserved.
 *
 * This file is part of Xabber project; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License, Version 3.
 *
 * Xabber is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License,
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
package com.xabber.android.data.entity;

import java.util.HashMap;
import java.util.Map;

/**
 * Three level nested map.
 * <p/>
 * Required inner maps will be created if necessary.
 *
 * @param <Key>
 * @param <Value>
 * @author alexander.ivanov
 */
public class NestedNestedMaps<Key, Value> extends NestedMap<Map<Key, Value>> {

    public Value get(String first, String second, Key third) {
        Map<Key, Value> map = get(first, second);
        if (map == null)
            return null;
        return map.get(third);
    }

    synchronized public void put(String first, String second, Key third,
                                 Value value) {
        Map<Key, Value> map = get(first, second);
        if (map == null) {
            map = new HashMap<Key, Value>();
            put(first, second, map);
        }
        map.put(third, value);
    }

    synchronized public Value remove(String first, String second, Key third) {
        Map<Key, Value> map = get(first, second);
        if (map == null)
            return null;
        Value value = map.remove(third);
        if (map.isEmpty())
            remove(first, second);
        return value;
    }

}
