DRILL-7692: Add dropdown to select default storage
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
index ec2a400..e1fc811 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
@@ -45,6 +45,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Path("/")
 @RolesAllowed(DrillUserPrincipal.AUTHENTICATED_ROLE)
@@ -66,13 +67,20 @@
   @Inject
   HttpServletRequest request;
 
+  @Inject
+  StorageResources sr;
+
   @GET
   @Path("/query")
   @Produces(MediaType.TEXT_HTML)
   public Viewable getQuery() {
+    List<StorageResources.StoragePluginModel> enabledPlugins = sr.getConfigsFor("enabled")
+      .stream()
+      .map(plugin -> new StorageResources.StoragePluginModel(plugin, request))
+      .collect(Collectors.toList());
     return ViewableWithPermissions.create(
         authEnabled.get(), "/rest/query/query.ftl",
-        sc, new QueryPage(work, request));
+        sc, new QueryPage(work, enabledPlugins, request));
   }
 
   @POST
@@ -119,10 +127,12 @@
     private final boolean onlyImpersonationEnabled;
     private final boolean autoLimitEnabled;
     private final int defaultRowsAutoLimited;
+    private final List<StorageResources.StoragePluginModel> enabledPlugins;
     private final String csrfToken;
 
-    public QueryPage(WorkManager work, HttpServletRequest request) {
+    public QueryPage(WorkManager work, List<StorageResources.StoragePluginModel> enabledPlugins, HttpServletRequest request) {
       DrillConfig config = work.getContext().getConfig();
+      this.enabledPlugins = enabledPlugins;
       //if impersonation is enabled without authentication, will provide mechanism to add user name to request header from Web UI
       onlyImpersonationEnabled = WebServer.isOnlyImpersonationEnabled(config);
       autoLimitEnabled = config.getBoolean(ExecConstants.HTTP_WEB_CLIENT_RESULTSET_AUTOLIMIT_CHECKED);
@@ -142,6 +152,10 @@
       return defaultRowsAutoLimited;
     }
 
+    public List<StorageResources.StoragePluginModel> getEnabledPlugins() {
+      return enabledPlugins;
+    }
+
     public String getCsrfToken() {
       return csrfToken;
     }
diff --git a/exec/java-exec/src/main/resources/rest/query/query.ftl b/exec/java-exec/src/main/resources/rest/query/query.ftl
index e7bbed2..1034674 100644
--- a/exec/java-exec/src/main/resources/rest/query/query.ftl
+++ b/exec/java-exec/src/main/resources/rest/query/query.ftl
@@ -82,7 +82,17 @@
       Submit
     </button>
     <input type="checkbox" name="forceLimit" value="limit" <#if model.isAutoLimitEnabled()>checked</#if>> Limit results to <input type="text" id="autoLimit" name="autoLimit" min="0" value="${model.getDefaultRowsAutoLimited()?c}" size="6" pattern="[0-9]*"> rows <span class="glyphicon glyphicon-info-sign" title="Limits the number of records retrieved in the query. Ignored if query has a limit already" style="cursor:pointer"></span>
-    <label> Default Schema <input type="text" size="10" name="defaultSchema" id="defaultSchema"> </label>
+    <label for="defaultSchema">
+      Default Schema
+      <input type="text" name="defaultSchema" id="defaultSchema" list="enabledPlugins" placeholder="-- default schema --">
+      <datalist id="enabledPlugins">
+        <#list model.getEnabledPlugins() as pluginModel>
+          <#if pluginModel.getPlugin()?? && pluginModel.getPlugin().enabled() == true>
+            <option value="${pluginModel.getPlugin().getName()}">
+          </#if>
+        </#list>
+      </datalist>
+    </label>
     <span class="glyphicon glyphicon-info-sign" title="Set the default schema used to find table names, and for SHOW FILES and SHOW TABLES" style="cursor:pointer"></span>
     <input type="hidden" name="csrfToken" value="${model.getCsrfToken()}">
   </form>