001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.preferences.server;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.util.HashSet;
007import java.util.Set;
008
009import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
010import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
011import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
012import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
013import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
014
015/**
016 * Proxy sub-preferences in server preferences.
017 * @since 6523
018 */
019public final class ProxyPreference implements SubPreferenceSetting {
020
021    /**
022     * Factory used to create a new {@code ProxyPreference}.
023     */
024    public static class Factory implements PreferenceSettingFactory {
025        @Override
026        public PreferenceSetting createPreferenceSetting() {
027            return new ProxyPreference();
028        }
029    }
030
031    private static Set<ProxyPreferenceListener> listeners = new HashSet<>();
032    
033    private ProxyPreferencesPanel pnlProxyPreferences;
034
035    private ProxyPreference() {
036        super();
037    }
038
039    @Override
040    public void addGui(PreferenceTabbedPane gui) {
041        pnlProxyPreferences = new ProxyPreferencesPanel();
042        gui.getServerPreference().addSubTab(this, tr("Proxy settings"),
043                pnlProxyPreferences.getVerticalScrollPane(),
044                tr("Configure whether to use a proxy server"));
045    }
046
047    @Override
048    public boolean ok() {
049        pnlProxyPreferences.saveToPreferences();
050        for (ProxyPreferenceListener listener : listeners) {
051            listener.proxyPreferenceChanged();
052        }
053        return false;
054    }
055
056    @Override
057    public boolean isExpert() {
058        return false;
059    }
060
061    @Override
062    public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
063        return gui.getServerPreference();
064    }
065    
066    /**
067     * Adds a new ProxyPreferenceListener.
068     * @param listener the listener to add
069     * @return {@code true} if the listener has been added, {@code false} otherwise
070     * @since 6525
071     */
072    public static boolean addProxyPreferenceListener(ProxyPreferenceListener listener) {
073        if (listener != null) {
074            return listeners.add(listener);
075        }
076        return false;
077    }
078
079    /**
080     * Removes a ProxyPreferenceListener.
081     * @param listener the listener to remove
082     * @return {@code true} if the listener has been removed, {@code false} otherwise
083     * @since 6525
084     */
085    public static boolean removeProxyPreferenceListener(ProxyPreferenceListener listener) {
086        if (listener != null) {
087            return listeners.remove(listener);
088        }
089        return false;
090    }
091}