001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.io.remotecontrol.handler;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.io.File;
007import java.util.Arrays;
008
009import org.openstreetmap.josm.actions.OpenFileAction;
010import org.openstreetmap.josm.gui.util.GuiHelper;
011import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
012
013/**
014 * Opens a local file
015 */
016public class OpenFileHandler extends RequestHandler {
017
018    /**
019     * The remote control command name used to open a local file.
020     */
021    public static final String command = "open_file";
022
023    @Override
024    public String[] getMandatoryParams() {
025        return new String[]{"filename"};
026    }
027
028    @Override
029    public String getUsage() {
030        return "opens a local file in JOSM";
031    }
032
033    @Override
034    public String[] getUsageExamples() {
035        return new String[] {"/open_file?filename=/tmp/test.osm"};
036    }
037
038    @Override
039    public PermissionPrefWithDefault getPermissionPref() {
040        return PermissionPrefWithDefault.OPEN_FILES;
041    }
042
043    @Override
044    protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
045        GuiHelper.runInEDTAndWait(new Runnable() {
046            @Override public void run() {
047                OpenFileAction.openFiles(Arrays.asList(new File(args.get("filename"))));
048            }
049        });
050    }
051
052    @Override
053    public String getPermissionMessage() {
054        return tr("Remote Control has been asked to open a local file.");
055    }
056
057    @Override
058    protected void validateRequest() throws RequestHandlerBadRequestException {
059        // Nothing to do
060    }
061}