Subject: [PATCH] Multiple revert
---
Index: plugins/reverter/src/reverter/RevertChangesetHandler.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/plugins/reverter/src/reverter/RevertChangesetHandler.java b/plugins/reverter/src/reverter/RevertChangesetHandler.java
--- a/plugins/reverter/src/reverter/RevertChangesetHandler.java	(revision 36266)
+++ b/plugins/reverter/src/reverter/RevertChangesetHandler.java	(date 1717230433971)
@@ -7,18 +7,26 @@
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler;
 
+import java.util.List;
+import java.util.ArrayList;
+
 public class RevertChangesetHandler extends RequestHandler {
     public static final String command = "revert_changeset";
     public static final String permissionKey = "remotecontrol.permission.revert_changeset";
     public static final boolean permissionDefault = true;
 
     private int changesetId;
+    private List<Integer> changesetIds = null;
 
     @Override
     protected void handleRequest() throws RequestHandlerErrorException,
             RequestHandlerBadRequestException {
         try {
-            MainApplication.worker.submit(new RevertChangesetTask(changesetId, ChangesetReverter.RevertType.FULL, true));
+            if (changesetIds == null) {
+                MainApplication.worker.submit(new RevertChangesetTask(changesetId, ChangesetReverter.RevertType.FULL, true));
+            } else {
+                MainApplication.worker.submit(new RevertChangesetTask(changesetIds, ChangesetReverter.RevertType.FULL, true, false));
+            }
         } catch (Exception ex) {
             System.out.println("RemoteControl: Error parsing revert_changeset remote control request:");
             ex.printStackTrace();
@@ -28,7 +36,11 @@
 
     @Override
     public String[] getMandatoryParams() {
-        return new String[] {"id"};
+        return new String[0];
+    }
+    @Override
+    public String[] getOptionalParams() {
+        return new String[] {"id", "ids"};
     }
 
     @Override
@@ -43,10 +55,24 @@
 
     @Override
     protected void validateRequest() throws RequestHandlerBadRequestException {
-        try {
-            changesetId = Integer.parseInt(args.get("id"));
-        } catch (NumberFormatException e) {
-            throw new RequestHandlerBadRequestException("NumberFormatException: "+e.getMessage());
+        if (args.containsKey("id")) {
+            try {
+                changesetId = Integer.parseInt(args.get("id"));
+            } catch (NumberFormatException e) {
+                throw new RequestHandlerBadRequestException("NumberFormatException: " + e.getMessage());
+            }
+        } else if (args.get("ids") != null) {
+            try {
+                changesetIds = new ArrayList<>();
+                for (String id : args.get("ids").split(",")) {
+                    changesetIds.add(Integer.parseInt(id));
+                }
+            } catch (NumberFormatException e) {
+                throw new RequestHandlerBadRequestException("NumberFormatException: " + e.getMessage());
+            }
+        } else {
+            throw new RequestHandlerBadRequestException(String.format("At least one of the optional arguments must be specified (%s)",
+                    String.join(", ", getOptionalParams())));
         }
     }
 }
