// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.preferences.server;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.GridBagLayout;
import java.util.Arrays;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.openstreetmap.josm.data.preferences.BooleanProperty;
import org.openstreetmap.josm.data.preferences.CollectionProperty;
import org.openstreetmap.josm.data.preferences.StringProperty;
import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
import org.openstreetmap.josm.tools.GBC;
/**
* Preferences related to Overpass API servers.
*
* @since 9142
*/
public class OverpassServerPreference implements SubPreferenceSetting {
private static final StringProperty OVERPASS_SERVER = new StringProperty("download.overpass.server",
"https://overpass-api.de/api/");
private static final CollectionProperty OVERPASS_SERVER_HISTORY = new CollectionProperty("download.overpass.servers",
Arrays.asList("https://overpass-api.de/api/", "http://overpass.osm.rambler.ru/cgi/"));
private static final BooleanProperty FOR_MULTI_FETCH = new BooleanProperty("download.overpass.for-multi-fetch", false);
private final HistoryComboBox overpassServer = new HistoryComboBox();
private final JCheckBox forMultiFetch = new JCheckBox(tr("Use Overpass server for object downloads"));
/**
* Factory used to create a new {@link OverpassServerPreference}.
*/
public static class Factory implements PreferenceSettingFactory {
@Override
public PreferenceSetting createPreferenceSetting() {
return new OverpassServerPreference();
}
}
@Override
public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
return gui.getServerPreference();
}
@Override
public void addGui(PreferenceTabbedPane gui) {
final JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
panel.add(new JLabel(tr("Overpass server: ")), GBC.std().insets(5, 5, 5, 5));
panel.add(overpassServer, GBC.eop().fill(GBC.HORIZONTAL));
overpassServer.setPossibleItems(OVERPASS_SERVER_HISTORY.get());
overpassServer.setText(OVERPASS_SERVER.get());
panel.add(forMultiFetch, GBC.eop());
forMultiFetch.setSelected(useForMultiFetch());
panel.add(Box.createVerticalGlue(), GBC.eol().fill());
getTabPreferenceSetting(gui).addSubTab(this, tr("Overpass server"), panel);
}
@Override
public boolean ok() {
OVERPASS_SERVER.put(overpassServer.getText());
OVERPASS_SERVER_HISTORY.put(overpassServer.getHistory());
FOR_MULTI_FETCH.put(forMultiFetch.isSelected());
return false;
}
@Override
public boolean isExpert() {
return true;
}
/**
* Returns the URL of the currently selected Overpass server.
* @return the URL of the currently selected Overpass server.
*/
public static String getOverpassServer() {
return OVERPASS_SERVER.get();
}
/**
* Returns true if objects should be fetched from an Overpass server instead of the OSM API.
* @return true if objects should be fetched from an Overpass server instead of the OSM API.
*/
public static boolean useForMultiFetch() {
return FOR_MULTI_FETCH.get();
}
}