001package org.xbib.elasticsearch.rest; 002 003import org.elasticsearch.ElasticsearchException; 004import org.elasticsearch.common.component.AbstractLifecycleComponent; 005import org.elasticsearch.common.inject.Inject; 006import org.elasticsearch.common.path.PathTrie; 007import org.elasticsearch.common.settings.Settings; 008import org.elasticsearch.rest.BytesRestResponse; 009import org.elasticsearch.rest.RestChannel; 010import org.elasticsearch.rest.RestHandler; 011import org.elasticsearch.rest.RestRequest; 012import org.elasticsearch.rest.support.RestUtils; 013import org.xbib.elasticsearch.http.netty.NettyHttpRequest; 014 015public class HttpPatchRestController extends AbstractLifecycleComponent<HttpPatchRestController> { 016 017 private final PathTrie<RestHandler> patchHandlers = new PathTrie<>(RestUtils.REST_DECODER); 018 019 @Inject 020 public HttpPatchRestController(Settings settings) { 021 super(settings); 022 } 023 024 @Override 025 protected void doStart() throws ElasticsearchException { 026 027 } 028 029 @Override 030 protected void doStop() throws ElasticsearchException { 031 032 } 033 034 @Override 035 protected void doClose() throws ElasticsearchException { 036 037 } 038 039 public void registerHandler(String method, String path, RestHandler handler) { 040 if ("PATCH".equalsIgnoreCase(method)) { 041 patchHandlers.insert(path, handler); 042 } 043 } 044 045 public void dispatchRequest(final RestRequest request, final RestChannel channel) { 046 try { 047 if (request instanceof NettyHttpRequest) { 048 NettyHttpRequest nettyHttpRequest = (NettyHttpRequest)request; 049 if ("PATCH".equalsIgnoreCase(nettyHttpRequest.getMethod())) { 050 RestHandler handler = patchHandlers.retrieve(request.rawPath()); 051 if (handler != null) { 052 handler.handleRequest(request, channel); 053 } 054 } 055 } 056 } catch (Throwable e) { 057 try { 058 channel.sendResponse(new BytesRestResponse(channel, e)); 059 } catch (Throwable e1) { 060 logger.error("failed to send failure response for uri [" + request.uri() + "]", e1); 061 } 062 } 063 } 064}