package ddth.dasp.hetty.message.protobuf;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import ddth.dasp.hetty.message.ICookie;
import ddth.dasp.hetty.message.IRequest;
import ddth.dasp.hetty.message.protobuf.HettyProtoBuf.NameValue;
public class ProtoBufRequest implements IRequest {
private HettyProtoBuf.RequestOrBuilder request;
public ProtoBufRequest(HettyProtoBuf.Request request) {
this.request = request;
}
public ProtoBufRequest(HettyProtoBuf.Request.Builder requestBuilder) {
this.request = requestBuilder;
}
/**
* {@inheritDoc}
*/
@Override
public byte[] serialize() {
if (request instanceof HettyProtoBuf.Request) {
return ((HettyProtoBuf.Request) request).toByteArray();
}
if (request instanceof HettyProtoBuf.Request.Builder) {
HettyProtoBuf.Request.Builder builder = ((HettyProtoBuf.Request.Builder) request)
.clone();
return builder.build().toByteArray();
}
return null;
}
/**
* {@inheritDoc}
*/
@Override
public String getId() {
return request.hasId() ? request.getId() : null;
}
/**
* {@inheritDoc}
*/
@Override
public String getResponseTopic() {
return request.hasResponseTopic() ? request.getResponseTopic() : null;
}
/**
* {@inheritDoc}
*/
@Override
public int getChannelId() {
return request.hasChannelId() ? request.getChannelId() : 0;
}
/**
* {@inheritDoc}
*/
@Override
public long getTimestampNano() {
return request.hasTimestampNano() ? request.getTimestampNano() : 0;
}
/**
* {@inheritDoc}
*/
@Override
public String getMethod() {
return request.hasMethod() ? request.getMethod() : null;
}
/**
* {@inheritDoc}
*/
@Override
public String getUri() {
return request.hasUri() ? request.getUri() : null;
}
/**
* {@inheritDoc}
*/
@Override
public String getDomain() {
return request.hasDomain() ? request.getDomain() : null;
}
/**
* {@inheritDoc}
*/
@Override
public int getPort() {
return request.hasPort() ? request.getPort() : 0;
}
/**
* {@inheritDoc}
*/
@Override
public String getPath() {
return request.hasPath() ? request.getPath() : null;
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, String> getUrlParams() {
Map<String, String> urlParams = new HashMap<String, String>();
List<HettyProtoBuf.NameValue> urlParamsList = request.getUrlParamsList();
if (urlParamsList != null) {
for (NameValue param : urlParamsList) {
urlParams.put(param.getName(), param.getValue());
}
}
return urlParams;
}
/**
* {@inheritDoc}
*/
@Override
public String[] getPathParams() {
List<String> pathParams = request.getPathParamsList();
return pathParams != null ? pathParams.toArray(ArrayUtils.EMPTY_STRING_ARRAY)
: ArrayUtils.EMPTY_STRING_ARRAY;
}
/**
* {@inheritDoc}
*/
@Override
public ICookie getCookie(String name) {
ICookie[] cookies = getCookies();
for (ICookie cookie : cookies) {
if (cookie.getName().equals(name)) {
return cookie;
}
}
return null;
}
/**
* {@inheritDoc}
*/
@Override
public ICookie[] getCookies() {
List<ICookie> cookies = new ArrayList<ICookie>();
List<HettyProtoBuf.Cookie> cookieList = request.getCookiesList();
if (cookieList != null) {
for (HettyProtoBuf.Cookie cookie : cookieList) {
cookies.add(new ProtoBufCookie(cookie));
}
}
return cookies.toArray(new ICookie[0]);
}
/**
* {@inheritDoc}
*/
@Override
public String getHeader(String name) {
List<HettyProtoBuf.NameValue> headersList = request.getHeadersList();
if (headersList != null) {
for (NameValue header : headersList) {
if (name.equals(header.getName())) {
return header.getValue();
}
}
}
return null;
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, String> getHeaders() {
Map<String, String> headers = new HashMap<String, String>();
List<HettyProtoBuf.NameValue> headersList = request.getHeadersList();
if (headersList != null) {
for (NameValue header : headersList) {
headers.put(header.getName(), header.getValue());
}
}
return headers;
}
/**
* {@inheritDoc}
*/
@Override
public byte[] getContent() {
return request.hasContent() ? request.getContent().toByteArray() : null;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isChunk() {
return request.hasIsChunk() ? request.getIsChunk() : false;
}
/**
* {@inheritDoc}
*/
@Override
public int getChunkSequence() {
return request.hasChunkSeq() ? request.getChunkSeq() : 0;
}
}