Merge "Allow ordering of the scopes in the selection UX"
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
index cdc817b..47387f7 100644
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
+++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
@@ -26,6 +26,7 @@
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.github.oauth.OAuthProtocol.Scope;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -61,6 +62,7 @@
   public final boolean enabled;
 
   @Getter public final Map<ScopeKey, List<OAuthProtocol.Scope>> scopes;
+  @Getter public final List<ScopeKey> sortedScopesKeys;
 
   public final int fileUpdateMaxRetryCount;
   public final int fileUpdateMaxRetryIntervalMsec;
@@ -102,6 +104,12 @@
 
     enabled = config.getString("auth", null, "type").equalsIgnoreCase(AuthType.HTTP.toString());
     scopes = getScopes(config);
+    sortedScopesKeys =
+        scopes
+            .keySet()
+            .stream()
+            .sorted(Comparator.comparing(ScopeKey::getSequence))
+            .collect(Collectors.toList());
 
     fileUpdateMaxRetryCount = config.getInt(CONF_SECTION, "fileUpdateMaxRetryCount", 3);
     fileUpdateMaxRetryIntervalMsec =
@@ -139,9 +147,14 @@
         .stream()
         .filter(k -> k.startsWith("scopes"))
         .filter(k -> !k.endsWith("Description"))
+        .filter(k -> !k.endsWith("Sequence"))
         .collect(
             Collectors.toMap(
-                k -> new ScopeKey(k, config.getString(CONF_SECTION, null, k + "Description")),
+                k ->
+                    new ScopeKey(
+                        k,
+                        config.getString(CONF_SECTION, null, k + "Description"),
+                        config.getInt(CONF_SECTION, k + "Sequence", 0)),
                 v -> parseScopesString(config.getString(CONF_SECTION, null, v))));
   }
 
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/ScopeKey.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/ScopeKey.java
index 2b99a71..a4751c7 100644
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/ScopeKey.java
+++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/ScopeKey.java
@@ -19,9 +19,11 @@
 public class ScopeKey {
   @Getter public final String name;
   @Getter public final String description;
+  @Getter public final int sequence;
 
-  public ScopeKey(String name, String description) {
+  public ScopeKey(String name, String description, int sequence) {
     this.name = name;
     this.description = description;
+    this.sequence = sequence;
   }
 }
diff --git a/github-plugin/src/main/resources/static/scope.html b/github-plugin/src/main/resources/static/scope.html
index dc9b4a7..5b46f4c 100644
--- a/github-plugin/src/main/resources/static/scope.html
+++ b/github-plugin/src/main/resources/static/scope.html
@@ -36,7 +36,7 @@
         <form class="signupform" method="get" action="/login">
           <h5>Which level of GitHub access do you need?</h5>
           <ul class="scopes">
-                #foreach ( $scope in $config.scopes.keySet() )
+                #foreach ( $scope in $config.sortedScopesKeys )
                     <li>
                         #set ( $scopeName = $scope.name.substring(6) )
                         #set ( $scopeDescription = $scope.description )