From 16bca2e2ea0351e7637e8f15474fa7bc48185957 Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Thu, 12 Oct 2023 00:47:48 +0200 Subject: [PATCH] [JENKINS-72020] Restore ability to reorder clouds (#8492) * [JENKINS-72020] Reorder clouds Adding back controls to reorder clouds. Since clouds order is taken into account for node provisioning, users should be able to reorder them as needed. * Use tertiary buttons * Separate screen for reordering * Include reordering in the cloud list directly (thanks @timja) * Show the save button after the first reordering * Separate JS Only display order column when admin * Fix reviews * Remove unused string * Put drag-and-drop handle in the cloud icon column * Add missing permission check * Add a small blurb to clarify what cloud order is used for. --- .../main/java/jenkins/agents/CloudSet.java | 24 ++++++ .../jenkins/agents/CloudSet/index.jelly | 76 +++++++++++-------- .../jenkins/agents/CloudSet/index.properties | 1 + war/src/main/js/pages/cloud-set/index.js | 9 +++ war/src/main/js/pages/cloud-set/index.scss | 3 + war/src/main/js/sortable-drag-drop.js | 16 ++++ war/webpack.config.js | 4 + 7 files changed, 103 insertions(+), 30 deletions(-) create mode 100644 war/src/main/js/pages/cloud-set/index.js create mode 100644 war/src/main/js/pages/cloud-set/index.scss diff --git a/core/src/main/java/jenkins/agents/CloudSet.java b/core/src/main/java/jenkins/agents/CloudSet.java index 5229dd06f1..00a27b0469 100644 --- a/core/src/main/java/jenkins/agents/CloudSet.java +++ b/core/src/main/java/jenkins/agents/CloudSet.java @@ -39,6 +39,11 @@ import hudson.util.FormValidation; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; @@ -248,6 +253,25 @@ public class CloudSet extends AbstractModelObject implements Describable(Jenkins.get().clouds); + Collections.sort(clouds, Comparator.comparingInt(c -> getIndexOf(namesList, c))); + Jenkins.get().clouds.replaceBy(clouds); + rsp.sendRedirect2("."); + } + + private static int getIndexOf(List namesList, Cloud cloud) { + var i = namesList.indexOf(cloud.name); + return i == -1 ? Integer.MAX_VALUE : i; + } + @Extension public static class DescriptorImpl extends Descriptor implements StaplerProxy { diff --git a/core/src/main/resources/jenkins/agents/CloudSet/index.jelly b/core/src/main/resources/jenkins/agents/CloudSet/index.jelly index 3062c25ad0..4c14e73c21 100644 --- a/core/src/main/resources/jenkins/agents/CloudSet/index.jelly +++ b/core/src/main/resources/jenkins/agents/CloudSet/index.jelly @@ -26,8 +26,14 @@ THE SOFTWARE. Entrance to the configuration page --> - + + + +