001package org.xbib.elasticsearch.http.netty;
002
003import org.elasticsearch.common.unit.TimeValue;
004import org.elasticsearch.common.xcontent.XContentBuilder;
005import org.xbib.elasticsearch.websocket.InteractiveRequest;
006import org.xbib.elasticsearch.websocket.client.WebSocketClient;
007import org.xbib.elasticsearch.websocket.client.WebSocketClientRequest;
008
009import java.io.IOException;
010import java.util.Map;
011
012/**
013 * Netty implemenation for an interactive request.
014 * At the same time, this class serves as an implementation
015 * for a WebSocket client request.
016 */
017public class NettyInteractiveRequest implements InteractiveRequest, WebSocketClientRequest {
018
019    protected String type;
020
021    protected Map<String, Object> data;
022
023    protected XContentBuilder builder;
024
025    public NettyInteractiveRequest() {
026    }
027
028    public NettyInteractiveRequest(Map<String, Object> data) {
029        this.data = data;
030    }
031
032    @Override
033    public NettyInteractiveRequest type(String type) {
034        this.type = type;
035        return this;
036    }
037
038    @Override
039    public NettyInteractiveRequest data(XContentBuilder builder) {
040        this.builder = builder;
041        return this;
042    }
043
044    @Override
045    public void send(WebSocketClient client) throws IOException {
046        client.send(new NettyInteractiveResponse(type, builder).response());
047    }
048
049    @Override
050    public Map<String, Object> asMap() {
051        return data;
052    }
053
054    @Override
055    public boolean hasParam(String key) {
056        return data.containsKey(key);
057    }
058
059    @Override
060    public Object param(String key) {
061        return data.get(key);
062    }
063
064    @Override
065    public String paramAsString(String key) {
066        Object o = param(key);
067        return o != null ? o.toString() : null;
068    }
069
070    @Override
071    public String paramAsString(String key, String defaultValue) {
072        Object o = param(key);
073        return o != null ? o.toString() : defaultValue;
074    }
075
076    @Override
077    public long paramAsLong(String key) {
078        Object o = param(key);
079        try {
080            return o != null ? Long.parseLong(o.toString()) : null;
081        } catch (NumberFormatException e) {
082            return 0L;
083        }
084    }
085
086    @Override
087    public long paramAsLong(String key, long defaultValue) {
088        Object o = param(key);
089        try {
090            return o != null ? Long.parseLong(o.toString()) : defaultValue;
091        } catch (NumberFormatException e) {
092            return defaultValue;
093        }
094    }
095
096    @Override
097    public boolean paramAsBoolean(String key) {
098        Object o = param(key);
099        return o != null ? Boolean.getBoolean(o.toString()) : null;
100    }
101
102    @Override
103    public boolean paramAsBoolean(String key, boolean defaultValue) {
104        Object o = param(key);
105        return o != null ? Boolean.getBoolean(o.toString()) : defaultValue;
106    }
107
108    @Override
109    public TimeValue paramAsTime(String key) {
110        Object o = param(key);
111        return o != null ? TimeValue.parseTimeValue(o.toString(), null) : null;
112    }
113
114    @Override
115    public TimeValue paramAsTime(String key, TimeValue defaultValue) {
116        Object o = param(key);
117        return o != null ? TimeValue.parseTimeValue(o.toString(), defaultValue) : defaultValue;
118    }
119}