eu.esdihumboldt.hale.common.lookup.impl.LookupTableImpl.java Source code

Java tutorial

Introduction

Here is the source code for eu.esdihumboldt.hale.common.lookup.impl.LookupTableImpl.java

Source

/*
 * Copyright (c) 2013 Data Harmonisation Panel
 * 
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution. If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contributors:
 *     Data Harmonisation Panel <http://www.dhpanel.eu>
 */

package eu.esdihumboldt.hale.common.lookup.impl;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import net.jcip.annotations.Immutable;

import com.google.common.base.Predicates;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Maps;

import eu.esdihumboldt.hale.common.core.io.Value;
import eu.esdihumboldt.hale.common.lookup.LookupTable;

/**
 * Simple lookup table implementation based on a {@link Map}.
 * 
 * @author Simon Templer
 */
@Immutable
public class LookupTableImpl implements LookupTable {

    private final Map<Value, Value> table;

    /**
     * Create a new lookup table based on the given map.
     * 
     * @param table the lookup table map
     */
    public LookupTableImpl(Map<Value, Value> table) {
        super();
        // ignore null values, so their entries don't show up in any methods
        this.table = new LinkedHashMap<Value, Value>(Maps.filterValues(table, Predicates.notNull()));
    }

    @Override
    public Value lookup(Value key) {
        return table.get(key);
    }

    @Override
    public Set<Value> getKeys() {
        return Collections.unmodifiableSet(table.keySet());
    }

    @Override
    public ListMultimap<Value, Value> reverse() {
        ListMultimap<Value, Value> result = ArrayListMultimap.create();

        for (Entry<Value, Value> entry : table.entrySet()) {
            result.put(entry.getValue(), entry.getKey());
        }

        return result;
    }

    @Override
    public Map<Value, Value> asMap() {
        return Collections.unmodifiableMap(table);
    }

}