001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.tools;
003
004import java.util.Objects;
005import java.util.Set;
006
007/**
008 * Describes a regional Taginfo instance.
009 * @since 15876
010 */
011public class TaginfoRegionalInstance {
012
013    /** Instance URL */
014    private final String url;
015    /** Set of ISO3166 codes for the covered areas */
016    private final Set<String> isoCodes;
017    /** Optional suffix to distinguish them in UI */
018    private final String suffix;
019
020    /**
021     * Constructs a new {@code TaginfoRegionalInstance}.
022     * @param url Instance URL. Must not be null
023     * @param isoCodes Set of ISO3166 codes for the covered areas. Must not be null
024     */
025    public TaginfoRegionalInstance(String url, Set<String> isoCodes) {
026        this(url, isoCodes, null);
027    }
028
029    /**
030     * Constructs a new {@code TaginfoRegionalInstance}.
031     * @param url Instance URL. Must not be null
032     * @param isoCodes Set of ISO3166 codes for the covered areas. Must not be null
033     * @param suffix Optional suffix to distinguish them in UI. Can be null
034     */
035    public TaginfoRegionalInstance(String url, Set<String> isoCodes, String suffix) {
036        this.url = Objects.requireNonNull(url);
037        this.isoCodes = Objects.requireNonNull(isoCodes);
038        this.suffix = suffix;
039    }
040
041    /**
042     * Returns the instance URL.
043     * @return instance URL
044     */
045    public String getUrl() {
046        return url;
047    }
048
049    /**
050     * Returns the set of ISO3166 codes for the covered areas.
051     * @return set of ISO3166 codes for the covered areas
052     */
053    public Set<String> getIsoCodes() {
054        return isoCodes;
055    }
056
057    /**
058     * Returns the optional suffix to distinguish them in UI.
059     * @return optional suffix to distinguish them in UI. Can be null
060     */
061    public String getSuffix() {
062        return suffix;
063    }
064
065    @Override
066    public String toString() {
067        return (suffix == null ? "" : suffix + " ") + String.join("/", isoCodes);
068    }
069}