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.awt.GridBagLayout;
007
008import javax.swing.BorderFactory;
009import javax.swing.Box;
010import javax.swing.JCheckBox;
011import javax.swing.JLabel;
012import javax.swing.JPanel;
013
014import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
015import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
016import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
017import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
018import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
019import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
020import org.openstreetmap.josm.io.OverpassDownloadReader;
021import org.openstreetmap.josm.tools.GBC;
022
023/**
024 * Preferences related to Overpass API servers.
025 *
026 * @since 9142
027 */
028public class OverpassServerPreference implements SubPreferenceSetting {
029
030    private final HistoryComboBox overpassServer = new HistoryComboBox();
031    private final JCheckBox forMultiFetch = new JCheckBox(tr("Use Overpass server for object downloads"));
032
033    /**
034     * Factory used to create a new {@link OverpassServerPreference}.
035     */
036    public static class Factory implements PreferenceSettingFactory {
037        @Override
038        public PreferenceSetting createPreferenceSetting() {
039            return new OverpassServerPreference();
040        }
041    }
042
043    @Override
044    public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
045        return gui.getServerPreference();
046    }
047
048    @Override
049    public void addGui(PreferenceTabbedPane gui) {
050        final JPanel panel = new JPanel(new GridBagLayout());
051
052        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
053        panel.add(new JLabel(tr("Overpass server: ")), GBC.std().insets(5, 5, 5, 5));
054        panel.add(overpassServer, GBC.eop().fill(GBC.HORIZONTAL));
055        overpassServer.setPossibleItems(OverpassDownloadReader.OVERPASS_SERVER_HISTORY.get());
056        overpassServer.setText(OverpassDownloadReader.OVERPASS_SERVER.get());
057
058        panel.add(forMultiFetch, GBC.eop());
059        forMultiFetch.setSelected(OverpassDownloadReader.FOR_MULTI_FETCH.get());
060
061        panel.add(Box.createVerticalGlue(), GBC.eol().fill());
062
063        getTabPreferenceSetting(gui).addSubTab(this, tr("Overpass server"), panel);
064    }
065
066    @Override
067    public boolean ok() {
068        OverpassDownloadReader.OVERPASS_SERVER.put(overpassServer.getText());
069        OverpassDownloadReader.OVERPASS_SERVER_HISTORY.put(overpassServer.getHistory());
070        OverpassDownloadReader.FOR_MULTI_FETCH.put(forMultiFetch.isSelected());
071        return false;
072    }
073
074    @Override
075    public boolean isExpert() {
076        return true;
077    }
078}