Browse Source

Remove unneeded client subinterfaces (#108052)

Since the removal of the transport client these interfaces all have
exactly one implementation. There's no need for the extra layer of
abstraction any more so this commit removes it.
David Turner 1 year ago
parent
commit
c2a090c69f

+ 15 - 9
server/src/main/java/org/elasticsearch/client/internal/AdminClient.java

@@ -14,15 +14,21 @@ package org.elasticsearch.client.internal;
  *
  * @see org.elasticsearch.client.internal.Client#admin()
  */
-public interface AdminClient {
+public class AdminClient {
 
-    /**
-     * A client allowing to perform actions/operations against the cluster.
-     */
-    ClusterAdminClient cluster();
+    protected final ClusterAdminClient clusterAdmin;
+    protected final IndicesAdminClient indicesAdmin;
 
-    /**
-     * A client allowing to perform actions/operations against the indices.
-     */
-    IndicesAdminClient indices();
+    public AdminClient(ElasticsearchClient client) {
+        this.clusterAdmin = new ClusterAdminClient(client);
+        this.indicesAdmin = new IndicesAdminClient(client);
+    }
+
+    public ClusterAdminClient cluster() {
+        return clusterAdmin;
+    }
+
+    public IndicesAdminClient indices() {
+        return indicesAdmin;
+    }
 }

+ 377 - 438
server/src/main/java/org/elasticsearch/client/internal/ClusterAdminClient.java

@@ -10,92 +10,127 @@ package org.elasticsearch.client.internal;
 
 import org.elasticsearch.action.ActionFuture;
 import org.elasticsearch.action.ActionListener;
+import org.elasticsearch.action.ActionRequest;
+import org.elasticsearch.action.ActionResponse;
+import org.elasticsearch.action.ActionType;
 import org.elasticsearch.action.admin.cluster.allocation.ClusterAllocationExplainRequest;
 import org.elasticsearch.action.admin.cluster.allocation.ClusterAllocationExplainRequestBuilder;
 import org.elasticsearch.action.admin.cluster.allocation.ClusterAllocationExplainResponse;
+import org.elasticsearch.action.admin.cluster.allocation.TransportClusterAllocationExplainAction;
 import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
 import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequestBuilder;
 import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
+import org.elasticsearch.action.admin.cluster.health.TransportClusterHealthAction;
 import org.elasticsearch.action.admin.cluster.node.info.NodesInfoRequest;
 import org.elasticsearch.action.admin.cluster.node.info.NodesInfoRequestBuilder;
 import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
+import org.elasticsearch.action.admin.cluster.node.info.TransportNodesInfoAction;
 import org.elasticsearch.action.admin.cluster.node.stats.NodesStatsRequest;
 import org.elasticsearch.action.admin.cluster.node.stats.NodesStatsRequestBuilder;
 import org.elasticsearch.action.admin.cluster.node.stats.NodesStatsResponse;
+import org.elasticsearch.action.admin.cluster.node.stats.TransportNodesStatsAction;
 import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequest;
 import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequestBuilder;
+import org.elasticsearch.action.admin.cluster.node.tasks.cancel.TransportCancelTasksAction;
 import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskRequest;
 import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskRequestBuilder;
 import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskResponse;
+import org.elasticsearch.action.admin.cluster.node.tasks.get.TransportGetTaskAction;
 import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
 import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequestBuilder;
 import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
+import org.elasticsearch.action.admin.cluster.node.tasks.list.TransportListTasksAction;
 import org.elasticsearch.action.admin.cluster.node.usage.NodesUsageRequest;
 import org.elasticsearch.action.admin.cluster.node.usage.NodesUsageResponse;
+import org.elasticsearch.action.admin.cluster.node.usage.TransportNodesUsageAction;
 import org.elasticsearch.action.admin.cluster.repositories.cleanup.CleanupRepositoryRequest;
 import org.elasticsearch.action.admin.cluster.repositories.cleanup.CleanupRepositoryRequestBuilder;
 import org.elasticsearch.action.admin.cluster.repositories.cleanup.CleanupRepositoryResponse;
+import org.elasticsearch.action.admin.cluster.repositories.cleanup.TransportCleanupRepositoryAction;
 import org.elasticsearch.action.admin.cluster.repositories.delete.DeleteRepositoryRequest;
 import org.elasticsearch.action.admin.cluster.repositories.delete.DeleteRepositoryRequestBuilder;
+import org.elasticsearch.action.admin.cluster.repositories.delete.TransportDeleteRepositoryAction;
+import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesAction;
 import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
 import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequestBuilder;
 import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesResponse;
 import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
 import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequestBuilder;
+import org.elasticsearch.action.admin.cluster.repositories.put.TransportPutRepositoryAction;
+import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryAction;
 import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryRequest;
 import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryRequestBuilder;
 import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryResponse;
 import org.elasticsearch.action.admin.cluster.reroute.ClusterRerouteRequest;
 import org.elasticsearch.action.admin.cluster.reroute.ClusterRerouteRequestBuilder;
 import org.elasticsearch.action.admin.cluster.reroute.ClusterRerouteResponse;
+import org.elasticsearch.action.admin.cluster.reroute.TransportClusterRerouteAction;
+import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsAction;
 import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
 import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequestBuilder;
 import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
 import org.elasticsearch.action.admin.cluster.shards.ClusterSearchShardsRequest;
 import org.elasticsearch.action.admin.cluster.shards.ClusterSearchShardsRequestBuilder;
 import org.elasticsearch.action.admin.cluster.shards.ClusterSearchShardsResponse;
+import org.elasticsearch.action.admin.cluster.shards.TransportClusterSearchShardsAction;
 import org.elasticsearch.action.admin.cluster.snapshots.clone.CloneSnapshotRequest;
 import org.elasticsearch.action.admin.cluster.snapshots.clone.CloneSnapshotRequestBuilder;
+import org.elasticsearch.action.admin.cluster.snapshots.clone.TransportCloneSnapshotAction;
 import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotRequest;
 import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotRequestBuilder;
 import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotResponse;
+import org.elasticsearch.action.admin.cluster.snapshots.create.TransportCreateSnapshotAction;
 import org.elasticsearch.action.admin.cluster.snapshots.delete.DeleteSnapshotRequest;
 import org.elasticsearch.action.admin.cluster.snapshots.delete.DeleteSnapshotRequestBuilder;
+import org.elasticsearch.action.admin.cluster.snapshots.delete.TransportDeleteSnapshotAction;
 import org.elasticsearch.action.admin.cluster.snapshots.get.GetSnapshotsRequest;
 import org.elasticsearch.action.admin.cluster.snapshots.get.GetSnapshotsRequestBuilder;
 import org.elasticsearch.action.admin.cluster.snapshots.get.GetSnapshotsResponse;
+import org.elasticsearch.action.admin.cluster.snapshots.get.TransportGetSnapshotsAction;
 import org.elasticsearch.action.admin.cluster.snapshots.restore.RestoreSnapshotRequest;
 import org.elasticsearch.action.admin.cluster.snapshots.restore.RestoreSnapshotRequestBuilder;
 import org.elasticsearch.action.admin.cluster.snapshots.restore.RestoreSnapshotResponse;
+import org.elasticsearch.action.admin.cluster.snapshots.restore.TransportRestoreSnapshotAction;
 import org.elasticsearch.action.admin.cluster.snapshots.status.SnapshotsStatusRequest;
 import org.elasticsearch.action.admin.cluster.snapshots.status.SnapshotsStatusRequestBuilder;
 import org.elasticsearch.action.admin.cluster.snapshots.status.SnapshotsStatusResponse;
+import org.elasticsearch.action.admin.cluster.snapshots.status.TransportSnapshotsStatusAction;
+import org.elasticsearch.action.admin.cluster.state.ClusterStateAction;
 import org.elasticsearch.action.admin.cluster.state.ClusterStateRequest;
 import org.elasticsearch.action.admin.cluster.state.ClusterStateRequestBuilder;
 import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
 import org.elasticsearch.action.admin.cluster.stats.ClusterStatsRequest;
 import org.elasticsearch.action.admin.cluster.stats.ClusterStatsRequestBuilder;
 import org.elasticsearch.action.admin.cluster.stats.ClusterStatsResponse;
+import org.elasticsearch.action.admin.cluster.stats.TransportClusterStatsAction;
 import org.elasticsearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequest;
 import org.elasticsearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequestBuilder;
+import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptAction;
 import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptRequest;
 import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptRequestBuilder;
 import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptResponse;
 import org.elasticsearch.action.admin.cluster.storedscripts.PutStoredScriptRequest;
 import org.elasticsearch.action.admin.cluster.storedscripts.PutStoredScriptRequestBuilder;
+import org.elasticsearch.action.admin.cluster.storedscripts.TransportDeleteStoredScriptAction;
+import org.elasticsearch.action.admin.cluster.storedscripts.TransportPutStoredScriptAction;
 import org.elasticsearch.action.ingest.DeletePipelineRequest;
 import org.elasticsearch.action.ingest.DeletePipelineRequestBuilder;
+import org.elasticsearch.action.ingest.DeletePipelineTransportAction;
+import org.elasticsearch.action.ingest.GetPipelineAction;
 import org.elasticsearch.action.ingest.GetPipelineRequest;
 import org.elasticsearch.action.ingest.GetPipelineRequestBuilder;
 import org.elasticsearch.action.ingest.GetPipelineResponse;
 import org.elasticsearch.action.ingest.PutPipelineRequest;
 import org.elasticsearch.action.ingest.PutPipelineRequestBuilder;
+import org.elasticsearch.action.ingest.PutPipelineTransportAction;
+import org.elasticsearch.action.ingest.SimulatePipelineAction;
 import org.elasticsearch.action.ingest.SimulatePipelineRequest;
 import org.elasticsearch.action.ingest.SimulatePipelineRequestBuilder;
 import org.elasticsearch.action.ingest.SimulatePipelineResponse;
 import org.elasticsearch.action.support.master.AcknowledgedResponse;
 import org.elasticsearch.common.bytes.BytesReference;
 import org.elasticsearch.tasks.TaskId;
+import org.elasticsearch.threadpool.ThreadPool;
 import org.elasticsearch.xcontent.XContentType;
 
 /**
@@ -103,442 +138,346 @@ import org.elasticsearch.xcontent.XContentType;
  *
  * @see AdminClient#cluster()
  */
-public interface ClusterAdminClient extends ElasticsearchClient {
-
-    /**
-     * The health of the cluster.
-     *
-     * @param request The cluster state request
-     * @return The result future
-     */
-    ActionFuture<ClusterHealthResponse> health(ClusterHealthRequest request);
-
-    /**
-     * The health of the cluster.
-     *
-     * @param request  The cluster state request
-     * @param listener A listener to be notified with a result
-     */
-    void health(ClusterHealthRequest request, ActionListener<ClusterHealthResponse> listener);
-
-    /**
-     * The health of the cluster.
-     */
-    ClusterHealthRequestBuilder prepareHealth(String... indices);
-
-    /**
-     * The state of the cluster.
-     *
-     * @param request The cluster state request.
-     * @return The result future
-     */
-    ActionFuture<ClusterStateResponse> state(ClusterStateRequest request);
-
-    /**
-     * The state of the cluster.
-     *
-     * @param request  The cluster state request.
-     * @param listener A listener to be notified with a result
-     */
-    void state(ClusterStateRequest request, ActionListener<ClusterStateResponse> listener);
-
-    /**
-     * The state of the cluster.
-     */
-    ClusterStateRequestBuilder prepareState();
-
-    /**
-     * Updates settings in the cluster.
-     */
-    ActionFuture<ClusterUpdateSettingsResponse> updateSettings(ClusterUpdateSettingsRequest request);
-
-    /**
-     * Update settings in the cluster.
-     */
-    void updateSettings(ClusterUpdateSettingsRequest request, ActionListener<ClusterUpdateSettingsResponse> listener);
-
-    /**
-     * Update settings in the cluster.
-     */
-    ClusterUpdateSettingsRequestBuilder prepareUpdateSettings();
-
-    /**
-     * Reroutes allocation of shards. Advance API.
-     */
-    ActionFuture<ClusterRerouteResponse> reroute(ClusterRerouteRequest request);
-
-    /**
-     * Reroutes allocation of shards. Advance API.
-     */
-    void reroute(ClusterRerouteRequest request, ActionListener<ClusterRerouteResponse> listener);
-
-    /**
-     * Update settings in the cluster.
-     */
-    ClusterRerouteRequestBuilder prepareReroute();
-
-    /**
-     * Nodes info of the cluster.
-     *
-     * @param request The nodes info request
-     * @return The result future
-     */
-    ActionFuture<NodesInfoResponse> nodesInfo(NodesInfoRequest request);
-
-    /**
-     * Nodes info of the cluster.
-     *
-     * @param request  The nodes info request
-     * @param listener A listener to be notified with a result
-     */
-    void nodesInfo(NodesInfoRequest request, ActionListener<NodesInfoResponse> listener);
-
-    /**
-     * Nodes info of the cluster.
-     */
-    NodesInfoRequestBuilder prepareNodesInfo(String... nodesIds);
-
-    /**
-     * Cluster wide aggregated stats
-     *
-     * @param request  The cluster stats request
-     * @param listener A listener to be notified with a result
-     */
-    void clusterStats(ClusterStatsRequest request, ActionListener<ClusterStatsResponse> listener);
-
-    ClusterStatsRequestBuilder prepareClusterStats();
-
-    /**
-     * Nodes stats of the cluster.
-     *
-     * @param request The nodes stats request
-     * @return The result future
-     */
-    ActionFuture<NodesStatsResponse> nodesStats(NodesStatsRequest request);
-
-    /**
-     * Nodes stats of the cluster.
-     *
-     * @param request  The nodes info request
-     * @param listener A listener to be notified with a result
-     */
-    void nodesStats(NodesStatsRequest request, ActionListener<NodesStatsResponse> listener);
-
-    /**
-     * Nodes stats of the cluster.
-     */
-    NodesStatsRequestBuilder prepareNodesStats(String... nodesIds);
-
-    /**
-     * Nodes usage of the cluster.
-     *
-     * @param request
-     *            The nodes usage request
-     * @param listener
-     *            A listener to be notified with a result
-     */
-    void nodesUsage(NodesUsageRequest request, ActionListener<NodesUsageResponse> listener);
-
-    /**
-     * List tasks
-     *
-     * @param request The nodes tasks request
-     * @return The result future
-     */
-    ActionFuture<ListTasksResponse> listTasks(ListTasksRequest request);
-
-    /**
-     * List active tasks
-     *
-     * @param request  The nodes tasks request
-     * @param listener A listener to be notified with a result
-     */
-    void listTasks(ListTasksRequest request, ActionListener<ListTasksResponse> listener);
-
-    /**
-     * List active tasks
-     */
-    ListTasksRequestBuilder prepareListTasks(String... nodesIds);
-
-    /**
-     * Get a task.
-     *
-     * @param request the request
-     * @return the result future
-     */
-    ActionFuture<GetTaskResponse> getTask(GetTaskRequest request);
-
-    /**
-     * Get a task.
-     *
-     * @param request the request
-     * @param listener A listener to be notified with the result
-     */
-    void getTask(GetTaskRequest request, ActionListener<GetTaskResponse> listener);
-
-    /**
-     * Fetch a task by id.
-     */
-    GetTaskRequestBuilder prepareGetTask(String taskId);
-
-    /**
-     * Fetch a task by id.
-     */
-    GetTaskRequestBuilder prepareGetTask(TaskId taskId);
-
-    /**
-     * Cancel tasks
-     *
-     * @param request The nodes tasks request
-     * @return The result future
-     */
-    ActionFuture<ListTasksResponse> cancelTasks(CancelTasksRequest request);
-
-    /**
-     * Cancel active tasks
-     *
-     * @param request  The nodes tasks request
-     * @param listener A listener to be notified with a result
-     */
-    void cancelTasks(CancelTasksRequest request, ActionListener<ListTasksResponse> listener);
-
-    /**
-     * Cancel active tasks
-     */
-    CancelTasksRequestBuilder prepareCancelTasks(String... nodesIds);
-
-    /**
-     * Returns list of shards the given search would be executed on.
-     */
-    void searchShards(ClusterSearchShardsRequest request, ActionListener<ClusterSearchShardsResponse> listener);
-
-    /**
-     * Returns list of shards the given search would be executed on.
-     */
-    ClusterSearchShardsRequestBuilder prepareSearchShards(String... indices);
-
-    /**
-     * Registers a snapshot repository.
-     */
-    void putRepository(PutRepositoryRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Registers a snapshot repository.
-     */
-    PutRepositoryRequestBuilder preparePutRepository(String name);
-
-    /**
-     * Unregisters a repository.
-     */
-    void deleteRepository(DeleteRepositoryRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Unregisters a repository.
-     */
-    DeleteRepositoryRequestBuilder prepareDeleteRepository(String name);
-
-    /**
-     * Gets repositories.
-     */
-    void getRepositories(GetRepositoriesRequest request, ActionListener<GetRepositoriesResponse> listener);
-
-    /**
-     * Gets repositories.
-     */
-    GetRepositoriesRequestBuilder prepareGetRepositories(String... name);
-
-    /**
-     * Cleans up repository.
-     */
-    CleanupRepositoryRequestBuilder prepareCleanupRepository(String repository);
-
-    /**
-     * Cleans up repository.
-     */
-    void cleanupRepository(CleanupRepositoryRequest repository, ActionListener<CleanupRepositoryResponse> listener);
-
-    /**
-     * Verifies a repository.
-     */
-    void verifyRepository(VerifyRepositoryRequest request, ActionListener<VerifyRepositoryResponse> listener);
-
-    /**
-     * Verifies a repository.
-     */
-    VerifyRepositoryRequestBuilder prepareVerifyRepository(String name);
-
-    /**
-     * Creates a new snapshot.
-     */
-    ActionFuture<CreateSnapshotResponse> createSnapshot(CreateSnapshotRequest request);
-
-    /**
-     * Creates a new snapshot.
-     */
-    void createSnapshot(CreateSnapshotRequest request, ActionListener<CreateSnapshotResponse> listener);
-
-    /**
-     * Creates a new snapshot.
-     */
-    CreateSnapshotRequestBuilder prepareCreateSnapshot(String repository, String name);
-
-    /**
-     * Clones a snapshot.
-     */
-    CloneSnapshotRequestBuilder prepareCloneSnapshot(String repository, String source, String target);
-
-    /**
-     * Clones a snapshot.
-     */
-    void cloneSnapshot(CloneSnapshotRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Get snapshots.
-     */
-    void getSnapshots(GetSnapshotsRequest request, ActionListener<GetSnapshotsResponse> listener);
-
-    /**
-     * Get snapshots.
-     */
-    GetSnapshotsRequestBuilder prepareGetSnapshots(String... repository);
-
-    /**
-     * Delete snapshot.
-     */
-    void deleteSnapshot(DeleteSnapshotRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Delete snapshot.
-     */
-    DeleteSnapshotRequestBuilder prepareDeleteSnapshot(String repository, String... snapshot);
-
-    /**
-     * Restores a snapshot.
-     */
-    ActionFuture<RestoreSnapshotResponse> restoreSnapshot(RestoreSnapshotRequest request);
-
-    /**
-     * Restores a snapshot.
-     */
-    void restoreSnapshot(RestoreSnapshotRequest request, ActionListener<RestoreSnapshotResponse> listener);
-
-    /**
-     * Restores a snapshot.
-     */
-    RestoreSnapshotRequestBuilder prepareRestoreSnapshot(String repository, String snapshot);
-
-    /**
-     * Get snapshot status.
-     */
-    void snapshotsStatus(SnapshotsStatusRequest request, ActionListener<SnapshotsStatusResponse> listener);
-
-    /**
-     * Get snapshot status.
-     */
-    SnapshotsStatusRequestBuilder prepareSnapshotStatus(String repository);
-
-    /**
-     * Get snapshot status.
-     */
-    SnapshotsStatusRequestBuilder prepareSnapshotStatus();
-
-    /**
-     * Stores an ingest pipeline
-     */
-    void putPipeline(PutPipelineRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Stores an ingest pipeline
-     */
-    ActionFuture<AcknowledgedResponse> putPipeline(PutPipelineRequest request);
-
-    /**
-     * Stores an ingest pipeline
-     */
-    PutPipelineRequestBuilder preparePutPipeline(String id, BytesReference source, XContentType xContentType);
-
-    /**
-     * Deletes a stored ingest pipeline
-     */
-    void deletePipeline(DeletePipelineRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Deletes a stored ingest pipeline
-     */
-    ActionFuture<AcknowledgedResponse> deletePipeline(DeletePipelineRequest request);
-
-    /**
-     * Deletes a stored ingest pipeline
-     */
-    DeletePipelineRequestBuilder prepareDeletePipeline(String id);
-
-    /**
-     * Returns a stored ingest pipeline
-     */
-    void getPipeline(GetPipelineRequest request, ActionListener<GetPipelineResponse> listener);
-
-    /**
-     * Returns a stored ingest pipeline
-     */
-    GetPipelineRequestBuilder prepareGetPipeline(String... ids);
-
-    /**
-     * Simulates an ingest pipeline
-     */
-    void simulatePipeline(SimulatePipelineRequest request, ActionListener<SimulatePipelineResponse> listener);
-
-    /**
-     * Simulates an ingest pipeline
-     */
-    ActionFuture<SimulatePipelineResponse> simulatePipeline(SimulatePipelineRequest request);
-
-    /**
-     * Simulates an ingest pipeline
-     */
-    SimulatePipelineRequestBuilder prepareSimulatePipeline(BytesReference source, XContentType xContentType);
-
-    /**
-     * Explain the allocation of a shard
-     */
-    void allocationExplain(ClusterAllocationExplainRequest request, ActionListener<ClusterAllocationExplainResponse> listener);
-
-    /**
-     * Explain the allocation of a shard
-     */
-    ActionFuture<ClusterAllocationExplainResponse> allocationExplain(ClusterAllocationExplainRequest request);
-
-    /**
-     * Explain the allocation of a shard
-     */
-    ClusterAllocationExplainRequestBuilder prepareAllocationExplain();
-
-    /**
-     * Store a script in the cluster state
-     */
-    PutStoredScriptRequestBuilder preparePutStoredScript();
-
-    /**
-     * Delete a script from the cluster state
-     */
-    void deleteStoredScript(DeleteStoredScriptRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Delete a script from the cluster state
-     */
-    DeleteStoredScriptRequestBuilder prepareDeleteStoredScript(String id);
-
-    /**
-     * Store a script in the cluster state
-     */
-    void putStoredScript(PutStoredScriptRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Get a script from the cluster state
-     */
-    GetStoredScriptRequestBuilder prepareGetStoredScript(String id);
-
-    /**
-     * Get a script from the cluster state
-     */
-    void getStoredScript(GetStoredScriptRequest request, ActionListener<GetStoredScriptResponse> listener);
+public class ClusterAdminClient implements ElasticsearchClient {
+
+    protected final ElasticsearchClient client;
+
+    public ClusterAdminClient(ElasticsearchClient client) {
+        this.client = client;
+    }
+
+    @Override
+    public <Request extends ActionRequest, Response extends ActionResponse> ActionFuture<Response> execute(
+        ActionType<Response> action,
+        Request request
+    ) {
+        return client.execute(action, request);
+    }
+
+    @Override
+    public <Request extends ActionRequest, Response extends ActionResponse> void execute(
+        ActionType<Response> action,
+        Request request,
+        ActionListener<Response> listener
+    ) {
+        client.execute(action, request, listener);
+    }
+
+    @Override
+    public ThreadPool threadPool() {
+        return client.threadPool();
+    }
+
+    public ActionFuture<ClusterHealthResponse> health(final ClusterHealthRequest request) {
+        return execute(TransportClusterHealthAction.TYPE, request);
+    }
+
+    public void health(final ClusterHealthRequest request, final ActionListener<ClusterHealthResponse> listener) {
+        execute(TransportClusterHealthAction.TYPE, request, listener);
+    }
+
+    public ClusterHealthRequestBuilder prepareHealth(String... indices) {
+        return new ClusterHealthRequestBuilder(this).setIndices(indices);
+    }
+
+    public ActionFuture<ClusterStateResponse> state(final ClusterStateRequest request) {
+        return execute(ClusterStateAction.INSTANCE, request);
+    }
+
+    public void state(final ClusterStateRequest request, final ActionListener<ClusterStateResponse> listener) {
+        execute(ClusterStateAction.INSTANCE, request, listener);
+    }
+
+    public ClusterStateRequestBuilder prepareState() {
+        return new ClusterStateRequestBuilder(this);
+    }
+
+    public ActionFuture<ClusterUpdateSettingsResponse> updateSettings(final ClusterUpdateSettingsRequest request) {
+        return execute(ClusterUpdateSettingsAction.INSTANCE, request);
+    }
+
+    public void updateSettings(final ClusterUpdateSettingsRequest request, final ActionListener<ClusterUpdateSettingsResponse> listener) {
+        execute(ClusterUpdateSettingsAction.INSTANCE, request, listener);
+    }
+
+    public ClusterUpdateSettingsRequestBuilder prepareUpdateSettings() {
+        return new ClusterUpdateSettingsRequestBuilder(this);
+    }
+
+    public ActionFuture<ClusterRerouteResponse> reroute(final ClusterRerouteRequest request) {
+        return execute(TransportClusterRerouteAction.TYPE, request);
+    }
+
+    public void reroute(final ClusterRerouteRequest request, final ActionListener<ClusterRerouteResponse> listener) {
+        execute(TransportClusterRerouteAction.TYPE, request, listener);
+    }
+
+    public ClusterRerouteRequestBuilder prepareReroute() {
+        return new ClusterRerouteRequestBuilder(this);
+    }
+
+    public ActionFuture<NodesInfoResponse> nodesInfo(final NodesInfoRequest request) {
+        return execute(TransportNodesInfoAction.TYPE, request);
+    }
+
+    public void nodesInfo(final NodesInfoRequest request, final ActionListener<NodesInfoResponse> listener) {
+        execute(TransportNodesInfoAction.TYPE, request, listener);
+    }
+
+    public NodesInfoRequestBuilder prepareNodesInfo(String... nodesIds) {
+        return new NodesInfoRequestBuilder(this).setNodesIds(nodesIds);
+    }
+
+    public void clusterStats(ClusterStatsRequest request, ActionListener<ClusterStatsResponse> listener) {
+        execute(TransportClusterStatsAction.TYPE, request, listener);
+    }
+
+    public ClusterStatsRequestBuilder prepareClusterStats() {
+        return new ClusterStatsRequestBuilder(this);
+    }
+
+    public ActionFuture<NodesStatsResponse> nodesStats(final NodesStatsRequest request) {
+        return execute(TransportNodesStatsAction.TYPE, request);
+    }
+
+    public void nodesStats(final NodesStatsRequest request, final ActionListener<NodesStatsResponse> listener) {
+        execute(TransportNodesStatsAction.TYPE, request, listener);
+    }
+
+    public NodesStatsRequestBuilder prepareNodesStats(String... nodesIds) {
+        return new NodesStatsRequestBuilder(this).setNodesIds(nodesIds);
+    }
+
+    public void nodesUsage(final NodesUsageRequest request, final ActionListener<NodesUsageResponse> listener) {
+        execute(TransportNodesUsageAction.TYPE, request, listener);
+    }
+
+    public ActionFuture<ListTasksResponse> listTasks(final ListTasksRequest request) {
+        return execute(TransportListTasksAction.TYPE, request);
+    }
+
+    public void listTasks(final ListTasksRequest request, final ActionListener<ListTasksResponse> listener) {
+        execute(TransportListTasksAction.TYPE, request, listener);
+    }
+
+    public ListTasksRequestBuilder prepareListTasks(String... nodesIds) {
+        return new ListTasksRequestBuilder(this).setNodesIds(nodesIds);
+    }
+
+    public ActionFuture<GetTaskResponse> getTask(final GetTaskRequest request) {
+        return execute(TransportGetTaskAction.TYPE, request);
+    }
+
+    public void getTask(final GetTaskRequest request, final ActionListener<GetTaskResponse> listener) {
+        execute(TransportGetTaskAction.TYPE, request, listener);
+    }
+
+    public GetTaskRequestBuilder prepareGetTask(String taskId) {
+        return prepareGetTask(new TaskId(taskId));
+    }
+
+    public GetTaskRequestBuilder prepareGetTask(TaskId taskId) {
+        return new GetTaskRequestBuilder(this).setTaskId(taskId);
+    }
+
+    public ActionFuture<ListTasksResponse> cancelTasks(CancelTasksRequest request) {
+        return execute(TransportCancelTasksAction.TYPE, request);
+    }
+
+    public void cancelTasks(CancelTasksRequest request, ActionListener<ListTasksResponse> listener) {
+        execute(TransportCancelTasksAction.TYPE, request, listener);
+    }
+
+    public CancelTasksRequestBuilder prepareCancelTasks(String... nodesIds) {
+        return new CancelTasksRequestBuilder(this).setNodesIds(nodesIds);
+    }
+
+    public void searchShards(final ClusterSearchShardsRequest request, final ActionListener<ClusterSearchShardsResponse> listener) {
+        execute(TransportClusterSearchShardsAction.TYPE, request, listener);
+    }
+
+    public ClusterSearchShardsRequestBuilder prepareSearchShards(String... indices) {
+        return new ClusterSearchShardsRequestBuilder(this).setIndices(indices);
+    }
+
+    public void putRepository(PutRepositoryRequest request, ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportPutRepositoryAction.TYPE, request, listener);
+    }
+
+    public PutRepositoryRequestBuilder preparePutRepository(String name) {
+        return new PutRepositoryRequestBuilder(this, name);
+    }
+
+    public void deleteRepository(DeleteRepositoryRequest request, ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportDeleteRepositoryAction.TYPE, request, listener);
+    }
+
+    public DeleteRepositoryRequestBuilder prepareDeleteRepository(String name) {
+        return new DeleteRepositoryRequestBuilder(this, name);
+    }
+
+    public void getRepositories(GetRepositoriesRequest request, ActionListener<GetRepositoriesResponse> listener) {
+        execute(GetRepositoriesAction.INSTANCE, request, listener);
+    }
+
+    public GetRepositoriesRequestBuilder prepareGetRepositories(String... name) {
+        return new GetRepositoriesRequestBuilder(this, name);
+    }
+
+    public CleanupRepositoryRequestBuilder prepareCleanupRepository(String repository) {
+        return new CleanupRepositoryRequestBuilder(this, repository);
+    }
+
+    public void cleanupRepository(CleanupRepositoryRequest request, ActionListener<CleanupRepositoryResponse> listener) {
+        execute(TransportCleanupRepositoryAction.TYPE, request, listener);
+    }
+
+    public void verifyRepository(VerifyRepositoryRequest request, ActionListener<VerifyRepositoryResponse> listener) {
+        execute(VerifyRepositoryAction.INSTANCE, request, listener);
+    }
+
+    public VerifyRepositoryRequestBuilder prepareVerifyRepository(String name) {
+        return new VerifyRepositoryRequestBuilder(this, name);
+    }
+
+    public ActionFuture<CreateSnapshotResponse> createSnapshot(CreateSnapshotRequest request) {
+        return execute(TransportCreateSnapshotAction.TYPE, request);
+    }
+
+    public void createSnapshot(CreateSnapshotRequest request, ActionListener<CreateSnapshotResponse> listener) {
+        execute(TransportCreateSnapshotAction.TYPE, request, listener);
+    }
+
+    public CreateSnapshotRequestBuilder prepareCreateSnapshot(String repository, String name) {
+        return new CreateSnapshotRequestBuilder(this, repository, name);
+    }
+
+    public CloneSnapshotRequestBuilder prepareCloneSnapshot(String repository, String source, String target) {
+        return new CloneSnapshotRequestBuilder(this, repository, source, target);
+    }
+
+    public void cloneSnapshot(CloneSnapshotRequest request, ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportCloneSnapshotAction.TYPE, request, listener);
+    }
+
+    public void getSnapshots(GetSnapshotsRequest request, ActionListener<GetSnapshotsResponse> listener) {
+        execute(TransportGetSnapshotsAction.TYPE, request, listener);
+    }
+
+    public GetSnapshotsRequestBuilder prepareGetSnapshots(String... repositories) {
+        return new GetSnapshotsRequestBuilder(this, repositories);
+    }
+
+    public void deleteSnapshot(DeleteSnapshotRequest request, ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportDeleteSnapshotAction.TYPE, request, listener);
+    }
+
+    public DeleteSnapshotRequestBuilder prepareDeleteSnapshot(String repository, String... names) {
+        return new DeleteSnapshotRequestBuilder(this, repository, names);
+    }
+
+    public ActionFuture<RestoreSnapshotResponse> restoreSnapshot(RestoreSnapshotRequest request) {
+        return execute(TransportRestoreSnapshotAction.TYPE, request);
+    }
+
+    public void restoreSnapshot(RestoreSnapshotRequest request, ActionListener<RestoreSnapshotResponse> listener) {
+        execute(TransportRestoreSnapshotAction.TYPE, request, listener);
+    }
+
+    public RestoreSnapshotRequestBuilder prepareRestoreSnapshot(String repository, String snapshot) {
+        return new RestoreSnapshotRequestBuilder(this, repository, snapshot);
+    }
+
+    public void snapshotsStatus(SnapshotsStatusRequest request, ActionListener<SnapshotsStatusResponse> listener) {
+        execute(TransportSnapshotsStatusAction.TYPE, request, listener);
+    }
+
+    public SnapshotsStatusRequestBuilder prepareSnapshotStatus(String repository) {
+        return new SnapshotsStatusRequestBuilder(this, repository);
+    }
+
+    public SnapshotsStatusRequestBuilder prepareSnapshotStatus() {
+        return new SnapshotsStatusRequestBuilder(this);
+    }
+
+    public void putPipeline(PutPipelineRequest request, ActionListener<AcknowledgedResponse> listener) {
+        execute(PutPipelineTransportAction.TYPE, request, listener);
+    }
+
+    public ActionFuture<AcknowledgedResponse> putPipeline(PutPipelineRequest request) {
+        return execute(PutPipelineTransportAction.TYPE, request);
+    }
+
+    public PutPipelineRequestBuilder preparePutPipeline(String id, BytesReference source, XContentType xContentType) {
+        return new PutPipelineRequestBuilder(this, id, source, xContentType);
+    }
+
+    public void deletePipeline(DeletePipelineRequest request, ActionListener<AcknowledgedResponse> listener) {
+        execute(DeletePipelineTransportAction.TYPE, request, listener);
+    }
+
+    public ActionFuture<AcknowledgedResponse> deletePipeline(DeletePipelineRequest request) {
+        return execute(DeletePipelineTransportAction.TYPE, request);
+    }
+
+    public DeletePipelineRequestBuilder prepareDeletePipeline(String id) {
+        return new DeletePipelineRequestBuilder(this, id);
+    }
+
+    public void getPipeline(GetPipelineRequest request, ActionListener<GetPipelineResponse> listener) {
+        execute(GetPipelineAction.INSTANCE, request, listener);
+    }
+
+    public GetPipelineRequestBuilder prepareGetPipeline(String... ids) {
+        return new GetPipelineRequestBuilder(this, ids);
+    }
+
+    public void simulatePipeline(SimulatePipelineRequest request, ActionListener<SimulatePipelineResponse> listener) {
+        execute(SimulatePipelineAction.INSTANCE, request, listener);
+    }
+
+    public ActionFuture<SimulatePipelineResponse> simulatePipeline(SimulatePipelineRequest request) {
+        return execute(SimulatePipelineAction.INSTANCE, request);
+    }
+
+    public SimulatePipelineRequestBuilder prepareSimulatePipeline(BytesReference source, XContentType xContentType) {
+        return new SimulatePipelineRequestBuilder(this, source, xContentType);
+    }
+
+    public void allocationExplain(ClusterAllocationExplainRequest request, ActionListener<ClusterAllocationExplainResponse> listener) {
+        execute(TransportClusterAllocationExplainAction.TYPE, request, listener);
+    }
+
+    public ActionFuture<ClusterAllocationExplainResponse> allocationExplain(ClusterAllocationExplainRequest request) {
+        return execute(TransportClusterAllocationExplainAction.TYPE, request);
+    }
+
+    public ClusterAllocationExplainRequestBuilder prepareAllocationExplain() {
+        return new ClusterAllocationExplainRequestBuilder(this);
+    }
+
+    public PutStoredScriptRequestBuilder preparePutStoredScript() {
+        return new PutStoredScriptRequestBuilder(this);
+    }
+
+    public void deleteStoredScript(DeleteStoredScriptRequest request, ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportDeleteStoredScriptAction.TYPE, request, listener);
+    }
+
+    public DeleteStoredScriptRequestBuilder prepareDeleteStoredScript(String id) {
+        return new DeleteStoredScriptRequestBuilder(client).setId(id);
+    }
+
+    public void putStoredScript(final PutStoredScriptRequest request, ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportPutStoredScriptAction.TYPE, request, listener);
+
+    }
+
+    public GetStoredScriptRequestBuilder prepareGetStoredScript(String id) {
+        return new GetStoredScriptRequestBuilder(this).setId(id);
+    }
+
+    public void getStoredScript(final GetStoredScriptRequest request, final ActionListener<GetStoredScriptResponse> listener) {
+        execute(GetStoredScriptAction.INSTANCE, request, listener);
+    }
 }

+ 383 - 523
server/src/main/java/org/elasticsearch/client/internal/IndicesAdminClient.java

@@ -10,9 +10,14 @@ package org.elasticsearch.client.internal;
 
 import org.elasticsearch.action.ActionFuture;
 import org.elasticsearch.action.ActionListener;
+import org.elasticsearch.action.ActionRequest;
+import org.elasticsearch.action.ActionResponse;
+import org.elasticsearch.action.ActionType;
 import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
 import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequestBuilder;
 import org.elasticsearch.action.admin.indices.alias.IndicesAliasesResponse;
+import org.elasticsearch.action.admin.indices.alias.TransportIndicesAliasesAction;
+import org.elasticsearch.action.admin.indices.alias.get.GetAliasesAction;
 import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
 import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequestBuilder;
 import org.elasticsearch.action.admin.indices.alias.get.GetAliasesResponse;
@@ -20,64 +25,88 @@ import org.elasticsearch.action.admin.indices.analyze.AnalyzeAction;
 import org.elasticsearch.action.admin.indices.analyze.AnalyzeRequestBuilder;
 import org.elasticsearch.action.admin.indices.cache.clear.ClearIndicesCacheRequest;
 import org.elasticsearch.action.admin.indices.cache.clear.ClearIndicesCacheRequestBuilder;
+import org.elasticsearch.action.admin.indices.cache.clear.TransportClearIndicesCacheAction;
 import org.elasticsearch.action.admin.indices.close.CloseIndexRequest;
 import org.elasticsearch.action.admin.indices.close.CloseIndexRequestBuilder;
 import org.elasticsearch.action.admin.indices.close.CloseIndexResponse;
+import org.elasticsearch.action.admin.indices.close.TransportCloseIndexAction;
 import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
 import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
 import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
+import org.elasticsearch.action.admin.indices.create.TransportCreateIndexAction;
 import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
 import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequestBuilder;
+import org.elasticsearch.action.admin.indices.delete.TransportDeleteIndexAction;
+import org.elasticsearch.action.admin.indices.flush.FlushAction;
 import org.elasticsearch.action.admin.indices.flush.FlushRequest;
 import org.elasticsearch.action.admin.indices.flush.FlushRequestBuilder;
+import org.elasticsearch.action.admin.indices.forcemerge.ForceMergeAction;
 import org.elasticsearch.action.admin.indices.forcemerge.ForceMergeRequest;
 import org.elasticsearch.action.admin.indices.forcemerge.ForceMergeRequestBuilder;
+import org.elasticsearch.action.admin.indices.get.GetIndexAction;
 import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
 import org.elasticsearch.action.admin.indices.get.GetIndexRequestBuilder;
 import org.elasticsearch.action.admin.indices.get.GetIndexResponse;
+import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsAction;
 import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsRequest;
 import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsRequestBuilder;
 import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsResponse;
+import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsAction;
 import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequest;
 import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequestBuilder;
 import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsResponse;
 import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
 import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder;
+import org.elasticsearch.action.admin.indices.mapping.put.TransportPutMappingAction;
+import org.elasticsearch.action.admin.indices.open.OpenIndexAction;
 import org.elasticsearch.action.admin.indices.open.OpenIndexRequest;
 import org.elasticsearch.action.admin.indices.open.OpenIndexRequestBuilder;
 import org.elasticsearch.action.admin.indices.open.OpenIndexResponse;
 import org.elasticsearch.action.admin.indices.readonly.AddIndexBlockRequest;
 import org.elasticsearch.action.admin.indices.readonly.AddIndexBlockRequestBuilder;
 import org.elasticsearch.action.admin.indices.readonly.AddIndexBlockResponse;
+import org.elasticsearch.action.admin.indices.readonly.TransportAddIndexBlockAction;
+import org.elasticsearch.action.admin.indices.recovery.RecoveryAction;
 import org.elasticsearch.action.admin.indices.recovery.RecoveryRequest;
 import org.elasticsearch.action.admin.indices.recovery.RecoveryRequestBuilder;
 import org.elasticsearch.action.admin.indices.recovery.RecoveryResponse;
+import org.elasticsearch.action.admin.indices.refresh.RefreshAction;
 import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
 import org.elasticsearch.action.admin.indices.refresh.RefreshRequestBuilder;
 import org.elasticsearch.action.admin.indices.resolve.ResolveIndexAction;
+import org.elasticsearch.action.admin.indices.rollover.RolloverAction;
 import org.elasticsearch.action.admin.indices.rollover.RolloverRequest;
 import org.elasticsearch.action.admin.indices.rollover.RolloverRequestBuilder;
 import org.elasticsearch.action.admin.indices.rollover.RolloverResponse;
 import org.elasticsearch.action.admin.indices.segments.IndicesSegmentResponse;
+import org.elasticsearch.action.admin.indices.segments.IndicesSegmentsAction;
 import org.elasticsearch.action.admin.indices.segments.IndicesSegmentsRequest;
 import org.elasticsearch.action.admin.indices.segments.IndicesSegmentsRequestBuilder;
+import org.elasticsearch.action.admin.indices.settings.get.GetSettingsAction;
 import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest;
 import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequestBuilder;
 import org.elasticsearch.action.admin.indices.settings.get.GetSettingsResponse;
+import org.elasticsearch.action.admin.indices.settings.put.TransportUpdateSettingsAction;
 import org.elasticsearch.action.admin.indices.settings.put.UpdateSettingsRequest;
 import org.elasticsearch.action.admin.indices.settings.put.UpdateSettingsRequestBuilder;
+import org.elasticsearch.action.admin.indices.shrink.ResizeAction;
 import org.elasticsearch.action.admin.indices.shrink.ResizeRequest;
 import org.elasticsearch.action.admin.indices.shrink.ResizeRequestBuilder;
+import org.elasticsearch.action.admin.indices.stats.IndicesStatsAction;
 import org.elasticsearch.action.admin.indices.stats.IndicesStatsRequest;
 import org.elasticsearch.action.admin.indices.stats.IndicesStatsRequestBuilder;
 import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse;
 import org.elasticsearch.action.admin.indices.template.delete.DeleteIndexTemplateRequest;
 import org.elasticsearch.action.admin.indices.template.delete.DeleteIndexTemplateRequestBuilder;
+import org.elasticsearch.action.admin.indices.template.delete.TransportDeleteIndexTemplateAction;
+import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesAction;
 import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesRequest;
 import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesRequestBuilder;
 import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesResponse;
 import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequest;
 import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequestBuilder;
+import org.elasticsearch.action.admin.indices.template.put.TransportPutIndexTemplateAction;
+import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryAction;
 import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryRequest;
 import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryRequestBuilder;
 import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryResponse;
@@ -85,533 +114,364 @@ import org.elasticsearch.action.support.broadcast.BroadcastResponse;
 import org.elasticsearch.action.support.master.AcknowledgedResponse;
 import org.elasticsearch.cluster.metadata.IndexMetadata.APIBlock;
 import org.elasticsearch.core.Nullable;
+import org.elasticsearch.threadpool.ThreadPool;
 
 /**
  * Administrative actions/operations against indices.
  *
  * @see AdminClient#indices()
  */
-public interface IndicesAdminClient extends ElasticsearchClient {
-
-    /**
-     * Indices stats.
-     */
-    ActionFuture<IndicesStatsResponse> stats(IndicesStatsRequest request);
-
-    /**
-     * Indices stats.
-     */
-    void stats(IndicesStatsRequest request, ActionListener<IndicesStatsResponse> listener);
-
-    /**
-     * Indices stats.
-     */
-    IndicesStatsRequestBuilder prepareStats(String... indices);
-
-    /**
-     * Indices recoveries
-     */
-    ActionFuture<RecoveryResponse> recoveries(RecoveryRequest request);
-
-    /**
-     *Indices recoveries
-     */
-    void recoveries(RecoveryRequest request, ActionListener<RecoveryResponse> listener);
-
-    /**
-     * Indices recoveries
-     */
-    RecoveryRequestBuilder prepareRecoveries(String... indices);
-
-    /**
-     * The segments of one or more indices.
-     *
-     * @param request The indices segments request
-     * @return The result future
-     */
-    ActionFuture<IndicesSegmentResponse> segments(IndicesSegmentsRequest request);
-
-    /**
-     * The segments of one or more indices.
-     *
-     * @param request  The indices segments request
-     * @param listener A listener to be notified with a result
-     */
-    void segments(IndicesSegmentsRequest request, ActionListener<IndicesSegmentResponse> listener);
-
-    /**
-     * The segments of one or more indices.
-     */
-    IndicesSegmentsRequestBuilder prepareSegments(String... indices);
-
-    /**
-     * Creates an index using an explicit request allowing to specify the settings of the index.
-     *
-     * @param request The create index request
-     * @return The result future
-     */
-    ActionFuture<CreateIndexResponse> create(CreateIndexRequest request);
-
-    /**
-     * Creates an index using an explicit request allowing to specify the settings of the index.
-     *
-     * @param request  The create index request
-     * @param listener A listener to be notified with a result
-     */
-    void create(CreateIndexRequest request, ActionListener<CreateIndexResponse> listener);
-
-    /**
-     * Creates an index using an explicit request allowing to specify the settings of the index.
-     *
-     * @param index The index name to create
-     */
-    CreateIndexRequestBuilder prepareCreate(String index);
-
-    /**
-     * Deletes an index based on the index name.
-     *
-     * @param request The delete index request
-     * @return The result future
-     */
-    ActionFuture<AcknowledgedResponse> delete(DeleteIndexRequest request);
-
-    /**
-     * Deletes an index based on the index name.
-     *
-     * @param request  The delete index request
-     * @param listener A listener to be notified with a result
-     */
-    void delete(DeleteIndexRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Deletes an index based on the index name.
-     *
-     * @param indices The indices to delete. Use "_all" to delete all indices.
-     */
-    DeleteIndexRequestBuilder prepareDelete(String... indices);
-
-    /**
-     * Closes an index based on the index name.
-     *
-     * @param request The close index request
-     * @return The result future
-     */
-    ActionFuture<CloseIndexResponse> close(CloseIndexRequest request);
-
-    /**
-     * Closes an index based on the index name.
-     *
-     * @param request  The close index request
-     * @param listener A listener to be notified with a result
-     */
-    void close(CloseIndexRequest request, ActionListener<CloseIndexResponse> listener);
-
-    /**
-     * Closes one or more indices based on their index name.
-     *
-     * @param indices The name of the indices to close
-     */
-    CloseIndexRequestBuilder prepareClose(String... indices);
-
-    /**
-     * Open an index based on the index name.
-     *
-     * @param request The open index request
-     * @return The result future
-     */
-    ActionFuture<OpenIndexResponse> open(OpenIndexRequest request);
-
-    /**
-     * Open an index based on the index name.
-     *
-     * @param request  The open index request
-     * @param listener A listener to be notified with a result
-     */
-    void open(OpenIndexRequest request, ActionListener<OpenIndexResponse> listener);
-
-    /**
-     * Adds a block to an index
-     *
-     * @param block   The block to add
-     * @param indices The name of the indices to add the block to
-     */
-    AddIndexBlockRequestBuilder prepareAddBlock(APIBlock block, String... indices);
-
-    /**
-     * Adds a block to an index
-     *
-     * @param request  The add index block request
-     * @param listener A listener to be notified with a result
-     */
-    void addBlock(AddIndexBlockRequest request, ActionListener<AddIndexBlockResponse> listener);
-
-    /**
-     * Opens one or more indices based on their index name.
-     *
-     * @param indices The name of the indices to open
-     */
-    OpenIndexRequestBuilder prepareOpen(String... indices);
-
-    /**
-     * Explicitly refresh one or more indices (making the content indexed since the last refresh searchable).
-     *
-     * @param request The refresh request
-     * @return The result future
-     */
-    ActionFuture<BroadcastResponse> refresh(RefreshRequest request);
-
-    /**
-     * Explicitly refresh one or more indices (making the content indexed since the last refresh searchable).
-     *
-     * @param request  The refresh request
-     * @param listener A listener to be notified with a result
-     */
-    void refresh(RefreshRequest request, ActionListener<BroadcastResponse> listener);
-
-    /**
-     * Explicitly refresh one or more indices (making the content indexed since the last refresh searchable).
-     */
-    RefreshRequestBuilder prepareRefresh(String... indices);
-
-    /**
-     * Explicitly flush one or more indices (releasing memory from the node).
-     *
-     * @param request The flush request
-     * @return A result future
-     */
-    ActionFuture<BroadcastResponse> flush(FlushRequest request);
-
-    /**
-     * Explicitly flush one or more indices (releasing memory from the node).
-     *
-     * @param request  The flush request
-     * @param listener A listener to be notified with a result
-     */
-    void flush(FlushRequest request, ActionListener<BroadcastResponse> listener);
-
-    /**
-     * Explicitly flush one or more indices (releasing memory from the node).
-     */
-    FlushRequestBuilder prepareFlush(String... indices);
-
-    /**
-     * Explicitly force merge one or more indices into a the number of segments.
-     *
-     * @param request The optimize request
-     * @return A result future
-     */
-    ActionFuture<BroadcastResponse> forceMerge(ForceMergeRequest request);
-
-    /**
-     * Explicitly force merge one or more indices into a the number of segments.
-     *
-     * @param request  The force merge request
-     * @param listener A listener to be notified with a result
-     */
-    void forceMerge(ForceMergeRequest request, ActionListener<BroadcastResponse> listener);
-
-    /**
-     * Explicitly force merge one or more indices into a the number of segments.
-     */
-    ForceMergeRequestBuilder prepareForceMerge(String... indices);
-
-    /**
-     * Get the complete mappings of one or more types
-     */
-    void getMappings(GetMappingsRequest request, ActionListener<GetMappingsResponse> listener);
-
-    /**
-     * Get the complete mappings of one or more types
-     */
-    ActionFuture<GetMappingsResponse> getMappings(GetMappingsRequest request);
-
-    /**
-     * Get the complete mappings of one or more types
-     */
-    GetMappingsRequestBuilder prepareGetMappings(String... indices);
-
-    /**
-     * Get the mappings of specific fields
-     */
-    void getFieldMappings(GetFieldMappingsRequest request, ActionListener<GetFieldMappingsResponse> listener);
-
-    /**
-     * Get the mappings of specific fields
-     */
-    GetFieldMappingsRequestBuilder prepareGetFieldMappings(String... indices);
-
-    /**
-     * Get the mappings of specific fields
-     */
-    ActionFuture<GetFieldMappingsResponse> getFieldMappings(GetFieldMappingsRequest request);
-
-    /**
-     * Add mapping definition for a type into one or more indices.
-     *
-     * @param request The create mapping request
-     * @return A result future
-     */
-    ActionFuture<AcknowledgedResponse> putMapping(PutMappingRequest request);
-
-    /**
-     * Add mapping definition for a type into one or more indices.
-     *
-     * @param request  The create mapping request
-     * @param listener A listener to be notified with a result
-     */
-    void putMapping(PutMappingRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Add mapping definition for a type into one or more indices.
-     */
-    PutMappingRequestBuilder preparePutMapping(String... indices);
-
-    /**
-     * Allows to add/remove aliases from indices.
-     *
-     * @param request The index aliases request
-     * @return The result future
-     */
-    ActionFuture<IndicesAliasesResponse> aliases(IndicesAliasesRequest request);
-
-    /**
-     * Allows to add/remove aliases from indices.
-     *
-     * @param request  The index aliases request
-     * @param listener A listener to be notified with a result
-     */
-    void aliases(IndicesAliasesRequest request, ActionListener<IndicesAliasesResponse> listener);
-
-    /**
-     * Allows to add/remove aliases from indices.
-     */
-    IndicesAliasesRequestBuilder prepareAliases();
-
-    /**
-     * Get specific index aliases that exists in particular indices and / or by name.
-     *
-     * @param request The result future
-     */
-    ActionFuture<GetAliasesResponse> getAliases(GetAliasesRequest request);
-
-    /**
-     * Get specific index aliases that exists in particular indices and / or by name.
-     *
-     * @param request  The index aliases request
-     * @param listener A listener to be notified with a result
-     */
-    void getAliases(GetAliasesRequest request, ActionListener<GetAliasesResponse> listener);
-
-    /**
-     * Get specific index aliases that exists in particular indices and / or by name.
-     */
-    GetAliasesRequestBuilder prepareGetAliases(String... aliases);
-
-    /**
-     * Get index metadata for particular indices.
-     *
-     * @param request The result future
-     */
-    ActionFuture<GetIndexResponse> getIndex(GetIndexRequest request);
-
-    /**
-     * Get index metadata for particular indices.
-     *
-     * @param request  The index aliases request
-     * @param listener A listener to be notified with a result
-     */
-    void getIndex(GetIndexRequest request, ActionListener<GetIndexResponse> listener);
-
-    /**
-     * Get index metadata for particular indices.
-     */
-    GetIndexRequestBuilder prepareGetIndex();
-
-    /**
-     * Clear indices cache.
-     *
-     * @param request The clear indices cache request
-     * @return The result future
-     */
-    ActionFuture<BroadcastResponse> clearCache(ClearIndicesCacheRequest request);
-
-    /**
-     * Clear indices cache.
-     *
-     * @param request  The clear indices cache request
-     * @param listener A listener to be notified with a result
-     */
-    void clearCache(ClearIndicesCacheRequest request, ActionListener<BroadcastResponse> listener);
-
-    /**
-     * Clear indices cache.
-     */
-    ClearIndicesCacheRequestBuilder prepareClearCache(String... indices);
-
-    /**
-     * Updates settings of one or more indices.
-     *
-     * @param request the update settings request
-     * @return The result future
-     */
-    ActionFuture<AcknowledgedResponse> updateSettings(UpdateSettingsRequest request);
-
-    /**
-     * Updates settings of one or more indices.
-     *
-     * @param request  the update settings request
-     * @param listener A listener to be notified with the response
-     */
-    void updateSettings(UpdateSettingsRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Update indices settings.
-     */
-    UpdateSettingsRequestBuilder prepareUpdateSettings(String... indices);
-
-    /**
-     * Analyze text under the provided index.
-     */
-    ActionFuture<AnalyzeAction.Response> analyze(AnalyzeAction.Request request);
-
-    /**
-     * Analyze text under the provided index.
-     */
-    void analyze(AnalyzeAction.Request request, ActionListener<AnalyzeAction.Response> listener);
-
-    /**
-     * Analyze text under the provided index.
-     *
-     * @param index The index name
-     * @param text  The text to analyze
-     */
-    AnalyzeRequestBuilder prepareAnalyze(@Nullable String index, String text);
-
-    /**
-     * Analyze text.
-     *
-     * @param text The text to analyze
-     */
-    AnalyzeRequestBuilder prepareAnalyze(String text);
-
-    /**
-     * Analyze text/texts.
-     *
-     */
-    AnalyzeRequestBuilder prepareAnalyze();
-
-    /**
-     * Puts an index template.
-     */
-    ActionFuture<AcknowledgedResponse> putTemplate(PutIndexTemplateRequest request);
-
-    /**
-     * Puts an index template.
-     */
-    void putTemplate(PutIndexTemplateRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Puts an index template.
-     *
-     * @param name The name of the template.
-     */
-    PutIndexTemplateRequestBuilder preparePutTemplate(String name);
-
-    /**
-     * Deletes an index template.
-     */
-    void deleteTemplate(DeleteIndexTemplateRequest request, ActionListener<AcknowledgedResponse> listener);
-
-    /**
-     * Deletes an index template.
-     *
-     * @param name The name of the template.
-     */
-    DeleteIndexTemplateRequestBuilder prepareDeleteTemplate(String name);
-
-    /**
-     * Gets an index template.
-     */
-    void getTemplates(GetIndexTemplatesRequest request, ActionListener<GetIndexTemplatesResponse> listener);
-
-    /**
-     * Gets an index template (optional).
-     */
-    GetIndexTemplatesRequestBuilder prepareGetTemplates(String... name);
-
-    /**
-     * Validate a query for correctness.
-     *
-     * @param request The count request
-     * @return The result future
-     */
-    ActionFuture<ValidateQueryResponse> validateQuery(ValidateQueryRequest request);
-
-    /**
-     * Validate a query for correctness.
-     *
-     * @param request  The count request
-     * @param listener A listener to be notified of the result
-     */
-    void validateQuery(ValidateQueryRequest request, ActionListener<ValidateQueryResponse> listener);
-
-    /**
-     * Validate a query for correctness.
-     */
-    ValidateQueryRequestBuilder prepareValidateQuery(String... indices);
-
-    /**
-     * Executed a per index settings get request and returns the settings for the indices specified.
-     * Note: this is a per index request and will not include settings that are set on the cluster
-     * level. This request is not exhaustive, it will not return default values for setting.
-     */
-    void getSettings(GetSettingsRequest request, ActionListener<GetSettingsResponse> listener);
-
-    /**
-     * Executed a per index settings get request.
-     * @see #getSettings(org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest)
-     */
-    ActionFuture<GetSettingsResponse> getSettings(GetSettingsRequest request);
-
-    /**
-     * Returns a builder for a per index settings get request.
-     * @param indices the indices to fetch the setting for.
-     * @see #getSettings(org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest)
-     */
-    GetSettingsRequestBuilder prepareGetSettings(String... indices);
-
-    /**
-     * Resize an index using an explicit request allowing to specify the settings, mappings and aliases of the target index of the index.
-     */
-    ResizeRequestBuilder prepareResizeIndex(String sourceIndex, String targetIndex);
-
-    /**
-     * Shrinks an index using an explicit request allowing to specify the settings, mappings and aliases of the target index of the index.
-     */
-    void resizeIndex(ResizeRequest request, ActionListener<CreateIndexResponse> listener);
-
-    /**
-     * Swaps the index pointed to by an alias given all provided conditions are satisfied
-     */
-    RolloverRequestBuilder prepareRolloverIndex(String sourceAlias);
-
-    /**
-     * Swaps the index pointed to by an alias given all provided conditions are satisfied
-     */
-    ActionFuture<RolloverResponse> rolloverIndex(RolloverRequest request);
-
-    /**
-     * Swaps the index pointed to by an alias given all provided conditions are satisfied
-     */
-    void rolloverIndex(RolloverRequest request, ActionListener<RolloverResponse> listener);
-
-    /**
-     * Resolves names and wildcard expressions to indices, aliases, and data streams
-     */
-    void resolveIndex(ResolveIndexAction.Request request, ActionListener<ResolveIndexAction.Response> listener);
-
-    /**
-     * Resolves names and wildcard expressions to indices, aliases, and data streams
-     */
-    ActionFuture<ResolveIndexAction.Response> resolveIndex(ResolveIndexAction.Request request);
+public class IndicesAdminClient implements ElasticsearchClient {
+
+    protected final ElasticsearchClient client;
+
+    public IndicesAdminClient(ElasticsearchClient client) {
+        this.client = client;
+    }
+
+    public ActionFuture<IndicesStatsResponse> stats(final IndicesStatsRequest request) {
+        return execute(IndicesStatsAction.INSTANCE, request);
+    }
+
+    public void stats(final IndicesStatsRequest request, final ActionListener<IndicesStatsResponse> listener) {
+        execute(IndicesStatsAction.INSTANCE, request, listener);
+    }
+
+    public IndicesStatsRequestBuilder prepareStats(String... indices) {
+        return new IndicesStatsRequestBuilder(this).setIndices(indices);
+    }
+
+    public ActionFuture<RecoveryResponse> recoveries(final RecoveryRequest request) {
+        return execute(RecoveryAction.INSTANCE, request);
+    }
+
+    public void recoveries(final RecoveryRequest request, final ActionListener<RecoveryResponse> listener) {
+        execute(RecoveryAction.INSTANCE, request, listener);
+    }
+
+    public RecoveryRequestBuilder prepareRecoveries(String... indices) {
+        return new RecoveryRequestBuilder(this).setIndices(indices);
+    }
+
+    public ActionFuture<IndicesSegmentResponse> segments(final IndicesSegmentsRequest request) {
+        return execute(IndicesSegmentsAction.INSTANCE, request);
+    }
+
+    public void segments(final IndicesSegmentsRequest request, final ActionListener<IndicesSegmentResponse> listener) {
+        execute(IndicesSegmentsAction.INSTANCE, request, listener);
+    }
+
+    public IndicesSegmentsRequestBuilder prepareSegments(String... indices) {
+        return new IndicesSegmentsRequestBuilder(this).setIndices(indices);
+    }
+
+    public ActionFuture<CreateIndexResponse> create(final CreateIndexRequest request) {
+        return execute(TransportCreateIndexAction.TYPE, request);
+    }
+
+    public void create(final CreateIndexRequest request, final ActionListener<CreateIndexResponse> listener) {
+        execute(TransportCreateIndexAction.TYPE, request, listener);
+    }
+
+    public CreateIndexRequestBuilder prepareCreate(String index) {
+        return new CreateIndexRequestBuilder(this, index);
+    }
+
+    public ActionFuture<AcknowledgedResponse> delete(final DeleteIndexRequest request) {
+        return execute(TransportDeleteIndexAction.TYPE, request);
+    }
+
+    public void delete(final DeleteIndexRequest request, final ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportDeleteIndexAction.TYPE, request, listener);
+    }
+
+    public DeleteIndexRequestBuilder prepareDelete(String... indices) {
+        return new DeleteIndexRequestBuilder(this, indices);
+    }
+
+    public ActionFuture<CloseIndexResponse> close(final CloseIndexRequest request) {
+        return execute(TransportCloseIndexAction.TYPE, request);
+    }
+
+    public void close(final CloseIndexRequest request, final ActionListener<CloseIndexResponse> listener) {
+        execute(TransportCloseIndexAction.TYPE, request, listener);
+    }
+
+    public CloseIndexRequestBuilder prepareClose(String... indices) {
+        return new CloseIndexRequestBuilder(this, indices);
+    }
+
+    public ActionFuture<OpenIndexResponse> open(final OpenIndexRequest request) {
+        return execute(OpenIndexAction.INSTANCE, request);
+    }
+
+    public void open(final OpenIndexRequest request, final ActionListener<OpenIndexResponse> listener) {
+        execute(OpenIndexAction.INSTANCE, request, listener);
+    }
+
+    public AddIndexBlockRequestBuilder prepareAddBlock(APIBlock block, String... indices) {
+        return new AddIndexBlockRequestBuilder(this, block, indices);
+    }
+
+    public void addBlock(AddIndexBlockRequest request, ActionListener<AddIndexBlockResponse> listener) {
+        execute(TransportAddIndexBlockAction.TYPE, request, listener);
+    }
+
+    public OpenIndexRequestBuilder prepareOpen(String... indices) {
+        return new OpenIndexRequestBuilder(this, indices);
+    }
+
+    public ActionFuture<BroadcastResponse> refresh(final RefreshRequest request) {
+        return execute(RefreshAction.INSTANCE, request);
+    }
+
+    public void refresh(final RefreshRequest request, final ActionListener<BroadcastResponse> listener) {
+        execute(RefreshAction.INSTANCE, request, listener);
+    }
+
+    public RefreshRequestBuilder prepareRefresh(String... indices) {
+        return new RefreshRequestBuilder(this).setIndices(indices);
+    }
+
+    public ActionFuture<BroadcastResponse> flush(final FlushRequest request) {
+        return execute(FlushAction.INSTANCE, request);
+    }
+
+    public void flush(final FlushRequest request, final ActionListener<BroadcastResponse> listener) {
+        execute(FlushAction.INSTANCE, request, listener);
+    }
+
+    public FlushRequestBuilder prepareFlush(String... indices) {
+        return new FlushRequestBuilder(this).setIndices(indices);
+    }
+
+    public ActionFuture<BroadcastResponse> forceMerge(final ForceMergeRequest request) {
+        return execute(ForceMergeAction.INSTANCE, request);
+    }
+
+    public void forceMerge(final ForceMergeRequest request, final ActionListener<BroadcastResponse> listener) {
+        execute(ForceMergeAction.INSTANCE, request, listener);
+    }
+
+    public ForceMergeRequestBuilder prepareForceMerge(String... indices) {
+        return new ForceMergeRequestBuilder(this).setIndices(indices);
+    }
+
+    public void getMappings(GetMappingsRequest request, ActionListener<GetMappingsResponse> listener) {
+        execute(GetMappingsAction.INSTANCE, request, listener);
+    }
+
+    public ActionFuture<GetMappingsResponse> getMappings(GetMappingsRequest request) {
+        return execute(GetMappingsAction.INSTANCE, request);
+    }
+
+    public GetMappingsRequestBuilder prepareGetMappings(String... indices) {
+        return new GetMappingsRequestBuilder(this, indices);
+    }
+
+    public void getFieldMappings(GetFieldMappingsRequest request, ActionListener<GetFieldMappingsResponse> listener) {
+        execute(GetFieldMappingsAction.INSTANCE, request, listener);
+    }
+
+    public GetFieldMappingsRequestBuilder prepareGetFieldMappings(String... indices) {
+        return new GetFieldMappingsRequestBuilder(this, indices);
+    }
+
+    public ActionFuture<GetFieldMappingsResponse> getFieldMappings(GetFieldMappingsRequest request) {
+        return execute(GetFieldMappingsAction.INSTANCE, request);
+    }
+
+    public ActionFuture<AcknowledgedResponse> putMapping(final PutMappingRequest request) {
+        return execute(TransportPutMappingAction.TYPE, request);
+    }
+
+    public void putMapping(final PutMappingRequest request, final ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportPutMappingAction.TYPE, request, listener);
+    }
+
+    public PutMappingRequestBuilder preparePutMapping(String... indices) {
+        return new PutMappingRequestBuilder(this).setIndices(indices);
+    }
+
+    @Override
+    public <Request extends ActionRequest, Response extends ActionResponse> ActionFuture<Response> execute(
+        ActionType<Response> action,
+        Request request
+    ) {
+        return client.execute(action, request);
+    }
+
+    @Override
+    public <Request extends ActionRequest, Response extends ActionResponse> void execute(
+        ActionType<Response> action,
+        Request request,
+        ActionListener<Response> listener
+    ) {
+        client.execute(action, request, listener);
+    }
+
+    @Override
+    public ThreadPool threadPool() {
+        return client.threadPool();
+    }
+
+    public ActionFuture<IndicesAliasesResponse> aliases(final IndicesAliasesRequest request) {
+        return execute(TransportIndicesAliasesAction.TYPE, request);
+    }
+
+    public void aliases(final IndicesAliasesRequest request, final ActionListener<IndicesAliasesResponse> listener) {
+        execute(TransportIndicesAliasesAction.TYPE, request, listener);
+    }
+
+    public IndicesAliasesRequestBuilder prepareAliases() {
+        return new IndicesAliasesRequestBuilder(this);
+    }
+
+    public ActionFuture<GetAliasesResponse> getAliases(GetAliasesRequest request) {
+        return execute(GetAliasesAction.INSTANCE, request);
+    }
+
+    public void getAliases(GetAliasesRequest request, ActionListener<GetAliasesResponse> listener) {
+        execute(GetAliasesAction.INSTANCE, request, listener);
+    }
+
+    public GetAliasesRequestBuilder prepareGetAliases(String... aliases) {
+        return new GetAliasesRequestBuilder(this, aliases);
+    }
+
+    public ActionFuture<GetIndexResponse> getIndex(GetIndexRequest request) {
+        return execute(GetIndexAction.INSTANCE, request);
+    }
+
+    public void getIndex(GetIndexRequest request, ActionListener<GetIndexResponse> listener) {
+        execute(GetIndexAction.INSTANCE, request, listener);
+    }
+
+    public GetIndexRequestBuilder prepareGetIndex() {
+        return new GetIndexRequestBuilder(this);
+    }
+
+    public ActionFuture<BroadcastResponse> clearCache(final ClearIndicesCacheRequest request) {
+        return execute(TransportClearIndicesCacheAction.TYPE, request);
+    }
+
+    public void clearCache(final ClearIndicesCacheRequest request, final ActionListener<BroadcastResponse> listener) {
+        execute(TransportClearIndicesCacheAction.TYPE, request, listener);
+    }
+
+    public ClearIndicesCacheRequestBuilder prepareClearCache(String... indices) {
+        return new ClearIndicesCacheRequestBuilder(this).setIndices(indices);
+    }
+
+    public ActionFuture<AcknowledgedResponse> updateSettings(final UpdateSettingsRequest request) {
+        return execute(TransportUpdateSettingsAction.TYPE, request);
+    }
+
+    public void updateSettings(final UpdateSettingsRequest request, final ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportUpdateSettingsAction.TYPE, request, listener);
+    }
+
+    public UpdateSettingsRequestBuilder prepareUpdateSettings(String... indices) {
+        return new UpdateSettingsRequestBuilder(this).setIndices(indices);
+    }
+
+    public ActionFuture<AnalyzeAction.Response> analyze(final AnalyzeAction.Request request) {
+        return execute(AnalyzeAction.INSTANCE, request);
+    }
+
+    public void analyze(final AnalyzeAction.Request request, final ActionListener<AnalyzeAction.Response> listener) {
+        execute(AnalyzeAction.INSTANCE, request, listener);
+    }
+
+    public AnalyzeRequestBuilder prepareAnalyze(@Nullable String index, String text) {
+        return new AnalyzeRequestBuilder(this, index, text);
+    }
+
+    public AnalyzeRequestBuilder prepareAnalyze(String text) {
+        return new AnalyzeRequestBuilder(this, null, text);
+    }
+
+    public AnalyzeRequestBuilder prepareAnalyze() {
+        return new AnalyzeRequestBuilder(this);
+    }
+
+    public ActionFuture<AcknowledgedResponse> putTemplate(final PutIndexTemplateRequest request) {
+        return execute(TransportPutIndexTemplateAction.TYPE, request);
+    }
+
+    public void putTemplate(final PutIndexTemplateRequest request, final ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportPutIndexTemplateAction.TYPE, request, listener);
+    }
+
+    public PutIndexTemplateRequestBuilder preparePutTemplate(String name) {
+        return new PutIndexTemplateRequestBuilder(this, name);
+    }
+
+    public void deleteTemplate(final DeleteIndexTemplateRequest request, final ActionListener<AcknowledgedResponse> listener) {
+        execute(TransportDeleteIndexTemplateAction.TYPE, request, listener);
+    }
+
+    public DeleteIndexTemplateRequestBuilder prepareDeleteTemplate(String name) {
+        return new DeleteIndexTemplateRequestBuilder(this, name);
+    }
+
+    public void getTemplates(final GetIndexTemplatesRequest request, final ActionListener<GetIndexTemplatesResponse> listener) {
+        execute(GetIndexTemplatesAction.INSTANCE, request, listener);
+    }
+
+    public GetIndexTemplatesRequestBuilder prepareGetTemplates(String... names) {
+        return new GetIndexTemplatesRequestBuilder(this, names);
+    }
+
+    public ActionFuture<ValidateQueryResponse> validateQuery(final ValidateQueryRequest request) {
+        return execute(ValidateQueryAction.INSTANCE, request);
+    }
+
+    public void validateQuery(final ValidateQueryRequest request, final ActionListener<ValidateQueryResponse> listener) {
+        execute(ValidateQueryAction.INSTANCE, request, listener);
+    }
+
+    public ValidateQueryRequestBuilder prepareValidateQuery(String... indices) {
+        return new ValidateQueryRequestBuilder(this).setIndices(indices);
+    }
+
+    public void getSettings(GetSettingsRequest request, ActionListener<GetSettingsResponse> listener) {
+        execute(GetSettingsAction.INSTANCE, request, listener);
+    }
+
+    public ActionFuture<GetSettingsResponse> getSettings(GetSettingsRequest request) {
+        return execute(GetSettingsAction.INSTANCE, request);
+    }
+
+    public GetSettingsRequestBuilder prepareGetSettings(String... indices) {
+        return new GetSettingsRequestBuilder(this, indices);
+    }
+
+    public ResizeRequestBuilder prepareResizeIndex(String sourceIndex, String targetIndex) {
+        return new ResizeRequestBuilder(this).setSourceIndex(sourceIndex).setTargetIndex(new CreateIndexRequest(targetIndex));
+    }
+
+    public void resizeIndex(ResizeRequest request, ActionListener<CreateIndexResponse> listener) {
+        execute(ResizeAction.INSTANCE, request, listener);
+    }
+
+    public RolloverRequestBuilder prepareRolloverIndex(String alias) {
+        return new RolloverRequestBuilder(this).setRolloverTarget(alias);
+    }
+
+    public ActionFuture<RolloverResponse> rolloverIndex(RolloverRequest request) {
+        return execute(RolloverAction.INSTANCE, request);
+    }
+
+    public void rolloverIndex(RolloverRequest request, ActionListener<RolloverResponse> listener) {
+        execute(RolloverAction.INSTANCE, request, listener);
+    }
+
+    public void resolveIndex(ResolveIndexAction.Request request, ActionListener<ResolveIndexAction.Response> listener) {
+        execute(ResolveIndexAction.INSTANCE, request, listener);
+    }
+
+    public ActionFuture<ResolveIndexAction.Response> resolveIndex(ResolveIndexAction.Request request) {
+        return execute(ResolveIndexAction.INSTANCE, request);
+    }
 }

+ 2 - 1104
server/src/main/java/org/elasticsearch/client/internal/support/AbstractClient.java

@@ -16,203 +16,6 @@ import org.elasticsearch.action.ActionRequest;
 import org.elasticsearch.action.ActionResponse;
 import org.elasticsearch.action.ActionType;
 import org.elasticsearch.action.DocWriteResponse;
-import org.elasticsearch.action.admin.cluster.allocation.ClusterAllocationExplainRequest;
-import org.elasticsearch.action.admin.cluster.allocation.ClusterAllocationExplainRequestBuilder;
-import org.elasticsearch.action.admin.cluster.allocation.ClusterAllocationExplainResponse;
-import org.elasticsearch.action.admin.cluster.allocation.TransportClusterAllocationExplainAction;
-import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
-import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequestBuilder;
-import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
-import org.elasticsearch.action.admin.cluster.health.TransportClusterHealthAction;
-import org.elasticsearch.action.admin.cluster.node.info.NodesInfoRequest;
-import org.elasticsearch.action.admin.cluster.node.info.NodesInfoRequestBuilder;
-import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
-import org.elasticsearch.action.admin.cluster.node.info.TransportNodesInfoAction;
-import org.elasticsearch.action.admin.cluster.node.stats.NodesStatsRequest;
-import org.elasticsearch.action.admin.cluster.node.stats.NodesStatsRequestBuilder;
-import org.elasticsearch.action.admin.cluster.node.stats.NodesStatsResponse;
-import org.elasticsearch.action.admin.cluster.node.stats.TransportNodesStatsAction;
-import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequest;
-import org.elasticsearch.action.admin.cluster.node.tasks.cancel.CancelTasksRequestBuilder;
-import org.elasticsearch.action.admin.cluster.node.tasks.cancel.TransportCancelTasksAction;
-import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskRequest;
-import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskRequestBuilder;
-import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskResponse;
-import org.elasticsearch.action.admin.cluster.node.tasks.get.TransportGetTaskAction;
-import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequest;
-import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksRequestBuilder;
-import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
-import org.elasticsearch.action.admin.cluster.node.tasks.list.TransportListTasksAction;
-import org.elasticsearch.action.admin.cluster.node.usage.NodesUsageRequest;
-import org.elasticsearch.action.admin.cluster.node.usage.NodesUsageResponse;
-import org.elasticsearch.action.admin.cluster.node.usage.TransportNodesUsageAction;
-import org.elasticsearch.action.admin.cluster.repositories.cleanup.CleanupRepositoryRequest;
-import org.elasticsearch.action.admin.cluster.repositories.cleanup.CleanupRepositoryRequestBuilder;
-import org.elasticsearch.action.admin.cluster.repositories.cleanup.CleanupRepositoryResponse;
-import org.elasticsearch.action.admin.cluster.repositories.cleanup.TransportCleanupRepositoryAction;
-import org.elasticsearch.action.admin.cluster.repositories.delete.DeleteRepositoryRequest;
-import org.elasticsearch.action.admin.cluster.repositories.delete.DeleteRepositoryRequestBuilder;
-import org.elasticsearch.action.admin.cluster.repositories.delete.TransportDeleteRepositoryAction;
-import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesAction;
-import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequest;
-import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesRequestBuilder;
-import org.elasticsearch.action.admin.cluster.repositories.get.GetRepositoriesResponse;
-import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequest;
-import org.elasticsearch.action.admin.cluster.repositories.put.PutRepositoryRequestBuilder;
-import org.elasticsearch.action.admin.cluster.repositories.put.TransportPutRepositoryAction;
-import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryAction;
-import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryRequest;
-import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryRequestBuilder;
-import org.elasticsearch.action.admin.cluster.repositories.verify.VerifyRepositoryResponse;
-import org.elasticsearch.action.admin.cluster.reroute.ClusterRerouteRequest;
-import org.elasticsearch.action.admin.cluster.reroute.ClusterRerouteRequestBuilder;
-import org.elasticsearch.action.admin.cluster.reroute.ClusterRerouteResponse;
-import org.elasticsearch.action.admin.cluster.reroute.TransportClusterRerouteAction;
-import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsAction;
-import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
-import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequestBuilder;
-import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
-import org.elasticsearch.action.admin.cluster.shards.ClusterSearchShardsRequest;
-import org.elasticsearch.action.admin.cluster.shards.ClusterSearchShardsRequestBuilder;
-import org.elasticsearch.action.admin.cluster.shards.ClusterSearchShardsResponse;
-import org.elasticsearch.action.admin.cluster.shards.TransportClusterSearchShardsAction;
-import org.elasticsearch.action.admin.cluster.snapshots.clone.CloneSnapshotRequest;
-import org.elasticsearch.action.admin.cluster.snapshots.clone.CloneSnapshotRequestBuilder;
-import org.elasticsearch.action.admin.cluster.snapshots.clone.TransportCloneSnapshotAction;
-import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotRequest;
-import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotRequestBuilder;
-import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotResponse;
-import org.elasticsearch.action.admin.cluster.snapshots.create.TransportCreateSnapshotAction;
-import org.elasticsearch.action.admin.cluster.snapshots.delete.DeleteSnapshotRequest;
-import org.elasticsearch.action.admin.cluster.snapshots.delete.DeleteSnapshotRequestBuilder;
-import org.elasticsearch.action.admin.cluster.snapshots.delete.TransportDeleteSnapshotAction;
-import org.elasticsearch.action.admin.cluster.snapshots.get.GetSnapshotsRequest;
-import org.elasticsearch.action.admin.cluster.snapshots.get.GetSnapshotsRequestBuilder;
-import org.elasticsearch.action.admin.cluster.snapshots.get.GetSnapshotsResponse;
-import org.elasticsearch.action.admin.cluster.snapshots.get.TransportGetSnapshotsAction;
-import org.elasticsearch.action.admin.cluster.snapshots.restore.RestoreSnapshotRequest;
-import org.elasticsearch.action.admin.cluster.snapshots.restore.RestoreSnapshotRequestBuilder;
-import org.elasticsearch.action.admin.cluster.snapshots.restore.RestoreSnapshotResponse;
-import org.elasticsearch.action.admin.cluster.snapshots.restore.TransportRestoreSnapshotAction;
-import org.elasticsearch.action.admin.cluster.snapshots.status.SnapshotsStatusRequest;
-import org.elasticsearch.action.admin.cluster.snapshots.status.SnapshotsStatusRequestBuilder;
-import org.elasticsearch.action.admin.cluster.snapshots.status.SnapshotsStatusResponse;
-import org.elasticsearch.action.admin.cluster.snapshots.status.TransportSnapshotsStatusAction;
-import org.elasticsearch.action.admin.cluster.state.ClusterStateAction;
-import org.elasticsearch.action.admin.cluster.state.ClusterStateRequest;
-import org.elasticsearch.action.admin.cluster.state.ClusterStateRequestBuilder;
-import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
-import org.elasticsearch.action.admin.cluster.stats.ClusterStatsRequest;
-import org.elasticsearch.action.admin.cluster.stats.ClusterStatsRequestBuilder;
-import org.elasticsearch.action.admin.cluster.stats.ClusterStatsResponse;
-import org.elasticsearch.action.admin.cluster.stats.TransportClusterStatsAction;
-import org.elasticsearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequest;
-import org.elasticsearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequestBuilder;
-import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptAction;
-import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptRequest;
-import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptRequestBuilder;
-import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptResponse;
-import org.elasticsearch.action.admin.cluster.storedscripts.PutStoredScriptRequest;
-import org.elasticsearch.action.admin.cluster.storedscripts.PutStoredScriptRequestBuilder;
-import org.elasticsearch.action.admin.cluster.storedscripts.TransportDeleteStoredScriptAction;
-import org.elasticsearch.action.admin.cluster.storedscripts.TransportPutStoredScriptAction;
-import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
-import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequestBuilder;
-import org.elasticsearch.action.admin.indices.alias.IndicesAliasesResponse;
-import org.elasticsearch.action.admin.indices.alias.TransportIndicesAliasesAction;
-import org.elasticsearch.action.admin.indices.alias.get.GetAliasesAction;
-import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
-import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequestBuilder;
-import org.elasticsearch.action.admin.indices.alias.get.GetAliasesResponse;
-import org.elasticsearch.action.admin.indices.analyze.AnalyzeAction;
-import org.elasticsearch.action.admin.indices.analyze.AnalyzeRequestBuilder;
-import org.elasticsearch.action.admin.indices.cache.clear.ClearIndicesCacheRequest;
-import org.elasticsearch.action.admin.indices.cache.clear.ClearIndicesCacheRequestBuilder;
-import org.elasticsearch.action.admin.indices.cache.clear.TransportClearIndicesCacheAction;
-import org.elasticsearch.action.admin.indices.close.CloseIndexRequest;
-import org.elasticsearch.action.admin.indices.close.CloseIndexRequestBuilder;
-import org.elasticsearch.action.admin.indices.close.CloseIndexResponse;
-import org.elasticsearch.action.admin.indices.close.TransportCloseIndexAction;
-import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
-import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
-import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
-import org.elasticsearch.action.admin.indices.create.TransportCreateIndexAction;
-import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
-import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequestBuilder;
-import org.elasticsearch.action.admin.indices.delete.TransportDeleteIndexAction;
-import org.elasticsearch.action.admin.indices.flush.FlushAction;
-import org.elasticsearch.action.admin.indices.flush.FlushRequest;
-import org.elasticsearch.action.admin.indices.flush.FlushRequestBuilder;
-import org.elasticsearch.action.admin.indices.forcemerge.ForceMergeAction;
-import org.elasticsearch.action.admin.indices.forcemerge.ForceMergeRequest;
-import org.elasticsearch.action.admin.indices.forcemerge.ForceMergeRequestBuilder;
-import org.elasticsearch.action.admin.indices.get.GetIndexAction;
-import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
-import org.elasticsearch.action.admin.indices.get.GetIndexRequestBuilder;
-import org.elasticsearch.action.admin.indices.get.GetIndexResponse;
-import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsAction;
-import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsRequest;
-import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsRequestBuilder;
-import org.elasticsearch.action.admin.indices.mapping.get.GetFieldMappingsResponse;
-import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsAction;
-import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequest;
-import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequestBuilder;
-import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsResponse;
-import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
-import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder;
-import org.elasticsearch.action.admin.indices.mapping.put.TransportPutMappingAction;
-import org.elasticsearch.action.admin.indices.open.OpenIndexAction;
-import org.elasticsearch.action.admin.indices.open.OpenIndexRequest;
-import org.elasticsearch.action.admin.indices.open.OpenIndexRequestBuilder;
-import org.elasticsearch.action.admin.indices.open.OpenIndexResponse;
-import org.elasticsearch.action.admin.indices.readonly.AddIndexBlockRequest;
-import org.elasticsearch.action.admin.indices.readonly.AddIndexBlockRequestBuilder;
-import org.elasticsearch.action.admin.indices.readonly.AddIndexBlockResponse;
-import org.elasticsearch.action.admin.indices.readonly.TransportAddIndexBlockAction;
-import org.elasticsearch.action.admin.indices.recovery.RecoveryAction;
-import org.elasticsearch.action.admin.indices.recovery.RecoveryRequest;
-import org.elasticsearch.action.admin.indices.recovery.RecoveryRequestBuilder;
-import org.elasticsearch.action.admin.indices.recovery.RecoveryResponse;
-import org.elasticsearch.action.admin.indices.refresh.RefreshAction;
-import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
-import org.elasticsearch.action.admin.indices.refresh.RefreshRequestBuilder;
-import org.elasticsearch.action.admin.indices.resolve.ResolveIndexAction;
-import org.elasticsearch.action.admin.indices.rollover.RolloverAction;
-import org.elasticsearch.action.admin.indices.rollover.RolloverRequest;
-import org.elasticsearch.action.admin.indices.rollover.RolloverRequestBuilder;
-import org.elasticsearch.action.admin.indices.rollover.RolloverResponse;
-import org.elasticsearch.action.admin.indices.segments.IndicesSegmentResponse;
-import org.elasticsearch.action.admin.indices.segments.IndicesSegmentsAction;
-import org.elasticsearch.action.admin.indices.segments.IndicesSegmentsRequest;
-import org.elasticsearch.action.admin.indices.segments.IndicesSegmentsRequestBuilder;
-import org.elasticsearch.action.admin.indices.settings.get.GetSettingsAction;
-import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest;
-import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequestBuilder;
-import org.elasticsearch.action.admin.indices.settings.get.GetSettingsResponse;
-import org.elasticsearch.action.admin.indices.settings.put.TransportUpdateSettingsAction;
-import org.elasticsearch.action.admin.indices.settings.put.UpdateSettingsRequest;
-import org.elasticsearch.action.admin.indices.settings.put.UpdateSettingsRequestBuilder;
-import org.elasticsearch.action.admin.indices.shrink.ResizeAction;
-import org.elasticsearch.action.admin.indices.shrink.ResizeRequest;
-import org.elasticsearch.action.admin.indices.shrink.ResizeRequestBuilder;
-import org.elasticsearch.action.admin.indices.stats.IndicesStatsAction;
-import org.elasticsearch.action.admin.indices.stats.IndicesStatsRequest;
-import org.elasticsearch.action.admin.indices.stats.IndicesStatsRequestBuilder;
-import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse;
-import org.elasticsearch.action.admin.indices.template.delete.DeleteIndexTemplateRequest;
-import org.elasticsearch.action.admin.indices.template.delete.DeleteIndexTemplateRequestBuilder;
-import org.elasticsearch.action.admin.indices.template.delete.TransportDeleteIndexTemplateAction;
-import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesAction;
-import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesRequest;
-import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesRequestBuilder;
-import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesResponse;
-import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequest;
-import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequestBuilder;
-import org.elasticsearch.action.admin.indices.template.put.TransportPutIndexTemplateAction;
-import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryAction;
-import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryRequest;
-import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryRequestBuilder;
-import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryResponse;
 import org.elasticsearch.action.bulk.BulkRequest;
 import org.elasticsearch.action.bulk.BulkRequestBuilder;
 import org.elasticsearch.action.bulk.BulkResponse;
@@ -240,20 +43,6 @@ import org.elasticsearch.action.get.TransportMultiGetAction;
 import org.elasticsearch.action.index.IndexRequest;
 import org.elasticsearch.action.index.IndexRequestBuilder;
 import org.elasticsearch.action.index.TransportIndexAction;
-import org.elasticsearch.action.ingest.DeletePipelineRequest;
-import org.elasticsearch.action.ingest.DeletePipelineRequestBuilder;
-import org.elasticsearch.action.ingest.DeletePipelineTransportAction;
-import org.elasticsearch.action.ingest.GetPipelineAction;
-import org.elasticsearch.action.ingest.GetPipelineRequest;
-import org.elasticsearch.action.ingest.GetPipelineRequestBuilder;
-import org.elasticsearch.action.ingest.GetPipelineResponse;
-import org.elasticsearch.action.ingest.PutPipelineRequest;
-import org.elasticsearch.action.ingest.PutPipelineRequestBuilder;
-import org.elasticsearch.action.ingest.PutPipelineTransportAction;
-import org.elasticsearch.action.ingest.SimulatePipelineAction;
-import org.elasticsearch.action.ingest.SimulatePipelineRequest;
-import org.elasticsearch.action.ingest.SimulatePipelineRequestBuilder;
-import org.elasticsearch.action.ingest.SimulatePipelineResponse;
 import org.elasticsearch.action.search.ClearScrollRequest;
 import org.elasticsearch.action.search.ClearScrollRequestBuilder;
 import org.elasticsearch.action.search.ClearScrollResponse;
@@ -270,8 +59,6 @@ import org.elasticsearch.action.search.TransportMultiSearchAction;
 import org.elasticsearch.action.search.TransportSearchAction;
 import org.elasticsearch.action.search.TransportSearchScrollAction;
 import org.elasticsearch.action.support.PlainActionFuture;
-import org.elasticsearch.action.support.broadcast.BroadcastResponse;
-import org.elasticsearch.action.support.master.AcknowledgedResponse;
 import org.elasticsearch.action.termvectors.MultiTermVectorsAction;
 import org.elasticsearch.action.termvectors.MultiTermVectorsRequest;
 import org.elasticsearch.action.termvectors.MultiTermVectorsRequestBuilder;
@@ -286,19 +73,12 @@ import org.elasticsearch.action.update.UpdateRequestBuilder;
 import org.elasticsearch.action.update.UpdateResponse;
 import org.elasticsearch.client.internal.AdminClient;
 import org.elasticsearch.client.internal.Client;
-import org.elasticsearch.client.internal.ClusterAdminClient;
-import org.elasticsearch.client.internal.ElasticsearchClient;
 import org.elasticsearch.client.internal.FilterClient;
-import org.elasticsearch.client.internal.IndicesAdminClient;
-import org.elasticsearch.cluster.metadata.IndexMetadata.APIBlock;
-import org.elasticsearch.common.bytes.BytesReference;
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.util.concurrent.ThreadContext;
 import org.elasticsearch.core.Nullable;
 import org.elasticsearch.core.RefCounted;
-import org.elasticsearch.tasks.TaskId;
 import org.elasticsearch.threadpool.ThreadPool;
-import org.elasticsearch.xcontent.XContentType;
 
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
@@ -310,12 +90,12 @@ public abstract class AbstractClient implements Client {
 
     protected final Settings settings;
     private final ThreadPool threadPool;
-    private final Admin admin;
+    private final AdminClient admin;
 
     public AbstractClient(Settings settings, ThreadPool threadPool) {
         this.settings = settings;
         this.threadPool = threadPool;
-        this.admin = new Admin(this);
+        this.admin = new AdminClient(this);
         this.logger = LogManager.getLogger(this.getClass());
     }
 
@@ -607,888 +387,6 @@ public abstract class AbstractClient implements Client {
         return new FieldCapabilitiesRequestBuilder(this, indices);
     }
 
-    static class Admin implements AdminClient {
-
-        private final ClusterAdmin clusterAdmin;
-        private final IndicesAdmin indicesAdmin;
-
-        Admin(ElasticsearchClient client) {
-            this.clusterAdmin = new ClusterAdmin(client);
-            this.indicesAdmin = new IndicesAdmin(client);
-        }
-
-        @Override
-        public ClusterAdminClient cluster() {
-            return clusterAdmin;
-        }
-
-        @Override
-        public IndicesAdminClient indices() {
-            return indicesAdmin;
-        }
-    }
-
-    static class ClusterAdmin implements ClusterAdminClient {
-
-        private final ElasticsearchClient client;
-
-        ClusterAdmin(ElasticsearchClient client) {
-            this.client = client;
-        }
-
-        @Override
-        public <Request extends ActionRequest, Response extends ActionResponse> ActionFuture<Response> execute(
-            ActionType<Response> action,
-            Request request
-        ) {
-            return client.execute(action, request);
-        }
-
-        @Override
-        public <Request extends ActionRequest, Response extends ActionResponse> void execute(
-            ActionType<Response> action,
-            Request request,
-            ActionListener<Response> listener
-        ) {
-            client.execute(action, request, listener);
-        }
-
-        @Override
-        public ThreadPool threadPool() {
-            return client.threadPool();
-        }
-
-        @Override
-        public ActionFuture<ClusterHealthResponse> health(final ClusterHealthRequest request) {
-            return execute(TransportClusterHealthAction.TYPE, request);
-        }
-
-        @Override
-        public void health(final ClusterHealthRequest request, final ActionListener<ClusterHealthResponse> listener) {
-            execute(TransportClusterHealthAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ClusterHealthRequestBuilder prepareHealth(String... indices) {
-            return new ClusterHealthRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<ClusterStateResponse> state(final ClusterStateRequest request) {
-            return execute(ClusterStateAction.INSTANCE, request);
-        }
-
-        @Override
-        public void state(final ClusterStateRequest request, final ActionListener<ClusterStateResponse> listener) {
-            execute(ClusterStateAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public ClusterStateRequestBuilder prepareState() {
-            return new ClusterStateRequestBuilder(this);
-        }
-
-        @Override
-        public ActionFuture<ClusterRerouteResponse> reroute(final ClusterRerouteRequest request) {
-            return execute(TransportClusterRerouteAction.TYPE, request);
-        }
-
-        @Override
-        public void reroute(final ClusterRerouteRequest request, final ActionListener<ClusterRerouteResponse> listener) {
-            execute(TransportClusterRerouteAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ClusterRerouteRequestBuilder prepareReroute() {
-            return new ClusterRerouteRequestBuilder(this);
-        }
-
-        @Override
-        public ActionFuture<ClusterUpdateSettingsResponse> updateSettings(final ClusterUpdateSettingsRequest request) {
-            return execute(ClusterUpdateSettingsAction.INSTANCE, request);
-        }
-
-        @Override
-        public void updateSettings(
-            final ClusterUpdateSettingsRequest request,
-            final ActionListener<ClusterUpdateSettingsResponse> listener
-        ) {
-            execute(ClusterUpdateSettingsAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public ClusterUpdateSettingsRequestBuilder prepareUpdateSettings() {
-            return new ClusterUpdateSettingsRequestBuilder(this);
-        }
-
-        @Override
-        public ActionFuture<NodesInfoResponse> nodesInfo(final NodesInfoRequest request) {
-            return execute(TransportNodesInfoAction.TYPE, request);
-        }
-
-        @Override
-        public void nodesInfo(final NodesInfoRequest request, final ActionListener<NodesInfoResponse> listener) {
-            execute(TransportNodesInfoAction.TYPE, request, listener);
-        }
-
-        @Override
-        public NodesInfoRequestBuilder prepareNodesInfo(String... nodesIds) {
-            return new NodesInfoRequestBuilder(this).setNodesIds(nodesIds);
-        }
-
-        @Override
-        public ActionFuture<NodesStatsResponse> nodesStats(final NodesStatsRequest request) {
-            return execute(TransportNodesStatsAction.TYPE, request);
-        }
-
-        @Override
-        public void nodesStats(final NodesStatsRequest request, final ActionListener<NodesStatsResponse> listener) {
-            execute(TransportNodesStatsAction.TYPE, request, listener);
-        }
-
-        @Override
-        public NodesStatsRequestBuilder prepareNodesStats(String... nodesIds) {
-            return new NodesStatsRequestBuilder(this).setNodesIds(nodesIds);
-        }
-
-        @Override
-        public void nodesUsage(final NodesUsageRequest request, final ActionListener<NodesUsageResponse> listener) {
-            execute(TransportNodesUsageAction.TYPE, request, listener);
-        }
-
-        @Override
-        public void clusterStats(ClusterStatsRequest request, ActionListener<ClusterStatsResponse> listener) {
-            execute(TransportClusterStatsAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ClusterStatsRequestBuilder prepareClusterStats() {
-            return new ClusterStatsRequestBuilder(this);
-        }
-
-        @Override
-        public ActionFuture<ListTasksResponse> listTasks(final ListTasksRequest request) {
-            return execute(TransportListTasksAction.TYPE, request);
-        }
-
-        @Override
-        public void listTasks(final ListTasksRequest request, final ActionListener<ListTasksResponse> listener) {
-            execute(TransportListTasksAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ListTasksRequestBuilder prepareListTasks(String... nodesIds) {
-            return new ListTasksRequestBuilder(this).setNodesIds(nodesIds);
-        }
-
-        @Override
-        public ActionFuture<GetTaskResponse> getTask(final GetTaskRequest request) {
-            return execute(TransportGetTaskAction.TYPE, request);
-        }
-
-        @Override
-        public void getTask(final GetTaskRequest request, final ActionListener<GetTaskResponse> listener) {
-            execute(TransportGetTaskAction.TYPE, request, listener);
-        }
-
-        @Override
-        public GetTaskRequestBuilder prepareGetTask(String taskId) {
-            return prepareGetTask(new TaskId(taskId));
-        }
-
-        @Override
-        public GetTaskRequestBuilder prepareGetTask(TaskId taskId) {
-            return new GetTaskRequestBuilder(this).setTaskId(taskId);
-        }
-
-        @Override
-        public ActionFuture<ListTasksResponse> cancelTasks(CancelTasksRequest request) {
-            return execute(TransportCancelTasksAction.TYPE, request);
-        }
-
-        @Override
-        public void cancelTasks(CancelTasksRequest request, ActionListener<ListTasksResponse> listener) {
-            execute(TransportCancelTasksAction.TYPE, request, listener);
-        }
-
-        @Override
-        public CancelTasksRequestBuilder prepareCancelTasks(String... nodesIds) {
-            return new CancelTasksRequestBuilder(this).setNodesIds(nodesIds);
-        }
-
-        @Override
-        public void searchShards(final ClusterSearchShardsRequest request, final ActionListener<ClusterSearchShardsResponse> listener) {
-            execute(TransportClusterSearchShardsAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ClusterSearchShardsRequestBuilder prepareSearchShards(String... indices) {
-            return new ClusterSearchShardsRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public void putRepository(PutRepositoryRequest request, ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportPutRepositoryAction.TYPE, request, listener);
-        }
-
-        @Override
-        public PutRepositoryRequestBuilder preparePutRepository(String name) {
-            return new PutRepositoryRequestBuilder(this, name);
-        }
-
-        @Override
-        public ActionFuture<CreateSnapshotResponse> createSnapshot(CreateSnapshotRequest request) {
-            return execute(TransportCreateSnapshotAction.TYPE, request);
-        }
-
-        @Override
-        public void createSnapshot(CreateSnapshotRequest request, ActionListener<CreateSnapshotResponse> listener) {
-            execute(TransportCreateSnapshotAction.TYPE, request, listener);
-        }
-
-        @Override
-        public CreateSnapshotRequestBuilder prepareCreateSnapshot(String repository, String name) {
-            return new CreateSnapshotRequestBuilder(this, repository, name);
-        }
-
-        @Override
-        public CloneSnapshotRequestBuilder prepareCloneSnapshot(String repository, String source, String target) {
-            return new CloneSnapshotRequestBuilder(this, repository, source, target);
-        }
-
-        @Override
-        public void cloneSnapshot(CloneSnapshotRequest request, ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportCloneSnapshotAction.TYPE, request, listener);
-        }
-
-        @Override
-        public void getSnapshots(GetSnapshotsRequest request, ActionListener<GetSnapshotsResponse> listener) {
-            execute(TransportGetSnapshotsAction.TYPE, request, listener);
-        }
-
-        @Override
-        public GetSnapshotsRequestBuilder prepareGetSnapshots(String... repositories) {
-            return new GetSnapshotsRequestBuilder(this, repositories);
-        }
-
-        @Override
-        public void deleteSnapshot(DeleteSnapshotRequest request, ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportDeleteSnapshotAction.TYPE, request, listener);
-        }
-
-        @Override
-        public DeleteSnapshotRequestBuilder prepareDeleteSnapshot(String repository, String... names) {
-            return new DeleteSnapshotRequestBuilder(this, repository, names);
-        }
-
-        @Override
-        public void deleteRepository(DeleteRepositoryRequest request, ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportDeleteRepositoryAction.TYPE, request, listener);
-        }
-
-        @Override
-        public DeleteRepositoryRequestBuilder prepareDeleteRepository(String name) {
-            return new DeleteRepositoryRequestBuilder(this, name);
-        }
-
-        @Override
-        public void verifyRepository(VerifyRepositoryRequest request, ActionListener<VerifyRepositoryResponse> listener) {
-            execute(VerifyRepositoryAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public VerifyRepositoryRequestBuilder prepareVerifyRepository(String name) {
-            return new VerifyRepositoryRequestBuilder(this, name);
-        }
-
-        @Override
-        public void getRepositories(GetRepositoriesRequest request, ActionListener<GetRepositoriesResponse> listener) {
-            execute(GetRepositoriesAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public GetRepositoriesRequestBuilder prepareGetRepositories(String... name) {
-            return new GetRepositoriesRequestBuilder(this, name);
-        }
-
-        @Override
-        public CleanupRepositoryRequestBuilder prepareCleanupRepository(String repository) {
-            return new CleanupRepositoryRequestBuilder(this, repository);
-        }
-
-        @Override
-        public void cleanupRepository(CleanupRepositoryRequest request, ActionListener<CleanupRepositoryResponse> listener) {
-            execute(TransportCleanupRepositoryAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ActionFuture<RestoreSnapshotResponse> restoreSnapshot(RestoreSnapshotRequest request) {
-            return execute(TransportRestoreSnapshotAction.TYPE, request);
-        }
-
-        @Override
-        public void restoreSnapshot(RestoreSnapshotRequest request, ActionListener<RestoreSnapshotResponse> listener) {
-            execute(TransportRestoreSnapshotAction.TYPE, request, listener);
-        }
-
-        @Override
-        public RestoreSnapshotRequestBuilder prepareRestoreSnapshot(String repository, String snapshot) {
-            return new RestoreSnapshotRequestBuilder(this, repository, snapshot);
-        }
-
-        @Override
-        public void snapshotsStatus(SnapshotsStatusRequest request, ActionListener<SnapshotsStatusResponse> listener) {
-            execute(TransportSnapshotsStatusAction.TYPE, request, listener);
-        }
-
-        @Override
-        public SnapshotsStatusRequestBuilder prepareSnapshotStatus(String repository) {
-            return new SnapshotsStatusRequestBuilder(this, repository);
-        }
-
-        @Override
-        public SnapshotsStatusRequestBuilder prepareSnapshotStatus() {
-            return new SnapshotsStatusRequestBuilder(this);
-        }
-
-        @Override
-        public void putPipeline(PutPipelineRequest request, ActionListener<AcknowledgedResponse> listener) {
-            execute(PutPipelineTransportAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ActionFuture<AcknowledgedResponse> putPipeline(PutPipelineRequest request) {
-            return execute(PutPipelineTransportAction.TYPE, request);
-        }
-
-        @Override
-        public PutPipelineRequestBuilder preparePutPipeline(String id, BytesReference source, XContentType xContentType) {
-            return new PutPipelineRequestBuilder(this, id, source, xContentType);
-        }
-
-        @Override
-        public void deletePipeline(DeletePipelineRequest request, ActionListener<AcknowledgedResponse> listener) {
-            execute(DeletePipelineTransportAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ActionFuture<AcknowledgedResponse> deletePipeline(DeletePipelineRequest request) {
-            return execute(DeletePipelineTransportAction.TYPE, request);
-        }
-
-        @Override
-        public DeletePipelineRequestBuilder prepareDeletePipeline(String id) {
-            return new DeletePipelineRequestBuilder(this, id);
-        }
-
-        @Override
-        public void getPipeline(GetPipelineRequest request, ActionListener<GetPipelineResponse> listener) {
-            execute(GetPipelineAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public GetPipelineRequestBuilder prepareGetPipeline(String... ids) {
-            return new GetPipelineRequestBuilder(this, ids);
-        }
-
-        @Override
-        public void simulatePipeline(SimulatePipelineRequest request, ActionListener<SimulatePipelineResponse> listener) {
-            execute(SimulatePipelineAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public ActionFuture<SimulatePipelineResponse> simulatePipeline(SimulatePipelineRequest request) {
-            return execute(SimulatePipelineAction.INSTANCE, request);
-        }
-
-        @Override
-        public SimulatePipelineRequestBuilder prepareSimulatePipeline(BytesReference source, XContentType xContentType) {
-            return new SimulatePipelineRequestBuilder(this, source, xContentType);
-        }
-
-        @Override
-        public void allocationExplain(ClusterAllocationExplainRequest request, ActionListener<ClusterAllocationExplainResponse> listener) {
-            execute(TransportClusterAllocationExplainAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ActionFuture<ClusterAllocationExplainResponse> allocationExplain(ClusterAllocationExplainRequest request) {
-            return execute(TransportClusterAllocationExplainAction.TYPE, request);
-        }
-
-        @Override
-        public ClusterAllocationExplainRequestBuilder prepareAllocationExplain() {
-            return new ClusterAllocationExplainRequestBuilder(this);
-        }
-
-        @Override
-        public void getStoredScript(final GetStoredScriptRequest request, final ActionListener<GetStoredScriptResponse> listener) {
-            execute(GetStoredScriptAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public GetStoredScriptRequestBuilder prepareGetStoredScript(String id) {
-            return new GetStoredScriptRequestBuilder(this).setId(id);
-        }
-
-        @Override
-        public PutStoredScriptRequestBuilder preparePutStoredScript() {
-            return new PutStoredScriptRequestBuilder(this);
-        }
-
-        @Override
-        public void putStoredScript(final PutStoredScriptRequest request, ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportPutStoredScriptAction.TYPE, request, listener);
-
-        }
-
-        @Override
-        public void deleteStoredScript(DeleteStoredScriptRequest request, ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportDeleteStoredScriptAction.TYPE, request, listener);
-        }
-
-        @Override
-        public DeleteStoredScriptRequestBuilder prepareDeleteStoredScript(String id) {
-            return new DeleteStoredScriptRequestBuilder(client).setId(id);
-        }
-    }
-
-    static class IndicesAdmin implements IndicesAdminClient {
-
-        private final ElasticsearchClient client;
-
-        IndicesAdmin(ElasticsearchClient client) {
-            this.client = client;
-        }
-
-        @Override
-        public <Request extends ActionRequest, Response extends ActionResponse> ActionFuture<Response> execute(
-            ActionType<Response> action,
-            Request request
-        ) {
-            return client.execute(action, request);
-        }
-
-        @Override
-        public <Request extends ActionRequest, Response extends ActionResponse> void execute(
-            ActionType<Response> action,
-            Request request,
-            ActionListener<Response> listener
-        ) {
-            client.execute(action, request, listener);
-        }
-
-        @Override
-        public ThreadPool threadPool() {
-            return client.threadPool();
-        }
-
-        @Override
-        public ActionFuture<IndicesAliasesResponse> aliases(final IndicesAliasesRequest request) {
-            return execute(TransportIndicesAliasesAction.TYPE, request);
-        }
-
-        @Override
-        public void aliases(final IndicesAliasesRequest request, final ActionListener<IndicesAliasesResponse> listener) {
-            execute(TransportIndicesAliasesAction.TYPE, request, listener);
-        }
-
-        @Override
-        public IndicesAliasesRequestBuilder prepareAliases() {
-            return new IndicesAliasesRequestBuilder(this);
-        }
-
-        @Override
-        public ActionFuture<GetAliasesResponse> getAliases(GetAliasesRequest request) {
-            return execute(GetAliasesAction.INSTANCE, request);
-        }
-
-        @Override
-        public void getAliases(GetAliasesRequest request, ActionListener<GetAliasesResponse> listener) {
-            execute(GetAliasesAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public GetAliasesRequestBuilder prepareGetAliases(String... aliases) {
-            return new GetAliasesRequestBuilder(this, aliases);
-        }
-
-        @Override
-        public ActionFuture<BroadcastResponse> clearCache(final ClearIndicesCacheRequest request) {
-            return execute(TransportClearIndicesCacheAction.TYPE, request);
-        }
-
-        @Override
-        public ActionFuture<GetIndexResponse> getIndex(GetIndexRequest request) {
-            return execute(GetIndexAction.INSTANCE, request);
-        }
-
-        @Override
-        public void getIndex(GetIndexRequest request, ActionListener<GetIndexResponse> listener) {
-            execute(GetIndexAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public GetIndexRequestBuilder prepareGetIndex() {
-            return new GetIndexRequestBuilder(this);
-        }
-
-        @Override
-        public void clearCache(final ClearIndicesCacheRequest request, final ActionListener<BroadcastResponse> listener) {
-            execute(TransportClearIndicesCacheAction.TYPE, request, listener);
-        }
-
-        @Override
-        public ClearIndicesCacheRequestBuilder prepareClearCache(String... indices) {
-            return new ClearIndicesCacheRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<CreateIndexResponse> create(final CreateIndexRequest request) {
-            return execute(TransportCreateIndexAction.TYPE, request);
-        }
-
-        @Override
-        public void create(final CreateIndexRequest request, final ActionListener<CreateIndexResponse> listener) {
-            execute(TransportCreateIndexAction.TYPE, request, listener);
-        }
-
-        @Override
-        public CreateIndexRequestBuilder prepareCreate(String index) {
-            return new CreateIndexRequestBuilder(this, index);
-        }
-
-        @Override
-        public ActionFuture<AcknowledgedResponse> delete(final DeleteIndexRequest request) {
-            return execute(TransportDeleteIndexAction.TYPE, request);
-        }
-
-        @Override
-        public void delete(final DeleteIndexRequest request, final ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportDeleteIndexAction.TYPE, request, listener);
-        }
-
-        @Override
-        public DeleteIndexRequestBuilder prepareDelete(String... indices) {
-            return new DeleteIndexRequestBuilder(this, indices);
-        }
-
-        @Override
-        public ActionFuture<CloseIndexResponse> close(final CloseIndexRequest request) {
-            return execute(TransportCloseIndexAction.TYPE, request);
-        }
-
-        @Override
-        public void close(final CloseIndexRequest request, final ActionListener<CloseIndexResponse> listener) {
-            execute(TransportCloseIndexAction.TYPE, request, listener);
-        }
-
-        @Override
-        public CloseIndexRequestBuilder prepareClose(String... indices) {
-            return new CloseIndexRequestBuilder(this, indices);
-        }
-
-        @Override
-        public ActionFuture<OpenIndexResponse> open(final OpenIndexRequest request) {
-            return execute(OpenIndexAction.INSTANCE, request);
-        }
-
-        @Override
-        public void open(final OpenIndexRequest request, final ActionListener<OpenIndexResponse> listener) {
-            execute(OpenIndexAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public AddIndexBlockRequestBuilder prepareAddBlock(APIBlock block, String... indices) {
-            return new AddIndexBlockRequestBuilder(this, block, indices);
-        }
-
-        @Override
-        public void addBlock(AddIndexBlockRequest request, ActionListener<AddIndexBlockResponse> listener) {
-            execute(TransportAddIndexBlockAction.TYPE, request, listener);
-        }
-
-        @Override
-        public OpenIndexRequestBuilder prepareOpen(String... indices) {
-            return new OpenIndexRequestBuilder(this, indices);
-        }
-
-        @Override
-        public ActionFuture<BroadcastResponse> flush(final FlushRequest request) {
-            return execute(FlushAction.INSTANCE, request);
-        }
-
-        @Override
-        public void flush(final FlushRequest request, final ActionListener<BroadcastResponse> listener) {
-            execute(FlushAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public FlushRequestBuilder prepareFlush(String... indices) {
-            return new FlushRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public void getMappings(GetMappingsRequest request, ActionListener<GetMappingsResponse> listener) {
-            execute(GetMappingsAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public void getFieldMappings(GetFieldMappingsRequest request, ActionListener<GetFieldMappingsResponse> listener) {
-            execute(GetFieldMappingsAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public GetMappingsRequestBuilder prepareGetMappings(String... indices) {
-            return new GetMappingsRequestBuilder(this, indices);
-        }
-
-        @Override
-        public ActionFuture<GetMappingsResponse> getMappings(GetMappingsRequest request) {
-            return execute(GetMappingsAction.INSTANCE, request);
-        }
-
-        @Override
-        public GetFieldMappingsRequestBuilder prepareGetFieldMappings(String... indices) {
-            return new GetFieldMappingsRequestBuilder(this, indices);
-        }
-
-        @Override
-        public ActionFuture<GetFieldMappingsResponse> getFieldMappings(GetFieldMappingsRequest request) {
-            return execute(GetFieldMappingsAction.INSTANCE, request);
-        }
-
-        @Override
-        public ActionFuture<AcknowledgedResponse> putMapping(final PutMappingRequest request) {
-            return execute(TransportPutMappingAction.TYPE, request);
-        }
-
-        @Override
-        public void putMapping(final PutMappingRequest request, final ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportPutMappingAction.TYPE, request, listener);
-        }
-
-        @Override
-        public PutMappingRequestBuilder preparePutMapping(String... indices) {
-            return new PutMappingRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<BroadcastResponse> forceMerge(final ForceMergeRequest request) {
-            return execute(ForceMergeAction.INSTANCE, request);
-        }
-
-        @Override
-        public void forceMerge(final ForceMergeRequest request, final ActionListener<BroadcastResponse> listener) {
-            execute(ForceMergeAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public ForceMergeRequestBuilder prepareForceMerge(String... indices) {
-            return new ForceMergeRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<BroadcastResponse> refresh(final RefreshRequest request) {
-            return execute(RefreshAction.INSTANCE, request);
-        }
-
-        @Override
-        public void refresh(final RefreshRequest request, final ActionListener<BroadcastResponse> listener) {
-            execute(RefreshAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public RefreshRequestBuilder prepareRefresh(String... indices) {
-            return new RefreshRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<IndicesStatsResponse> stats(final IndicesStatsRequest request) {
-            return execute(IndicesStatsAction.INSTANCE, request);
-        }
-
-        @Override
-        public void stats(final IndicesStatsRequest request, final ActionListener<IndicesStatsResponse> listener) {
-            execute(IndicesStatsAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public IndicesStatsRequestBuilder prepareStats(String... indices) {
-            return new IndicesStatsRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<RecoveryResponse> recoveries(final RecoveryRequest request) {
-            return execute(RecoveryAction.INSTANCE, request);
-        }
-
-        @Override
-        public void recoveries(final RecoveryRequest request, final ActionListener<RecoveryResponse> listener) {
-            execute(RecoveryAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public RecoveryRequestBuilder prepareRecoveries(String... indices) {
-            return new RecoveryRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<IndicesSegmentResponse> segments(final IndicesSegmentsRequest request) {
-            return execute(IndicesSegmentsAction.INSTANCE, request);
-        }
-
-        @Override
-        public void segments(final IndicesSegmentsRequest request, final ActionListener<IndicesSegmentResponse> listener) {
-            execute(IndicesSegmentsAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public IndicesSegmentsRequestBuilder prepareSegments(String... indices) {
-            return new IndicesSegmentsRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<AcknowledgedResponse> updateSettings(final UpdateSettingsRequest request) {
-            return execute(TransportUpdateSettingsAction.TYPE, request);
-        }
-
-        @Override
-        public void updateSettings(final UpdateSettingsRequest request, final ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportUpdateSettingsAction.TYPE, request, listener);
-        }
-
-        @Override
-        public UpdateSettingsRequestBuilder prepareUpdateSettings(String... indices) {
-            return new UpdateSettingsRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public ActionFuture<AnalyzeAction.Response> analyze(final AnalyzeAction.Request request) {
-            return execute(AnalyzeAction.INSTANCE, request);
-        }
-
-        @Override
-        public void analyze(final AnalyzeAction.Request request, final ActionListener<AnalyzeAction.Response> listener) {
-            execute(AnalyzeAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public AnalyzeRequestBuilder prepareAnalyze(@Nullable String index, String text) {
-            return new AnalyzeRequestBuilder(this, index, text);
-        }
-
-        @Override
-        public AnalyzeRequestBuilder prepareAnalyze(String text) {
-            return new AnalyzeRequestBuilder(this, null, text);
-        }
-
-        @Override
-        public AnalyzeRequestBuilder prepareAnalyze() {
-            return new AnalyzeRequestBuilder(this);
-        }
-
-        @Override
-        public ActionFuture<AcknowledgedResponse> putTemplate(final PutIndexTemplateRequest request) {
-            return execute(TransportPutIndexTemplateAction.TYPE, request);
-        }
-
-        @Override
-        public void putTemplate(final PutIndexTemplateRequest request, final ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportPutIndexTemplateAction.TYPE, request, listener);
-        }
-
-        @Override
-        public PutIndexTemplateRequestBuilder preparePutTemplate(String name) {
-            return new PutIndexTemplateRequestBuilder(this, name);
-        }
-
-        @Override
-        public void getTemplates(final GetIndexTemplatesRequest request, final ActionListener<GetIndexTemplatesResponse> listener) {
-            execute(GetIndexTemplatesAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public GetIndexTemplatesRequestBuilder prepareGetTemplates(String... names) {
-            return new GetIndexTemplatesRequestBuilder(this, names);
-        }
-
-        @Override
-        public void deleteTemplate(final DeleteIndexTemplateRequest request, final ActionListener<AcknowledgedResponse> listener) {
-            execute(TransportDeleteIndexTemplateAction.TYPE, request, listener);
-        }
-
-        @Override
-        public DeleteIndexTemplateRequestBuilder prepareDeleteTemplate(String name) {
-            return new DeleteIndexTemplateRequestBuilder(this, name);
-        }
-
-        @Override
-        public ActionFuture<ValidateQueryResponse> validateQuery(final ValidateQueryRequest request) {
-            return execute(ValidateQueryAction.INSTANCE, request);
-        }
-
-        @Override
-        public void validateQuery(final ValidateQueryRequest request, final ActionListener<ValidateQueryResponse> listener) {
-            execute(ValidateQueryAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public ValidateQueryRequestBuilder prepareValidateQuery(String... indices) {
-            return new ValidateQueryRequestBuilder(this).setIndices(indices);
-        }
-
-        @Override
-        public GetSettingsRequestBuilder prepareGetSettings(String... indices) {
-            return new GetSettingsRequestBuilder(this, indices);
-        }
-
-        @Override
-        public ResizeRequestBuilder prepareResizeIndex(String sourceIndex, String targetIndex) {
-            return new ResizeRequestBuilder(this).setSourceIndex(sourceIndex).setTargetIndex(new CreateIndexRequest(targetIndex));
-        }
-
-        @Override
-        public void resizeIndex(ResizeRequest request, ActionListener<CreateIndexResponse> listener) {
-            execute(ResizeAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public RolloverRequestBuilder prepareRolloverIndex(String alias) {
-            return new RolloverRequestBuilder(this).setRolloverTarget(alias);
-        }
-
-        @Override
-        public ActionFuture<RolloverResponse> rolloverIndex(RolloverRequest request) {
-            return execute(RolloverAction.INSTANCE, request);
-        }
-
-        @Override
-        public void rolloverIndex(RolloverRequest request, ActionListener<RolloverResponse> listener) {
-            execute(RolloverAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public ActionFuture<GetSettingsResponse> getSettings(GetSettingsRequest request) {
-            return execute(GetSettingsAction.INSTANCE, request);
-        }
-
-        @Override
-        public void getSettings(GetSettingsRequest request, ActionListener<GetSettingsResponse> listener) {
-            execute(GetSettingsAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public void resolveIndex(ResolveIndexAction.Request request, ActionListener<ResolveIndexAction.Response> listener) {
-            execute(ResolveIndexAction.INSTANCE, request, listener);
-        }
-
-        @Override
-        public ActionFuture<ResolveIndexAction.Response> resolveIndex(ResolveIndexAction.Request request) {
-            return execute(ResolveIndexAction.INSTANCE, request);
-        }
-    }
-
     @Override
     public Client filterWithHeader(Map<String, String> headers) {
         return new FilterClient(this) {