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; 007import java.util.Arrays; 008 009import javax.swing.BorderFactory; 010import javax.swing.Box; 011import javax.swing.JCheckBox; 012import javax.swing.JLabel; 013import javax.swing.JPanel; 014 015import org.openstreetmap.josm.data.preferences.BooleanProperty; 016import org.openstreetmap.josm.data.preferences.CollectionProperty; 017import org.openstreetmap.josm.data.preferences.StringProperty; 018import org.openstreetmap.josm.gui.preferences.PreferenceSetting; 019import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory; 020import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; 021import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting; 022import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting; 023import org.openstreetmap.josm.gui.widgets.HistoryComboBox; 024import org.openstreetmap.josm.tools.GBC; 025 026/** 027 * Preferences related to Overpass API servers. 028 * 029 * @since 9142 030 */ 031public class OverpassServerPreference implements SubPreferenceSetting { 032 033 private static final StringProperty OVERPASS_SERVER = new StringProperty("download.overpass.server", 034 "http://overpass-api.de/api/"); 035 private static final CollectionProperty OVERPASS_SERVER_HISTORY = new CollectionProperty("download.overpass.servers", 036 Arrays.asList("http://overpass-api.de/api/", "http://overpass.osm.rambler.ru/cgi/")); 037 private static final BooleanProperty FOR_MULTI_FETCH = new BooleanProperty("download.overpass.for-multi-fetch", false); 038 039 private HistoryComboBox overpassServer = new HistoryComboBox(); 040 private final JCheckBox forMultiFetch = new JCheckBox(tr("Use Overpass server for object downloads")); 041 042 /** 043 * Factory used to create a new {@link OverpassServerPreference}. 044 */ 045 public static class Factory implements PreferenceSettingFactory { 046 @Override 047 public PreferenceSetting createPreferenceSetting() { 048 return new OverpassServerPreference(); 049 } 050 } 051 052 @Override 053 public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) { 054 return gui.getServerPreference(); 055 } 056 057 @Override 058 public void addGui(PreferenceTabbedPane gui) { 059 final JPanel panel = new JPanel(new GridBagLayout()); 060 061 panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 062 panel.add(new JLabel(tr("Overpass server: ")), GBC.std().insets(5, 5, 5, 5)); 063 panel.add(overpassServer, GBC.eop().fill(GBC.HORIZONTAL)); 064 overpassServer.setPossibleItems(OVERPASS_SERVER_HISTORY.get()); 065 overpassServer.setText(OVERPASS_SERVER.get()); 066 067 panel.add(forMultiFetch, GBC.eop()); 068 forMultiFetch.setSelected(useForMultiFetch()); 069 070 panel.add(Box.createVerticalGlue(), GBC.eol().fill()); 071 072 getTabPreferenceSetting(gui).addSubTab(this, tr("Overpass server"), panel); 073 } 074 075 @Override 076 public boolean ok() { 077 OVERPASS_SERVER.put(overpassServer.getText()); 078 OVERPASS_SERVER_HISTORY.put(overpassServer.getHistory()); 079 FOR_MULTI_FETCH.put(forMultiFetch.isSelected()); 080 return false; 081 } 082 083 @Override 084 public boolean isExpert() { 085 return true; 086 } 087 088 /** 089 * Returns the URL of the currently selected Overpass server. 090 * @return the URL of the currently selected Overpass server. 091 */ 092 public static String getOverpassServer() { 093 return OVERPASS_SERVER.get(); 094 } 095 096 /** 097 * Returns true if objects should be fetched from an Overpass server instead of the OSM API. 098 * @return true if objects should be fetched from an Overpass server instead of the OSM API. 099 */ 100 public static boolean useForMultiFetch() { 101 return FOR_MULTI_FETCH.get(); 102 } 103}