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>