Ticket #5824: 5824_v2.patch

File 5824_v2.patch, 37.0 KB (added by simon04, 15 months ago)
  • src/org/openstreetmap/josm/gui/preferences/RemoteControlPreference.java

    diff --git a/src/org/openstreetmap/josm/gui/preferences/RemoteControlPreference.java b/src/org/openstreetmap/josm/gui/preferences/RemoteControlPreference.java
    index c38c523..ef636b0 100644
    a b import java.awt.Font; 
    88import java.awt.GridBagLayout; 
    99import java.awt.event.ActionEvent; 
    1010import java.awt.event.ActionListener; 
     11import java.util.LinkedHashMap; 
     12import java.util.Map; 
     13import java.util.Map.Entry; 
    1114 
    1215import javax.swing.BorderFactory; 
    1316import javax.swing.Box; 
    import javax.swing.JCheckBox; 
    1518import javax.swing.JLabel; 
    1619import javax.swing.JPanel; 
    1720import javax.swing.JSeparator; 
    18 import javax.swing.UIManager; 
    1921 
    2022import org.openstreetmap.josm.Main; 
    2123import org.openstreetmap.josm.gui.util.GuiHelper; 
     24import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 
    2225import org.openstreetmap.josm.io.remotecontrol.RemoteControl; 
    23 import org.openstreetmap.josm.io.remotecontrol.handler.AddNodeHandler; 
    24 import org.openstreetmap.josm.io.remotecontrol.handler.ImageryHandler; 
    25 import org.openstreetmap.josm.io.remotecontrol.handler.ImportHandler; 
    26 import org.openstreetmap.josm.io.remotecontrol.handler.LoadAndZoomHandler; 
    2726import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler; 
    28 import org.openstreetmap.josm.io.remotecontrol.handler.VersionHandler; 
    2927import org.openstreetmap.josm.tools.GBC; 
    3028 
    3129/** 
    import org.openstreetmap.josm.tools.GBC; 
    3331 * 
    3432 * @author Frederik Ramm 
    3533 */ 
    36 public class RemoteControlPreference extends DefaultTabPreferenceSetting 
    37 { 
     34public class RemoteControlPreference extends DefaultTabPreferenceSetting { 
     35 
    3836    public static class Factory implements PreferenceSettingFactory { 
     37 
    3938        @Override 
    4039        public PreferenceSetting createPreferenceSetting() { 
    4140            return new RemoteControlPreference(); 
    4241        } 
    4342    } 
    44      
     43 
    4544    private RemoteControlPreference() { 
    4645        super("remotecontrol", tr("Remote Control"), tr("Settings for the remote control feature.")); 
     46        for (PermissionPrefWithDefault p : PermissionPrefWithDefault.getPermissionPrefs()) { 
     47            JCheckBox cb = new JCheckBox(p.preferenceText); 
     48            cb.setSelected(p.isAllowed()); 
     49            prefs.put(p, cb); 
     50        } 
    4751    } 
    48  
     52    private final Map<PermissionPrefWithDefault, JCheckBox> prefs = 
     53            new LinkedHashMap<PermissionPrefWithDefault, JCheckBox>(); 
    4954    private JCheckBox enableRemoteControl; 
    50  
    51     private JCheckBox permissionLoadData = new JCheckBox(tr("Load data from API")); 
    52     private JCheckBox permissionImportData = new JCheckBox(tr("Import data from URL")); 
    53     private JCheckBox permissionLoadImagery = new JCheckBox(tr("Load imagery layers")); 
    54     private JCheckBox permissionCreateObjects = new JCheckBox(tr("Create new objects")); 
    55     private JCheckBox permissionChangeSelection = new JCheckBox(tr("Change the selection")); 
    56     private JCheckBox permissionChangeViewport = new JCheckBox(tr("Change the viewport")); 
    57     private JCheckBox permissionReadProtocolversion = new JCheckBox(tr("Read protocol version")); 
    5855    private JCheckBox loadInNewLayer = new JCheckBox(tr("Download objects to new layer")); 
    5956    private JCheckBox alwaysAskUserConfirm = new JCheckBox(tr("Confirm all Remote Control actions manually")); 
    6057 
     58    @Override 
    6159    public void addGui(final PreferenceTabbedPane gui) { 
    6260 
    6361        JPanel remote = new JPanel(new GridBagLayout()); 
    6462 
     63        final JLabel descLabel = new JLabel("<html>" 
     64                + tr("Allows JOSM to be controlled from other applications, e.g. from a web browser.") 
     65                + "</html>"); 
     66        descLabel.setFont(descLabel.getFont().deriveFont(Font.PLAIN)); 
     67        remote.add(descLabel, GBC.eol().insets(5, 5, 0, 10).fill(GBC.HORIZONTAL)); 
     68 
     69        final JLabel portLabel = new JLabel("<html>" + tr("JOSM will always listen at <b>port 8111</b> on localhost. " 
     70                + "<br>This port is not configurable because it is referenced by external applications talking to JOSM.") + "</html>"); 
     71        portLabel.setFont(portLabel.getFont().deriveFont(Font.PLAIN)); 
     72        remote.add(portLabel, GBC.eol().insets(5, 5, 0, 10).fill(GBC.HORIZONTAL)); 
     73 
    6574        remote.add(enableRemoteControl = new JCheckBox(tr("Enable remote control"), RemoteControl.PROP_REMOTECONTROL_ENABLED.get()), GBC.eol()); 
    6675 
    6776        final JPanel wrapper = new JPanel(); 
    public class RemoteControlPreference extends DefaultTabPreferenceSetting 
    7079 
    7180        remote.add(wrapper, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 5, 5, 5)); 
    7281 
    73         final JLabel descLabel = new JLabel("<html>"+ 
    74                 tr("The remote control feature allows JOSM to be controlled from other applications, e.g. from a web browser.") 
    75                 + "</html>"); 
    76         wrapper.add(descLabel, GBC.eol().insets(5,5,0,10).fill(GBC.HORIZONTAL)); 
    77         descLabel.setFont(descLabel.getFont().deriveFont(Font.PLAIN)); 
    78  
    7982        wrapper.add(new JLabel(tr("Permitted actions:")), GBC.eol()); 
    8083        int INDENT = 15; 
    81         wrapper.add(permissionLoadData, GBC.eol().insets(INDENT,5,0,0).fill(GBC.HORIZONTAL)); 
    82         wrapper.add(permissionImportData, GBC.eol().insets(INDENT,5,0,0).fill(GBC.HORIZONTAL)); 
    83         wrapper.add(permissionLoadImagery, GBC.eol().insets(INDENT,5,0,0).fill(GBC.HORIZONTAL)); 
    84         wrapper.add(permissionChangeSelection, GBC.eol().insets(INDENT,5,0,0).fill(GBC.HORIZONTAL)); 
    85         wrapper.add(permissionChangeViewport, GBC.eol().insets(INDENT,5,0,0).fill(GBC.HORIZONTAL)); 
    86         wrapper.add(permissionCreateObjects, GBC.eol().insets(INDENT,5,0,0).fill(GBC.HORIZONTAL)); 
    87         wrapper.add(permissionReadProtocolversion, GBC.eol().insets(INDENT,5,0,0).fill(GBC.HORIZONTAL)); 
     84        for (JCheckBox p : prefs.values()) { 
     85            wrapper.add(p, GBC.eol().insets(INDENT, 5, 0, 0).fill(GBC.HORIZONTAL)); 
     86        } 
    8887 
    8988        wrapper.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL).insets(15, 5, 15, 5)); 
    90  
    9189        wrapper.add(loadInNewLayer, GBC.eol().fill(GBC.HORIZONTAL)); 
    92  
    9390        wrapper.add(alwaysAskUserConfirm, GBC.eol().fill(GBC.HORIZONTAL)); 
    9491 
    95         final JLabel portLabel = new JLabel("<html>"+tr("JOSM will always listen at port 8111 on localhost. " + 
    96                 "This port is not configurable because it is referenced by external applications talking to JOSM.") + "</html>"); 
    97         portLabel.setFont(portLabel.getFont().deriveFont(Font.PLAIN)); 
    98  
    99         wrapper.add(portLabel, GBC.eol().insets(5,5,0,10).fill(GBC.HORIZONTAL)); 
    100  
    10192        remote.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 
    10293 
    103         permissionLoadData.setSelected(Main.pref.getBoolean(LoadAndZoomHandler.loadDataPermissionKey, LoadAndZoomHandler.loadDataPermissionDefault)); 
    104         permissionImportData.setSelected(Main.pref.getBoolean(ImportHandler.permissionKey, ImportHandler.permissionDefault)); 
    105         permissionLoadImagery.setSelected(Main.pref.getBoolean(ImageryHandler.permissionKey, ImageryHandler.permissionDefault)); 
    106         permissionChangeSelection.setSelected(Main.pref.getBoolean(LoadAndZoomHandler.changeSelectionPermissionKey, LoadAndZoomHandler.changeSelectionPermissionDefault)); 
    107         permissionChangeViewport.setSelected(Main.pref.getBoolean(LoadAndZoomHandler.changeViewportPermissionKey, LoadAndZoomHandler.changeViewportPermissionDefault)); 
    108         permissionCreateObjects.setSelected(Main.pref.getBoolean(AddNodeHandler.permissionKey, AddNodeHandler.permissionDefault)); 
    109         permissionReadProtocolversion.setSelected(Main.pref.getBoolean(VersionHandler.permissionKey, VersionHandler.permissionDefault)); 
    11094        loadInNewLayer.setSelected(Main.pref.getBoolean(RequestHandler.loadInNewLayerKey, RequestHandler.loadInNewLayerDefault)); 
    11195        alwaysAskUserConfirm.setSelected(Main.pref.getBoolean(RequestHandler.globalConfirmationKey, RequestHandler.globalConfirmationDefault)); 
    11296 
    11397        ActionListener remoteControlEnabled = new ActionListener() { 
     98 
     99            @Override 
    114100            public void actionPerformed(ActionEvent e) { 
    115                 boolean enabled = enableRemoteControl.isSelected(); 
    116101                GuiHelper.setEnabledRec(wrapper, enableRemoteControl.isSelected()); 
    117102                // 'setEnabled(false)' does not work for JLabel with html text, so do it manually 
    118                 portLabel.setForeground(enabled ? UIManager.getColor("Label.foreground") : UIManager.getColor("Label.disabledForeground")); 
    119                 descLabel.setForeground(enabled ? UIManager.getColor("Label.foreground") : UIManager.getColor("Label.disabledForeground")); 
    120103                // FIXME: use QuadStateCheckBox to make checkboxes unset when disabled 
    121104            } 
    122105        }; 
    public class RemoteControlPreference extends DefaultTabPreferenceSetting 
    125108        createPreferenceTabWithScrollPane(gui, remote); 
    126109    } 
    127110 
     111    @Override 
    128112    public boolean ok() { 
    129113        boolean enabled = enableRemoteControl.isSelected(); 
    130114        boolean changed = RemoteControl.PROP_REMOTECONTROL_ENABLED.put(enabled); 
    131115        if (enabled) { 
    132             Main.pref.put(LoadAndZoomHandler.loadDataPermissionKey, permissionLoadData.isSelected()); 
    133             Main.pref.put(ImportHandler.permissionKey, permissionImportData.isSelected()); 
    134             Main.pref.put(ImageryHandler.permissionKey, permissionLoadImagery.isSelected()); 
    135             Main.pref.put(LoadAndZoomHandler.changeSelectionPermissionKey, permissionChangeSelection.isSelected()); 
    136             Main.pref.put(LoadAndZoomHandler.changeViewportPermissionKey, permissionChangeViewport.isSelected()); 
    137             Main.pref.put(AddNodeHandler.permissionKey, permissionCreateObjects.isSelected()); 
    138             Main.pref.put(VersionHandler.permissionKey, permissionReadProtocolversion.isSelected()); 
     116            for (Entry<PermissionPrefWithDefault, JCheckBox> p : prefs.entrySet()) { 
     117                Main.pref.put(p.getKey().pref, p.getValue().isSelected()); 
     118            } 
    139119            Main.pref.put(RequestHandler.loadInNewLayerKey, loadInNewLayer.isSelected()); 
    140120            Main.pref.put(RequestHandler.globalConfirmationKey, alwaysAskUserConfirm.isSelected()); 
    141121        } 
  • src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java b/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
    index 9ab7335..6a37dd3 100644
    a b  
    11// License: GPL. For details, see LICENSE file. 
    22package org.openstreetmap.josm.io.remotecontrol; 
    33 
     4import java.util.Arrays; 
     5import java.util.List; 
     6import org.openstreetmap.josm.Main; 
     7import static org.openstreetmap.josm.tools.I18n.tr; 
     8 
    49/** 
    510 * Contains a preference name to control permission for the operation 
    6  * implemented by the RequestHandler, and an error message to be displayed 
    7  * if not permitted. 
     11 * implemented by the RequestHandler, and an error message to be displayed if 
     12 * not permitted. 
    813 * 
    914 * @author Bodo Meissner 
    1015 */ 
    1116public class PermissionPrefWithDefault { 
    1217 
    13     /** name of the preference setting to permit the remote operation */ 
    14     public String pref; 
    15     /** message to be displayed if operation is not permitted */ 
    16     public String message; 
    17  
    18     public boolean defaultVal = true; 
     18    public static final PermissionPrefWithDefault LOAD_DATA = 
     19            new PermissionPrefWithDefault("remotecontrol.permission.load-data", true, tr("Load data from API")); 
     20    public static final PermissionPrefWithDefault IMPORT_DATA = 
     21            new PermissionPrefWithDefault("remotecontrol.permission.import", true, tr("Import data from URL")); 
     22    public static final PermissionPrefWithDefault OPEN_FILES = 
     23            new PermissionPrefWithDefault("remotecontrol.permission.open-files", false, tr("Open local files")); 
     24    public static final PermissionPrefWithDefault LOAD_IMAGERY = 
     25            new PermissionPrefWithDefault("remotecontrol.permission.imagery", true, tr("Load imagery layers")); 
     26    public static final PermissionPrefWithDefault CHANGE_SELECTION = 
     27            new PermissionPrefWithDefault("remotecontrol.permission.change-selection", true, tr("Change the selection")); 
     28    public static final PermissionPrefWithDefault CHANGE_VIEWPORT = 
     29            new PermissionPrefWithDefault("remotecontrol.permission.change-viewport", true, tr("Change the viewport")); 
     30    public static final PermissionPrefWithDefault CREATE_OBJECTS = 
     31            new PermissionPrefWithDefault("remotecontrol.permission.create-objects", true, tr("Create new objects")); 
     32    public static final PermissionPrefWithDefault READ_PROTOCOL_VERSION = 
     33            new PermissionPrefWithDefault("remotecontrol.permission.read-protocolversion", true, tr("Read protocol version")); 
     34    /** 
     35     * name of the preference setting to permit the remote operation 
     36     */ 
     37    public final String pref; 
     38    /** 
     39     * default preference setting 
     40     */ 
     41    public final boolean defaultVal; 
     42    /** 
     43     * text for the preference dialog checkbox 
     44     */ 
     45    public final String preferenceText; 
    1946 
    20     public PermissionPrefWithDefault(String pref, boolean defaultVal, String message) { 
     47    public PermissionPrefWithDefault(String pref, boolean defaultVal, String preferenceText) { 
    2148        this.pref = pref; 
    22         this.message = message; 
    2349        this.defaultVal = defaultVal; 
     50        this.preferenceText = preferenceText; 
     51    } 
     52 
     53    public boolean isAllowed() { 
     54        return Main.pref.getBoolean(pref, defaultVal); 
     55    } 
     56 
     57    public static List<PermissionPrefWithDefault> getPermissionPrefs() { 
     58        return Arrays.asList( 
     59                LOAD_DATA, IMPORT_DATA, OPEN_FILES, LOAD_IMAGERY, 
     60                CHANGE_SELECTION, CHANGE_VIEWPORT, 
     61                CREATE_OBJECTS, READ_PROTOCOL_VERSION); 
    2462    } 
    2563} 
  • src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java b/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
    index 6bedb97..a7b35b2 100644
    a b import java.io.Writer; 
    1212import java.net.Socket; 
    1313import java.util.Arrays; 
    1414import java.util.Date; 
    15 import java.util.HashMap; 
    1615import java.util.Map; 
    1716import java.util.Map.Entry; 
    1817import java.util.StringTokenizer; 
    1918import java.util.TreeMap; 
    20 import java.util.TreeSet; 
    2119 
    2220import org.openstreetmap.josm.io.remotecontrol.handler.AddNodeHandler; 
    2321import org.openstreetmap.josm.io.remotecontrol.handler.AddWayHandler; 
    import org.openstreetmap.josm.io.remotecontrol.handler.ImageryHandler; 
    2523import org.openstreetmap.josm.io.remotecontrol.handler.ImportHandler; 
    2624import org.openstreetmap.josm.io.remotecontrol.handler.LoadAndZoomHandler; 
    2725import org.openstreetmap.josm.io.remotecontrol.handler.LoadObjectHandler; 
     26import org.openstreetmap.josm.io.remotecontrol.handler.OpenFileHandler; 
    2827import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler; 
    2928import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler.RequestHandlerBadRequestException; 
    3029import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler.RequestHandlerErrorException; 
    public class RequestProcessor extends Thread { 
    116115 
    117116    /** Add default request handlers */ 
    118117    static { 
    119         addRequestHandlerClass(LoadAndZoomHandler.command, 
    120                 LoadAndZoomHandler.class, true); 
    121         addRequestHandlerClass(LoadAndZoomHandler.command2, 
    122                 LoadAndZoomHandler.class, true); 
     118        addRequestHandlerClass(LoadAndZoomHandler.command, LoadAndZoomHandler.class, true); 
     119        addRequestHandlerClass(LoadAndZoomHandler.command2, LoadAndZoomHandler.class, true); 
    123120        addRequestHandlerClass(ImageryHandler.command, ImageryHandler.class, true); 
    124121        addRequestHandlerClass(AddNodeHandler.command, AddNodeHandler.class, true); 
    125122        addRequestHandlerClass(AddWayHandler.command, AddWayHandler.class, true); 
    126123        addRequestHandlerClass(ImportHandler.command, ImportHandler.class, true); 
    127124        addRequestHandlerClass(VersionHandler.command, VersionHandler.class, true); 
    128125        addRequestHandlerClass(LoadObjectHandler.command, LoadObjectHandler.class, true); 
     126        addRequestHandlerClass(OpenFileHandler.command, OpenFileHandler.class, true); 
    129127    } 
    130128 
    131129    /** 
    public class RequestProcessor extends Thread { 
    202200                try { 
    203201                    handler.setCommand(command); 
    204202                    handler.setUrl(url); 
    205                     handler.checkPermission(); 
    206203                    handler.handle(); 
    207204                    sendHeader(out, "200 OK", handler.getContentType(), false); 
    208205                    out.write("Content-length: " + handler.getContent().length() 
    public class RequestProcessor extends Thread { 
    215212                } catch (RequestHandlerBadRequestException ex) { 
    216213                    sendBadRequest(out, ex.getMessage()); 
    217214                } catch (RequestHandlerForbiddenException ex) { 
    218                     sendForbidden(out); 
     215                    sendForbidden(out, ex.getMessage()); 
    219216                } 
    220217            } 
    221218 
    public class RequestProcessor extends Thread { 
    280277     * @throws IOException 
    281278     *             If the error can not be written 
    282279     */ 
    283     private void sendForbidden(Writer out) throws IOException { 
     280    private void sendForbidden(Writer out, String help) throws IOException { 
    284281        sendHeader(out, "403 Forbidden", "text/html", true); 
    285282        out.write("<HTML>\r\n"); 
    286283        out.write("<HEAD><TITLE>Forbidden</TITLE>\r\n"); 
    287284        out.write("</HEAD>\r\n"); 
    288285        out.write("<BODY>"); 
    289286        out.write("<H1>HTTP Error 403: Forbidden</h2>\r\n"); 
     287        if (help != null) { 
     288            out.write(help); 
     289        } 
    290290        out.write("</BODY></HTML>\r\n"); 
    291291        out.flush(); 
    292292    } 
  • src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
    index 09d7971..4ed5bc6 100644
    a b import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 
    1717public class AddNodeHandler extends RequestHandler { 
    1818 
    1919    public static final String command = "add_node"; 
    20     public static final String permissionKey = "remotecontrol.permission.create-objects"; 
    21     public static final boolean permissionDefault = false; 
    2220 
    2321    @Override 
    2422    protected void handleRequest() { 
    public class AddNodeHandler extends RequestHandler { 
    3836 
    3937    @Override 
    4038    public PermissionPrefWithDefault getPermissionPref() { 
    41         return new PermissionPrefWithDefault(permissionKey, permissionDefault, 
    42                 "RemoteControl: creating objects forbidden by preferences"); 
     39        return PermissionPrefWithDefault.CREATE_OBJECTS; 
    4340    } 
    4441 
    4542    /** 
    public class AddNodeHandler extends RequestHandler { 
    6057        // Now execute the commands to add this node. 
    6158        Main.main.undoRedo.add(new AddCommand(nnew)); 
    6259        Main.main.getCurrentDataSet().setSelected(nnew); 
    63         if (Main.pref.getBoolean(LoadAndZoomHandler.changeViewportPermissionKey, LoadAndZoomHandler.changeViewportPermissionDefault)) { 
     60        if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) { 
    6461            AutoScaleAction.autoScale("selection"); 
    6562        } else { 
    6663            Main.map.mapView.repaint(); 
  • src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
    index df43c09..c1cab8c 100644
    a b import org.openstreetmap.josm.command.SequenceCommand; 
    1212import org.openstreetmap.josm.data.coor.LatLon; 
    1313import org.openstreetmap.josm.data.osm.Node; 
    1414import org.openstreetmap.josm.data.osm.Way; 
     15import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 
    1516 
    1617/** 
    1718 * Adds a way to the current dataset. For instance, {@code /add_way?way=lat1,lon2;lat2,lon2}. 
    public class AddWayHandler extends RequestHandler { 
    4041        commands.add(new AddCommand(way)); 
    4142        Main.main.undoRedo.add(new SequenceCommand(tr("Add way"), commands)); 
    4243        Main.main.getCurrentDataSet().setSelected(way); 
    43         if (Main.pref.getBoolean(LoadAndZoomHandler.changeViewportPermissionKey, LoadAndZoomHandler.changeViewportPermissionDefault)) { 
     44        if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) { 
    4445            AutoScaleAction.autoScale("selection"); 
    4546        } else { 
    4647            Main.map.mapView.repaint(); 
    public class AddWayHandler extends RequestHandler { 
    5152    public String getPermissionMessage() { 
    5253        return tr("Remote Control has been asked to create a new way."); 
    5354    } 
     55 
     56    @Override 
     57    public PermissionPrefWithDefault getPermissionPref() { 
     58        return PermissionPrefWithDefault.CREATE_OBJECTS; 
     59    } 
    5460} 
  • src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java
    index c0a825b..25c3194 100644
    a b import static org.openstreetmap.josm.tools.I18n.tr; 
    66import java.io.UnsupportedEncodingException; 
    77import java.net.URLDecoder; 
    88import java.util.HashMap; 
    9 import java.util.StringTokenizer; 
    109 
    1110import org.openstreetmap.josm.Main; 
    1211import org.openstreetmap.josm.data.imagery.ImageryInfo; 
    import org.openstreetmap.josm.gui.layer.ImageryLayer; 
    1413import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 
    1514 
    1615public class ImageryHandler extends RequestHandler { 
     16 
    1717    public static final String command = "imagery"; 
    18     public static final String permissionKey = "remotecontrol.permission.imagery"; 
    19     public static final boolean permissionDefault = true; 
    2018 
    2119    @Override 
    2220    public String getPermissionMessage() { 
    23         return tr("Remote Control has been asked to load an imagery layer from the following URL:") + 
    24         "<br>" + args.get("url"); 
     21        return tr("Remote Control has been asked to load an imagery layer from the following URL:") 
     22                + "<br>" + args.get("url"); 
    2523    } 
    2624 
    2725    @Override 
    28     public String[] getMandatoryParams() 
    29     { 
    30         return new String[] { "url" }; 
     26    public String[] getMandatoryParams() { 
     27        return new String[]{"url"}; 
    3128    } 
    3229 
    3330    @Override 
    34     public PermissionPrefWithDefault getPermissionPref() 
    35     { 
    36         return new PermissionPrefWithDefault(permissionKey, permissionDefault, 
    37         "RemoteControl: import forbidden by preferences"); 
     31    public PermissionPrefWithDefault getPermissionPref() { 
     32        return PermissionPrefWithDefault.LOAD_IMAGERY; 
    3833    } 
    3934 
    4035    @Override 
    4136    protected void handleRequest() throws RequestHandlerErrorException { 
    4237        if (Main.map == null) //Avoid exception when creating ImageryLayer with null MapFrame 
     38        { 
    4339            throw new RequestHandlerErrorException(); 
     40        } 
    4441        String url = args.get("url"); 
    4542        String title = args.get("title"); 
    4643        String type = args.get("type"); 
    47         if((title == null) || (title.length() == 0)) 
    48         { 
     44        if ((title == null) || (title.length() == 0)) { 
    4945            title = tr("Remote imagery"); 
    5046        } 
    5147        String cookies = args.get("cookies"); 
  • src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
    index edc5690..4175a51 100644
    a b import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 
    1717public class ImportHandler extends RequestHandler { 
    1818 
    1919    public static final String command = "import"; 
    20     public static final String permissionKey = "remotecontrol.permission.import"; 
    21     public static final boolean permissionDefault = true; 
    2220 
    2321    @Override 
    2422    protected void handleRequest() throws RequestHandlerErrorException { 
    public class ImportHandler extends RequestHandler { 
    3331    } 
    3432 
    3533    @Override 
    36     public String[] getMandatoryParams() 
    37     { 
    38         return new String[] { "url" }; 
     34    public String[] getMandatoryParams() { 
     35        return new String[]{"url"}; 
    3936    } 
    4037 
    4138    @Override 
    4239    public String getPermissionMessage() { 
    43         return tr("Remote Control has been asked to import data from the following URL:") + 
    44         "<br>" + request; 
     40        return tr("Remote Control has been asked to import data from the following URL:") 
     41                + "<br>" + request; 
    4542    } 
    4643 
    4744    @Override 
    48     public PermissionPrefWithDefault getPermissionPref() 
    49     { 
    50         return new PermissionPrefWithDefault(permissionKey, permissionDefault, 
    51                 "RemoteControl: import forbidden by preferences"); 
     45    public PermissionPrefWithDefault getPermissionPref() { 
     46        return PermissionPrefWithDefault.IMPORT_DATA; 
    5247    } 
    5348 
    5449    @Override 
  • src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
    index bf27616..98c903a 100644
    a b import org.openstreetmap.josm.data.osm.Relation; 
    2424import org.openstreetmap.josm.data.osm.Way; 
    2525import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor; 
    2626import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog; 
     27import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 
    2728import org.openstreetmap.josm.tools.Utils; 
    2829 
    2930/** 
    public class LoadAndZoomHandler extends RequestHandler 
    3435    public static final String command = "load_and_zoom"; 
    3536    public static final String command2 = "zoom"; 
    3637 
    37     public static final String loadDataPermissionKey = "remotecontrol.permission.load-data"; 
    38     public static final boolean loadDataPermissionDefault = true; 
    39     public static final String changeSelectionPermissionKey = "remotecontrol.permission.change-selection"; 
    40     public static final boolean changeSelectionPermissionDefault = true; 
    41     public static final String changeViewportPermissionKey = "remotecontrol.permission.change-viewport"; 
    42     public static final boolean changeViewportPermissionDefault = true; 
    43  
    4438    @Override 
    4539    public String getPermissionMessage() 
    4640    { 
    public class LoadAndZoomHandler extends RequestHandler 
    7165 
    7266            if(command.equals(myCommand)) 
    7367            { 
    74                 if (!Main.pref.getBoolean(loadDataPermissionKey, loadDataPermissionDefault)) 
     68                if (!PermissionPrefWithDefault.LOAD_DATA.isAllowed()) 
    7569                { 
    7670                    System.out.println("RemoteControl: download forbidden by preferences"); 
    7771                } 
    public class LoadAndZoomHandler extends RequestHandler 
    130124            }); 
    131125        } 
    132126 
    133         if (args.containsKey("select") && Main.pref.getBoolean(changeSelectionPermissionKey, changeSelectionPermissionDefault)) { 
     127        if (args.containsKey("select") && PermissionPrefWithDefault.CHANGE_SELECTION.isAllowed()) { 
    134128            // select objects after downloading, zoom to selection. 
    135129            final String selection = args.get("select"); 
    136130            Main.worker.execute(new Runnable() { 
    public class LoadAndZoomHandler extends RequestHandler 
    171165                        } 
    172166                    } 
    173167                    ds.setSelected(newSel); 
    174                     if (Main.pref.getBoolean(changeViewportPermissionKey, changeViewportPermissionDefault)) { 
     168                    if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) { 
    175169                        AutoScaleAction.autoScale("selection"); 
    176170                    } 
    177171                    if (Main.map != null && Main.map.relationListDialog != null) { 
    public class LoadAndZoomHandler extends RequestHandler 
    181175                    } 
    182176                } 
    183177            }); 
    184         } else if (Main.pref.getBoolean(changeViewportPermissionKey, changeViewportPermissionDefault)) { 
     178        } else if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) { 
    185179            // after downloading, zoom to downloaded area. 
    186180            zoom(minlat, maxlat, minlon, maxlon); 
    187181        } 
    public class LoadAndZoomHandler extends RequestHandler 
    231225            }); 
    232226        } 
    233227    } 
     228 
     229    @Override 
     230    public PermissionPrefWithDefault getPermissionPref() { 
     231        return null; 
     232    } 
    234233} 
  • src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
    index fe38e39..011860c 100644
    a b import static org.openstreetmap.josm.tools.I18n.tr; 
    44 
    55import java.util.LinkedList; 
    66import java.util.List; 
    7 import org.openstreetmap.josm.Main; 
    87import org.openstreetmap.josm.actions.DownloadPrimitiveAction; 
    98import org.openstreetmap.josm.data.osm.PrimitiveId; 
    109import org.openstreetmap.josm.data.osm.SimplePrimitiveId; 
     10import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 
    1111 
    1212/** 
    1313 * Loads OSM primitives using their ID 
    public class LoadObjectHandler extends RequestHandler { 
    2525 
    2626    @Override 
    2727    protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException { 
    28         if (!Main.pref.getBoolean(LoadAndZoomHandler.loadDataPermissionKey, LoadAndZoomHandler.loadDataPermissionDefault)) { 
     28        if (!PermissionPrefWithDefault.LOAD_DATA.isAllowed()) { 
    2929            System.out.println("RemoteControl: download forbidden by preferences"); 
    3030        } 
    3131        List<PrimitiveId> ps = new LinkedList<PrimitiveId>(); 
    public class LoadObjectHandler extends RequestHandler { 
    4141    public String getPermissionMessage() { 
    4242        return tr("Remote Control has been asked to load objects (specified by their id) from the API."); 
    4343    } 
     44 
     45    @Override 
     46    public PermissionPrefWithDefault getPermissionPref() { 
     47        return PermissionPrefWithDefault.LOAD_DATA; 
     48    } 
    4449} 
  • new file src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java
    new file mode 100644
    index 0000000..a049045
    - +  
     1package org.openstreetmap.josm.io.remotecontrol.handler; 
     2 
     3import java.io.File; 
     4import java.util.Arrays; 
     5import org.openstreetmap.josm.actions.OpenFileAction; 
     6import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 
     7import static org.openstreetmap.josm.tools.I18n.tr; 
     8 
     9public class OpenFileHandler extends RequestHandler { 
     10 
     11    public static final String command = "open_file"; 
     12 
     13    @Override 
     14    public String[] getMandatoryParams() { 
     15        return new String[]{"filename"}; 
     16    } 
     17 
     18    @Override 
     19    public PermissionPrefWithDefault getPermissionPref() { 
     20        return PermissionPrefWithDefault.OPEN_FILES; 
     21    } 
     22 
     23    @Override 
     24    protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException { 
     25        OpenFileAction.openFiles(Arrays.asList(new File(args.get("filename")))); 
     26    } 
     27 
     28    @Override 
     29    public String getPermissionMessage() { 
     30        return tr("Remote Control has been asked to open a local file."); 
     31    } 
     32} 
  • src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
    index 77d12d4..052493f 100644
    a b package org.openstreetmap.josm.io.remotecontrol.handler; 
    33 
    44import static org.openstreetmap.josm.tools.I18n.tr; 
    55 
     6import java.text.MessageFormat; 
    67import java.util.HashMap; 
    78import java.util.LinkedList; 
    89import java.util.List; 
    9 import java.util.StringTokenizer; 
    1010 
    1111import javax.swing.JOptionPane; 
    1212 
    public abstract class RequestHandler { 
    4949     */ 
    5050    public final void handle() throws RequestHandlerForbiddenException, RequestHandlerBadRequestException, RequestHandlerErrorException 
    5151    { 
    52         checkPermission(); 
    5352        checkMandatoryParams(); 
     53        checkPermission(); 
    5454        handleRequest(); 
    5555    } 
    5656 
    public abstract class RequestHandler { 
    8585     * 
    8686     * @return the preference name and error message or null 
    8787     */ 
    88     public PermissionPrefWithDefault getPermissionPref() 
    89     { 
    90         /* Example: 
    91         return new PermissionPrefWithDefault("fooobar.remotecontrol", 
    92         true 
    93         "RemoteControl: foobar forbidden by preferences"); 
    94         */ 
    95         return null; 
    96     } 
     88    abstract public PermissionPrefWithDefault getPermissionPref(); 
    9789 
    98     public String[] getMandatoryParams() { 
    99         return null; 
    100     } 
     90    abstract public String[] getMandatoryParams(); 
    10191 
    10292    /** 
    10393     * Check permissions in preferences and display error message 
    public abstract class RequestHandler { 
    118108        if((permissionPref != null) && (permissionPref.pref != null)) 
    119109        { 
    120110            if (!Main.pref.getBoolean(permissionPref.pref, permissionPref.defaultVal)) { 
    121                 System.out.println(permissionPref.message); 
    122                 throw new RequestHandlerForbiddenException(); 
     111                String err = MessageFormat.format("RemoteControl: ''{0}'' forbidden by preferences", myCommand); 
     112                System.out.println(err); 
     113                throw new RequestHandlerForbiddenException(err); 
    123114            } 
    124115        } 
    125116 
    public abstract class RequestHandler { 
    132123                "<br>" + tr("Do you want to allow this?"), 
    133124                tr("Confirm Remote Control action"), 
    134125                JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) { 
    135                     throw new RequestHandlerForbiddenException(); 
     126                    String err = MessageFormat.format("RemoteControl: ''{0}'' forbidden by user''s choice", myCommand); 
     127                    throw new RequestHandlerForbiddenException(err); 
    136128            } 
    137129        } 
    138130    } 
    public abstract class RequestHandler { 
    177169 
    178170        List<String> missingKeys = new LinkedList<String>(); 
    179171        boolean error = false; 
    180         for (int i = 0; i < mandatory.length; ++i) { 
    181             String key = mandatory[i]; 
     172        for (String key : mandatory) { 
    182173            String value = args.get(key); 
    183174            if ((value == null) || (value.length() == 0)) { 
    184175                error = true; 
    public abstract class RequestHandler { 
    242233 
    243234    public static class RequestHandlerForbiddenException extends RequestHandlerException { 
    244235        private static final long serialVersionUID = 2263904699747115423L; 
     236 
     237        public RequestHandlerForbiddenException(String message) { 
     238            super(message); 
     239        } 
    245240    } 
    246241} 
     242 No newline at end of file 
  • src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java

    diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java
    index 44dda58..baf1783 100644
    a b import org.openstreetmap.josm.io.remotecontrol.RequestProcessor; 
    1212public class VersionHandler extends RequestHandler { 
    1313 
    1414    public static final String command = "version"; 
    15     public static final String permissionKey = "remotecontrol.permission.read-protocolversion"; 
    16     public static final boolean permissionDefault = true; 
    1715 
    1816    @Override 
    1917    protected void handleRequest() throws RequestHandlerErrorException, 
    public class VersionHandler extends RequestHandler { 
    2119        content = RequestProcessor.PROTOCOLVERSION; 
    2220        contentType = "application/json"; 
    2321        if (args.containsKey("jsonp")) { 
    24             content = args.get("jsonp")+ " && " + args.get("jsonp") + "(" + content + ")"; 
     22            content = args.get("jsonp") + " && " + args.get("jsonp") + "(" + content + ")"; 
    2523        } 
    2624    } 
    2725 
    public class VersionHandler extends RequestHandler { 
    3129    } 
    3230 
    3331    @Override 
    34     public PermissionPrefWithDefault getPermissionPref() 
    35     { 
    36         return new PermissionPrefWithDefault(permissionKey, permissionDefault, 
    37                 "RemoteControl: /version forbidden by preferences"); 
     32    public PermissionPrefWithDefault getPermissionPref() { 
     33        return PermissionPrefWithDefault.READ_PROTOCOL_VERSION; 
     34    } 
     35 
     36    @Override 
     37    public String[] getMandatoryParams() { 
     38        return null; 
    3839    } 
    3940} 
     41 No newline at end of file