/* * Licensed to ElasticSearch and Shay Banon under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. ElasticSearch licenses this * file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.elasticsearch.client.node; import com.google.common.collect.ImmutableMap; import org.elasticsearch.action.support.TransportAction; import org.elasticsearch.client.AdminClient; import org.elasticsearch.client.internal.InternalGenericClient; import org.elasticsearch.common.collect.MapBuilder; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.action.Action; import org.elasticsearch.action.ActionFuture; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.ActionRequest; import org.elasticsearch.action.ActionRequestBuilder; import org.elasticsearch.action.ActionResponse; import org.elasticsearch.action.GenericAction; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.count.CountRequest; import org.elasticsearch.action.count.CountRequestBuilder; import org.elasticsearch.action.count.CountResponse; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteRequestBuilder; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.deletebyquery.DeleteByQueryRequest; import org.elasticsearch.action.deletebyquery.DeleteByQueryRequestBuilder; import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse; import org.elasticsearch.action.explain.ExplainRequest; import org.elasticsearch.action.explain.ExplainRequestBuilder; import org.elasticsearch.action.explain.ExplainResponse; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.get.MultiGetRequest; import org.elasticsearch.action.get.MultiGetRequestBuilder; import org.elasticsearch.action.get.MultiGetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.mlt.MoreLikeThisRequest; import org.elasticsearch.action.mlt.MoreLikeThisRequestBuilder; import org.elasticsearch.action.percolate.PercolateRequest; import org.elasticsearch.action.percolate.PercolateRequestBuilder; import org.elasticsearch.action.percolate.PercolateResponse; import org.elasticsearch.action.search.MultiSearchRequest; import org.elasticsearch.action.search.MultiSearchRequestBuilder; import org.elasticsearch.action.search.MultiSearchResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchScrollRequest; import org.elasticsearch.action.search.SearchScrollRequestBuilder; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateRequestBuilder; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.GenericClient; import org.elasticsearch.client.support.DecoratingAdminClient; import java.util.Map; /** * The Node Client is useful for plugins that execute actions inside the cluster. */ public class NodeClient implements InternalGenericClient, Client { private final Settings settings; private final ThreadPool threadPool; private final NodeIngestClient ingestClient; private final NodeSearchClient searchClient; private final AdminClient adminClient; private final ImmutableMap<Action, TransportAction> actions; @Inject public NodeClient(Settings settings, ThreadPool threadPool, NodeIngestClient ingestClient, NodeSearchClient searchClient, NodeClusterAdminClient clusterAdminClient, NodeIndicesAdminClient indicesAdminClient, Map<GenericAction, TransportAction> actions) { this.settings = settings; this.threadPool = threadPool; this.ingestClient = ingestClient; this.searchClient = searchClient; this.adminClient = new DecoratingAdminClient(clusterAdminClient, indicesAdminClient); MapBuilder<Action, TransportAction> actionsBuilder = new MapBuilder<Action, TransportAction>(); for (Map.Entry<GenericAction, TransportAction> entry : actions.entrySet()) { if (entry.getKey() instanceof Action) { actionsBuilder.put((Action) entry.getKey(), entry.getValue()); } } this.actions = actionsBuilder.immutableMap(); } @Override public Settings settings() { return this.settings; } @Override public ThreadPool threadPool() { return this.threadPool; } @Override public void close() { // nothing really to do } @Override public AdminClient admin() { return this.adminClient; } public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>, MyNodeClient extends GenericClient> ActionFuture<Response> execute(Action<Request, Response, RequestBuilder, MyNodeClient> action, Request request) { TransportAction<Request, Response> transportAction = actions.get(action); return transportAction.execute(request); } public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>, MyNodeClient extends GenericClient> void execute(Action<Request, Response, RequestBuilder, MyNodeClient> action, Request request, ActionListener<Response> listener) { TransportAction<Request, Response> transportAction = actions.get(action); transportAction.execute(request, listener); } @Override public ActionFuture<IndexResponse> index(IndexRequest request) { return ingestClient.index(request); } @Override public void index(IndexRequest request, ActionListener<IndexResponse> listener) { ingestClient.index(request, listener); } @Override public IndexRequestBuilder prepareIndex() { return ingestClient.prepareIndex(); } @Override public ActionFuture<UpdateResponse> update(UpdateRequest request) { return ingestClient.update(request); } @Override public void update(UpdateRequest request, ActionListener<UpdateResponse> listener) { ingestClient.update(request, listener); } @Override public UpdateRequestBuilder prepareUpdate() { return ingestClient.prepareUpdate(); } @Override public UpdateRequestBuilder prepareUpdate(String index, String type, String id) { return ingestClient.prepareUpdate(index, type, id); } @Override public IndexRequestBuilder prepareIndex(String index, String type) { return ingestClient.prepareIndex(index, type); } @Override public IndexRequestBuilder prepareIndex(String index, String type, String id) { return ingestClient.prepareIndex(index, type, id); } @Override public ActionFuture<DeleteResponse> delete(DeleteRequest request) { return ingestClient.delete(request); } @Override public void delete(DeleteRequest request, ActionListener<DeleteResponse> listener) { ingestClient.delete(request, listener); } @Override public DeleteRequestBuilder prepareDelete() { return ingestClient.prepareDelete(); } @Override public DeleteRequestBuilder prepareDelete(String index, String type, String id) { return ingestClient.prepareDelete(index, type, id); } @Override public ActionFuture<BulkResponse> bulk(BulkRequest request) { return ingestClient.bulk(request); } @Override public void bulk(BulkRequest request, ActionListener<BulkResponse> listener) { ingestClient.bulk(request, listener); } @Override public BulkRequestBuilder prepareBulk() { return ingestClient.prepareBulk(); } @Override public ActionFuture<DeleteByQueryResponse> deleteByQuery(DeleteByQueryRequest request) { return searchClient.deleteByQuery(request); } @Override public void deleteByQuery(DeleteByQueryRequest request, ActionListener<DeleteByQueryResponse> listener) { searchClient.deleteByQuery(request, listener); } @Override public DeleteByQueryRequestBuilder prepareDeleteByQuery(String... indices) { return searchClient.prepareDeleteByQuery(indices); } @Override public ActionFuture<GetResponse> get(GetRequest request) { return ingestClient.get(request); } @Override public void get(GetRequest request, ActionListener<GetResponse> listener) { ingestClient.get(request, listener); } @Override public GetRequestBuilder prepareGet() { return ingestClient.prepareGet(); } @Override public GetRequestBuilder prepareGet(String index, String type, String id) { return ingestClient.prepareGet(index, type, id); } @Override public ActionFuture<MultiGetResponse> multiGet(MultiGetRequest request) { return ingestClient.multiGet(request); } @Override public void multiGet(MultiGetRequest request, ActionListener<MultiGetResponse> listener) { ingestClient.multiGet(request, listener); } @Override public MultiGetRequestBuilder prepareMultiGet() { return ingestClient.prepareMultiGet(); } @Override public ActionFuture<CountResponse> count(CountRequest request) { return searchClient.count(request); } @Override public void count(CountRequest request, ActionListener<CountResponse> listener) { searchClient.count(request, listener); } @Override public CountRequestBuilder prepareCount(String... indices) { return searchClient.prepareCount(indices); } @Override public ActionFuture<SearchResponse> search(SearchRequest request) { return searchClient.search(request); } @Override public void search(SearchRequest request, ActionListener<SearchResponse> listener) { searchClient.search(request, listener); } @Override public SearchRequestBuilder prepareSearch(String... indices) { return searchClient.prepareSearch(indices); } @Override public ActionFuture<SearchResponse> searchScroll(SearchScrollRequest request) { return searchClient.searchScroll(request); } @Override public void searchScroll(SearchScrollRequest request, ActionListener<SearchResponse> listener) { searchClient.searchScroll(request, listener); } @Override public SearchScrollRequestBuilder prepareSearchScroll(String scrollId) { return searchClient.prepareSearchScroll(scrollId); } @Override public ActionFuture<MultiSearchResponse> multiSearch(MultiSearchRequest request) { return searchClient.multiSearch(request); } @Override public void multiSearch(MultiSearchRequest request, ActionListener<MultiSearchResponse> listener) { searchClient.multiSearch(request, listener); } @Override public MultiSearchRequestBuilder prepareMultiSearch() { return searchClient.prepareMultiSearch(); } @Override public ActionFuture<SearchResponse> moreLikeThis(MoreLikeThisRequest request) { return searchClient.moreLikeThis(request); } @Override public void moreLikeThis(MoreLikeThisRequest request, ActionListener<SearchResponse> listener) { searchClient.moreLikeThis(request, listener); } @Override public MoreLikeThisRequestBuilder prepareMoreLikeThis(String index, String type, String id) { return searchClient.prepareMoreLikeThis(index, type, id); } @Override public ActionFuture<PercolateResponse> percolate(PercolateRequest request) { return ingestClient.percolate(request); } @Override public void percolate(PercolateRequest request, ActionListener<PercolateResponse> listener) { ingestClient.percolate(request, listener); } @Override public PercolateRequestBuilder preparePercolate(String index, String type) { return ingestClient.preparePercolate(index, type); } @Override public ExplainRequestBuilder prepareExplain(String index, String type, String id) { return searchClient.prepareExplain(index, type, id); } @Override public ActionFuture<ExplainResponse> explain(ExplainRequest request) { return searchClient.explain(request); } @Override public void explain(ExplainRequest request, ActionListener<ExplainResponse> listener) { searchClient.explain(request, listener); } }