001/*
002 * #%L
003 * Netarchivesuite - common
004 * %%
005 * Copyright (C) 2005 - 2014 The Royal Danish Library, the Danish State and University Library,
006 *             the National Library of France and the Austrian National Library.
007 * %%
008 * This program is free software: you can redistribute it and/or modify
009 * it under the terms of the GNU Lesser General Public License as
010 * published by the Free Software Foundation, either version 2.1 of the
011 * License, or (at your option) any later version.
012 * 
013 * This program is distributed in the hope that it will be useful,
014 * but WITHOUT ANY WARRANTY; without even the implied warranty of
015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
016 * GNU General Lesser Public License for more details.
017 * 
018 * You should have received a copy of the GNU General Lesser Public
019 * License along with this program.  If not, see
020 * <http://www.gnu.org/licenses/lgpl-2.1.html>.
021 * #L%
022 */
023
024package dk.netarkivet.common.utils;
025
026import java.util.Map;
027
028/**
029 * A generic Map.Entry class, useful for returning key-value-like results.
030 *
031 * @param <K> the Object type used as key
032 * @param <V> the Object type used as value
033 */
034public class KeyValuePair<K, V> implements Map.Entry<K, V> {
035
036    /** The key in this key-value pair. */
037    private final K key;
038    /** The value in this key-value pair. */
039    private final V value;
040
041    /**
042     * Constructs a Key-Value pair using the given key and value.
043     *
044     * @param k The key object
045     * @param v The value object
046     */
047    public KeyValuePair(K k, V v) {
048        this.key = k;
049        this.value = v;
050    }
051
052    /**
053     * Returns the key corresponding to this entry.
054     *
055     * @return the key corresponding to this entry.
056     */
057    public K getKey() {
058        return key;
059    }
060
061    /**
062     * Returns the value corresponding to this entry.
063     *
064     * @return the value corresponding to this entry.
065     */
066    public V getValue() {
067        return value;
068    }
069
070    /**
071     * Replaces the value corresponding to this entry with the specified value (optional operation).
072     *
073     * @param newValue new value to be stored in this entry.
074     * @return old value corresponding to the entry.
075     * @throws UnsupportedOperationException if the <tt>put</tt> operation is not supported by the backing map.
076     */
077    public V setValue(V newValue) throws UnsupportedOperationException {
078        throw new UnsupportedOperationException("Stand-alone entries cannot be changed");
079    }
080
081}