com.pactera.edg.am.metamanager.extractor.util.TwoWayMultiMap.java Source code

Java tutorial

Introduction

Here is the source code for com.pactera.edg.am.metamanager.extractor.util.TwoWayMultiMap.java

Source

/*
 * Copyright 2009 by pactera.edg.am Corporation.
 * Address:HePingLi East Street No.11 5-5, BeiJing, 
 * 
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * pactera.edg.am Corporation ("Confidential Information").  You
 * shall not disclose such Confidential Information and shall use
 * it only in accordance with the terms of the license agreement
 * you entered into with pactera.edg.am.
 */

/**
 * 
 */
package com.pactera.edg.am.metamanager.extractor.util;

import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.map.MultiValueMap;

/**
 * ??MultiMap?MultiMap<br>
 * ??KeyValue??ValueKey
 *
 * @author fbchen
 * @version 1.0  Date: 2010-1-19 ?10:33:46
 */
public class TwoWayMultiMap implements MultiMap, Serializable {
    private static final long serialVersionUID = 1L;

    MultiMap keyMultiMap = new MultiValueMap();
    MultiMap valMultiMap = new MultiValueMap();

    /**
     * ??MultiMap
     */
    public TwoWayMultiMap() {
        super();
    }

    /**
     * key-&lt;valuekeyMultiMapvalue-&lt;keyvalMultiMap
     * @param key keyMultiMapKeyvalMultiMapValue
     * @param value keyMultiMapValuevalMultiMapKey
     * @return value
     */
    public Object put(Object key, Object value) {
        keyMultiMap.put(key, value);
        valMultiMap.put(value, key);
        return value;
    }

    /**
     * ??Value
     */
    public boolean containsValue(Object value) {
        return valMultiMap.containsKey(value);
    }

    /**
     * ??Key
     */
    public boolean containsKey(Object key) {
        return keyMultiMap.containsKey(key);
    }

    /**
     * ?Value?Key
     * @param value 
     * @return ?
     */
    public Collection<?> getByValue(Object value) {
        return (Collection<?>) valMultiMap.get(value);
    }

    /**
     * ?Key?Value
     * @param key 
     * @return ?
     */
    public Collection<?> getByKey(Object key) {
        return (Collection<?>) keyMultiMap.get(key);
    }

    /**
     * ?Value?Key
     * @param value 
     * @return 
     */
    public Object getOneByValue(Object value) {
        Collection<?> c = (Collection<?>) valMultiMap.get(value);
        return c.isEmpty() ? null : c.iterator().next();
    }

    /**
     * ?Key?Value
     * @param key 
     * @return 
     */
    public Object getOneByKey(Object key) {
        Collection<?> c = (Collection<?>) keyMultiMap.get(key);
        return c.isEmpty() ? null : c.iterator().next();
    }

    public Object removeByKey(Object key) {
        return keyMultiMap.remove(key);
    }

    public Object removeByKey(Object key, Object value) {
        return keyMultiMap.remove(key, value);
    }

    public Object removeByValue(Object value) {
        return valMultiMap.remove(value);
    }

    public Object removeByValue(Object value, Object key) {
        return valMultiMap.remove(value, key);
    }

    /**
     * ?keyMultiMapvalMultiMap
     */
    public void clear() {
        keyMultiMap.clear();
        valMultiMap.clear();
    }

    public boolean isEmpty() {
        return keyMultiMap.isEmpty() && valMultiMap.isEmpty();
    }

    /**
     * @return the keyMultiMap
     */
    public MultiMap getKeyMultiMap() {
        return keyMultiMap;
    }

    /**
     * @return the valMultiMap
     */
    public MultiMap getValMultiMap() {
        return valMultiMap;
    }

    @SuppressWarnings("unchecked")
    public Set entrySet() {
        return keyMultiMap.entrySet();
    }

    @SuppressWarnings("unchecked")
    public Set keySet() {
        return keyMultiMap.keySet();
    }

    @SuppressWarnings("unchecked")
    public Collection values() {
        return keyMultiMap.values();
    }

    @SuppressWarnings("unchecked")
    public void putAll(Map map) {
        keyMultiMap.putAll(map);
    }

    /**
     * @see #getByKey(Object)
     */
    public Object get(Object key) {
        return this.getByKey(key);
    }

    /**
     * @see #removeByKey(Object,Object)
     */
    public Object remove(Object key, Object value) {
        return this.removeByKey(key, value);
    }

    /**
     * @see #removeByKey(Object)
     */
    public Object remove(Object key) {
        return this.removeByKey(key);
    }

    /**
     * keyMultiMapsize
     */
    public int size() {
        return keyMultiMap.size();
    }

}