// License: GPL. For details, see LICENSE file. package org.openstreetmap.hot.sds; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Collections; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting; import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; import org.openstreetmap.josm.tools.GBC; public class SdsPluginPreferences extends DefaultTabPreferenceSetting { static final String SDS_SERVER = "sds-server.url"; static final String SDS_USERNAME = "sds-server.username"; static final String SDS_PASSWORD = "sds-server.password"; static final String SDS_PREFIX = "sds-server.tag-prefix"; private final JTextField server = new JTextField(8); private final JTextField username = new JTextField(8); private final JPasswordField password = new JPasswordField(8); private final JTextField prefix = new JTextField(8); public SdsPluginPreferences() { super("sds", tr("Separate Data Store"), tr("Configures access to the Separate Data Store.")); } @Override public void addGui(final PreferenceTabbedPane gui) { final JPanel tab = gui.createPreferenceTab(this); final JPanel access = new JPanel(new GridBagLayout()); access.setBorder(BorderFactory.createTitledBorder(tr("Server"))); server.setText(Main.pref.get(SDS_SERVER, "http://datastore.hotosm.org")); username.setText(Main.pref.get(SDS_USERNAME, "")); password.setText(Main.pref.get(SDS_PASSWORD, "")); prefix.setText(Main.pref.get(SDS_PREFIX, "hot:")); server.setToolTipText(tr("The URL under which the SDS server can be contacted.")); username.setToolTipText(tr("The user name at the SDS server. You need to create an account with the SDS admin first.")); password.setToolTipText(tr("The password at the SDS server. You need to create an account with the SDS admin first.")); prefix.setToolTipText(tr("Tags beginning with this prefix are never saved to OSM, but to the SDS server only.")); access.add(new JLabel(tr("SDS server URL")), GBC.std()); access.add(server, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5)); access.add(new JLabel(tr("SDS username")), GBC.std()); access.add(username, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5)); access.add(new JLabel(tr("SDS password")), GBC.std()); access.add(password, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5)); JButton test = new JButton(tr("Test credentials now")); access.add(test, GBC.eol().anchor(GBC.EAST).insets(5, 0, 0, 5)); tab.add(access, GBC.eol().fill(GBC.HORIZONTAL)); tab.add(new JLabel(tr("SDS tag prefix")), GBC.std()); tab.add(prefix, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5)); tab.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); test.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ev) { SdsApi api = new SdsApi(server.getText()); String olduser = Main.pref.get(SDS_USERNAME); String oldpass = Main.pref.get(SDS_PASSWORD); Main.pref.put(SDS_USERNAME, username.getText()); Main.pref.put(SDS_PASSWORD, new String(password.getPassword())); try { api.requestShadowsFromSds(Collections.singletonList(Long.valueOf(1L)), null, null, null); JOptionPane.showMessageDialog( Main.parent, tr("Connection successful."), tr("Success"), JOptionPane.PLAIN_MESSAGE ); } catch (Exception ex) { JOptionPane.showMessageDialog( Main.parent, tr("Cannot connect to SDS server: ") + ex.getMessage(), tr("Error"), JOptionPane.ERROR_MESSAGE ); } // restore old credentials even if successful; user might still // choose to press cancel! Main.pref.put(SDS_USERNAME, olduser); Main.pref.put(SDS_PASSWORD, oldpass); } }); } @Override public boolean ok() { Main.pref.put(SDS_SERVER, server.getText()); Main.pref.put(SDS_USERNAME, username.getText()); Main.pref.put(SDS_PASSWORD, new String(password.getPassword())); Main.pref.put(SDS_PREFIX, prefix.getText()); return false; } }