001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm;
003
004import java.util.Collection;
005import java.util.Map;
006/**
007 * Objects implement Tagged if they provide a map of key/value pairs.
008 *
009 *
010 */
011// FIXME: better naming? setTags(), getTags(), getKeys() instead of keySet() ?
012//
013public interface Tagged {
014    /**
015     * Sets the map of key/value pairs
016     *
017     * @param keys the map of key value pairs. If null, reset to the empty map.
018     */
019    void setKeys(Map<String, String> keys);
020
021    /**
022     * Replies the map of key/value pairs. Never null, but may be the empty map.
023     *
024     * @return the map of key/value pairs
025     */
026    Map<String, String> getKeys();
027
028    /**
029     * Sets a key/value pairs
030     *
031     * @param key the key
032     * @param value the value. If null, removes the key/value pair.
033     */
034    void put(String key, String value);
035
036    /**
037     * Replies the value of the given key; null, if there is no value for this key
038     *
039     * @param key the key
040     * @return the value
041     */
042    String get(String key);
043
044    /**
045     * Removes a given key/value pair
046     *
047     * @param key the key
048     */
049    void remove(String key);
050
051    /**
052     * Replies true, if there is at least one key/value pair; false, otherwise
053     *
054     * @return true, if there is at least one key/value pair; false, otherwise
055     */
056    boolean hasKeys();
057
058    /**
059     * Replies the set of keys
060     *
061     * @return the set of keys
062     */
063    Collection<String> keySet();
064
065    /**
066     * Removes all tags
067     */
068    void removeAll();
069}