// License: GPL. Copyright 2007 by Immanuel Scholz and others package org.openstreetmap.josm.gui; import static org.openstreetmap.josm.tools.I18n.tr; import java.applet.AppletContext; import java.applet.AppletStub; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import javax.swing.JApplet; import javax.swing.JFrame; 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.actions.JosmAction; import org.openstreetmap.josm.data.ServerSidePreferences; import org.openstreetmap.josm.tools.GBC; import org.openstreetmap.josm.tools.Shortcut; public class MainApplet extends JApplet { public static final class UploadPreferencesAction extends JosmAction { public UploadPreferencesAction() { super(tr("Upload Preferences"), "upload-preferences", tr("Upload the current preferences to the server"), Shortcut.registerShortcut("applet:uploadprefs", tr("Upload Preferences"), KeyEvent.VK_U, Shortcut.GROUP_HOTKEY), true); } public void actionPerformed(ActionEvent e) { ((ServerSidePreferences)Main.pref).upload(); } } private final class MainCaller extends Main { private MainCaller() { setContentPane(contentPane); setJMenuBar(menu); setBounds(bounds); } } private final static String[][] paramInfo = { {"username", tr("string"), tr("Name of the user.")}, {"password", tr("string"), tr("OSM Password.")}, {"geometry", tr("string"), tr("Resize the applet to the given geometry (format: WIDTHxHEIGHT)")}, {"download", tr("string;string;..."), tr("Download each. Can be x1,y1,x2,y2 an URL containing lat=y&lon=x&zoom=z or a filename")}, {"downloadgps", tr("string;string;..."), tr("Download each as raw gps. Can be x1,y1,x2,y2 an URL containing lat=y&lon=x&zoom=z or a filename")}, {"selection", tr("string;string;..."), tr("Add each to the initial selection. Can be a google-like search string or an URL which returns osm-xml")}, {"reset-preferences", tr("any"),tr("If specified, reset the configuration instead of reading it.")} }; private Map> args = new HashMap>(); @Override public String[][] getParameterInfo() { return paramInfo; } @Override public void init() { for (String[] s : paramInfo) { Collection p = readParameter(s[0], args.get(s[0])); if (p != null) { args.put(s[0], p); } } if (!args.containsKey("geometry") && getParameter("width") != null && getParameter("height") != null) { args.put("geometry", Arrays.asList(new String[]{getParameter("width")+"x"+getParameter("height")})); } } @Override public void start() { String username = args.containsKey("username") ? args.get("username").iterator().next() : null; String password = args.containsKey("password") ? args.get("password").iterator().next() : null; if (username == null || password == null) { JPanel p = new JPanel(new GridBagLayout()); p.add(new JLabel(tr("Username")), GBC.std().insets(0,0,20,0)); JTextField user = new JTextField(username == null ? "" : username); p.add(user, GBC.eol().fill(GBC.HORIZONTAL)); p.add(new JLabel(tr("Password")), GBC.std().insets(0,0,20,0)); JPasswordField pass = new JPasswordField(password == null ? "" : password); p.add(pass, GBC.eol().fill(GBC.HORIZONTAL)); JOptionPane.showMessageDialog(null, p); username = user.getText(); password = new String(pass.getPassword()); args.put("password", Arrays.asList(new String[]{password})); } Main.applet = true; Main.pref = new ServerSidePreferences(getCodeBase()); ((ServerSidePreferences)Main.pref).download(username, password); Main.preConstructorInit(args); Main.parent = this; // initialize the plaform hook, and Main.determinePlatformHook(); // call the really early hook before we anything else Main.platform.preStartupHook(); new MainCaller().postConstructorProcessCmdLine(args); MainMenu m = Main.main.menu; // shortcut // remove offending stuff from JOSM (that would break the SecurityManager) m.remove(m.fileMenu); m.editMenu.add(new UploadPreferencesAction()); m.openFile.setEnabled(false); m.exit.setEnabled(false); m.save.setEnabled(false); m.saveAs.setEnabled(false); m.gpxExport.setEnabled(false); } private Collection readParameter(String s, Collection v) { String param = getParameter(s); if (param != null) { if (v == null) { v = new LinkedList(); } v.addAll(Arrays.asList(param.split(";"))); } return v; } public static void main(String[] args) { final JFrame frame = new JFrame("Java OpenStreetMap Editor"); MainApplet applet = new MainApplet(); applet.setStub(new AppletStub() { public void appletResize(int w, int h) { frame.setSize(w, h); } public AppletContext getAppletContext() { return null; } public URL getCodeBase() { try { return new File(".").toURI().toURL(); } catch (Exception e) { e.printStackTrace(); return null; } } public URL getDocumentBase() { return getCodeBase(); } public String getParameter(String k) { return null; } public boolean isActive() { return true; } }); applet.init(); applet.start(); frame.setContentPane(applet); frame.setVisible(true); } }