Ticket #18283: 18283.patch
File 18283.patch, 5.8 KB (added by , 5 years ago) |
---|
-
src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
3 3 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import java.util.Arrays; 6 import java.util.ArrayList; 7 import java.util.Collections; 7 8 import java.util.List; 9 import java.util.stream.Collectors; 8 10 9 11 import org.openstreetmap.josm.spi.preferences.Config; 10 12 … … 16 18 * @author Bodo Meissner 17 19 */ 18 20 public class PermissionPrefWithDefault { 21 private static final List<PermissionPrefWithDefault> PREFS = new ArrayList<>(); 19 22 20 23 public static final PermissionPrefWithDefault LOAD_DATA = 21 24 new PermissionPrefWithDefault("remotecontrol.permission.load-data", true, tr("Load data from API")); … … 46 49 */ 47 50 public final String preferenceText; 48 51 52 /** 53 * Create a new {@code PermissionPrefWithDefault} 54 * 55 * @param pref The preference key for the permission 56 * @param defaultVal The default value of the preference 57 * @param preferenceText The text to show in UI objects 58 */ 49 59 public PermissionPrefWithDefault(String pref, boolean defaultVal, String preferenceText) { 50 60 this.pref = pref; 51 61 this.defaultVal = defaultVal; … … 52 62 this.preferenceText = preferenceText; 53 63 } 54 64 65 /** 66 * @return true if the action is allowed 67 */ 55 68 public boolean isAllowed() { 56 69 return Config.getPref().getBoolean(pref, defaultVal); 57 70 } 58 71 72 /** 73 * @return A non-modifiable list of permission preferences for Remote Control 74 */ 59 75 public static List<PermissionPrefWithDefault> getPermissionPrefs() { 60 return Arrays.asList( 61 LOAD_DATA, IMPORT_DATA, OPEN_FILES, LOAD_IMAGERY, 62 CHANGE_SELECTION, CHANGE_VIEWPORT, 63 CREATE_OBJECTS, READ_PROTOCOL_VERSION); 76 return Collections.unmodifiableList(PREFS); 64 77 } 78 79 /** 80 * @param pref The preference to add to the list returned by 81 * {@link PermissionPrefWithDefault#getPermissionPrefs} 82 */ 83 public static void addPermissionPref(PermissionPrefWithDefault pref) { 84 if (pref.pref != null && PREFS.parallelStream().noneMatch(tPref -> pref.pref.equals(tPref.pref))) 85 PREFS.add(pref); 86 } 87 88 /** 89 * @param pref The preference to remove from the list returned by 90 * {@link PermissionPrefWithDefault#getPermissionPrefs} 91 * 92 * @return see {@link List#removeAll} 93 */ 94 public static boolean removePermissionPref(PermissionPrefWithDefault pref) { 95 List<PermissionPrefWithDefault> toRemove = Collections.emptyList(); 96 if (pref.pref != null) 97 toRemove = PREFS.parallelStream().filter(tPref -> pref.pref.equals(tPref.pref)) 98 .collect(Collectors.toList()); 99 return PREFS.removeAll(toRemove); 100 } 65 101 } -
src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
10 10 import java.io.PrintWriter; 11 11 import java.io.StringWriter; 12 12 import java.io.Writer; 13 import java.lang.reflect.InvocationTargetException; 13 14 import java.net.Socket; 14 15 import java.nio.charset.Charset; 15 16 import java.nio.charset.StandardCharsets; … … 126 127 command + "\" (handled by " + handler.getSimpleName() + ')'); 127 128 } 128 129 handlers.put(commandWithSlash, handler); 130 try { 131 PermissionPrefWithDefault pref = handler.getConstructor().newInstance().getPermissionPref(); 132 if (pref != null) 133 PermissionPrefWithDefault.addPermissionPref(pref); 134 } catch (InstantiationException | IllegalAccessException | IllegalArgumentException 135 | InvocationTargetException | NoSuchMethodException | SecurityException e) { 136 Logging.debug(e); 137 } 129 138 } 130 139 } 131 140 132 /** Add default request handlers */ 141 /** 142 * Add default request handlers and permission preferences (order is important) 143 */ 133 144 static { 134 145 addRequestHandlerClass(LoadAndZoomHandler.command, LoadAndZoomHandler.class, true); 135 146 addRequestHandlerClass(LoadAndZoomHandler.command2, LoadAndZoomHandler.class, true); 147 addRequestHandlerClass(LoadObjectHandler.command, LoadObjectHandler.class, true); 136 148 addRequestHandlerClass(LoadDataHandler.command, LoadDataHandler.class, true); 149 addRequestHandlerClass(ImportHandler.command, ImportHandler.class, true); 150 addRequestHandlerClass(OpenFileHandler.command, OpenFileHandler.class, true); 137 151 addRequestHandlerClass(ImageryHandler.command, ImageryHandler.class, true); 152 PermissionPrefWithDefault.addPermissionPref(PermissionPrefWithDefault.CHANGE_SELECTION); 153 PermissionPrefWithDefault.addPermissionPref(PermissionPrefWithDefault.CHANGE_VIEWPORT); 138 154 addRequestHandlerClass(AddNodeHandler.command, AddNodeHandler.class, true); 139 155 addRequestHandlerClass(AddWayHandler.command, AddWayHandler.class, true); 140 addRequestHandlerClass(ImportHandler.command, ImportHandler.class, true);141 156 addRequestHandlerClass(VersionHandler.command, VersionHandler.class, true); 142 addRequestHandlerClass(LoadObjectHandler.command, LoadObjectHandler.class, true);143 addRequestHandlerClass(OpenFileHandler.command, OpenFileHandler.class, true);144 157 addRequestHandlerClass(FeaturesHandler.command, FeaturesHandler.class, true); 145 158 } 146 159