001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm;
003
004import java.io.Serializable;
005import java.util.Objects;
006import java.util.Set;
007
008/**
009 * Class representing multiple values of a given key.
010 * @since 15376
011 */
012public class Tags implements Serializable {
013
014    private static final long serialVersionUID = 1;
015
016    private final String key;
017    private final Set<String> values;
018
019    /**
020     * Constructs a new {@code Tags}.
021     * @param key the key. Must not be null
022     * @param values the values. Must not be null
023     */
024    public Tags(String key, Set<String> values) {
025        this.key = Objects.requireNonNull(key);
026        this.values = Objects.requireNonNull(values);
027    }
028
029    /**
030     * Returns the key.
031     * @return the key
032     */
033    public String getKey() {
034        return key;
035    }
036
037    /**
038     * Returns the values.
039     * @return the values
040     */
041    public Set<String> getValues() {
042        return values;
043    }
044
045    @Override
046    public int hashCode() {
047        return Objects.hash(key, values);
048    }
049
050    @Override
051    public boolean equals(Object obj) {
052        if (this == obj)
053            return true;
054        if (obj == null || getClass() != obj.getClass())
055            return false;
056        Tags other = (Tags) obj;
057        return Objects.equals(key, other.key) && Objects.equals(values, other.values);
058    }
059
060    @Override
061    public String toString() {
062        return "Tags [key=" + key + ", values=" + values + ']';
063    }
064}