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}