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;
008import java.util.EnumSet;
009
010import org.openstreetmap.josm.actions.OpenFileAction;
011import org.openstreetmap.josm.gui.io.importexport.Options;
012import org.openstreetmap.josm.gui.util.GuiHelper;
013import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
014
015/**
016 * Opens a local file
017 */
018public class OpenFileHandler extends RequestHandler {
019
020    /**
021     * The remote control command name used to open a local file.
022     */
023    public static final String command = "open_file";
024
025    @Override
026    public String[] getMandatoryParams() {
027        return new String[]{"filename"};
028    }
029
030    @Override
031    public String getUsage() {
032        return "opens a local file in JOSM";
033    }
034
035    @Override
036    public String[] getUsageExamples() {
037        return new String[] {"/open_file?filename=/tmp/test.osm"};
038    }
039
040    @Override
041    public PermissionPrefWithDefault getPermissionPref() {
042        return PermissionPrefWithDefault.OPEN_FILES;
043    }
044
045    @Override
046    protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
047        EnumSet<Options> options = EnumSet.noneOf(Options.class);
048        if (PermissionPrefWithDefault.ALLOW_WEB_RESOURCES.isAllowed()) {
049            options.add(Options.ALLOW_WEB_RESOURCES);
050        }
051        GuiHelper.runInEDT(() ->
052            OpenFileAction.openFiles(Arrays.asList(new File(args.get("filename"))), options.toArray(new Options[0])));
053    }
054
055    @Override
056    public String getPermissionMessage() {
057        return tr("Remote Control has been asked to open a local file.");
058    }
059
060    @Override
061    protected void validateRequest() throws RequestHandlerBadRequestException {
062        // Nothing to do
063    }
064}