package com.prateekj.snooper.networksnooper.model;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class HttpCall extends RealmObject implements IncrementalIdModel {
@PrimaryKey
private int id;
private String url;
private String payload;
private String method;
private String responseBody;
private String statusText;
private int statusCode;
private Date date;
private RealmList<HttpHeader> requestHeaders;
private RealmList<HttpHeader> responseHeaders;
public HttpCall() {
this.date = new Date();
}
public String getPayload() {
return payload;
}
public String getMethod() {
return method;
}
public String getUrl() {
return url;
}
public String getResponseBody() {
return responseBody;
}
public String getStatusText() {
return statusText;
}
public int getStatusCode() {
return statusCode;
}
public Date getDate() {
return date;
}
public List<HttpHeader> getRequestHeaders() {
return requestHeaders;
}
public HttpHeader getRequestHeader(final String name) {
return filterFromCollection(name, getRequestHeaders());
}
public List<HttpHeader> getResponseHeaders() {
return responseHeaders;
}
public HttpHeader getResponseHeader(final String name) {
return filterFromCollection(name, getResponseHeaders());
}
private HttpHeader filterFromCollection(final String name, List<HttpHeader> collection) {
Iterator<HttpHeader> iterator = Collections2.filter(collection, new Predicate<HttpHeader>() {
@Override
public boolean apply(HttpHeader header) {
return header.getName().equalsIgnoreCase(name);
}
}).iterator();
return iterator.hasNext() ? iterator.next() : null;
}
@Override
public Class getClazz() {
return HttpCall.class;
}
@Override
public void setId(int id) {
this.id = id;
}
public void setDate(Date date) {
this.date = date;
}
public int getId() {
return id;
}
public static class Builder {
private final HttpCall httpCall;
public Builder() {
httpCall = new HttpCall();
}
public Builder withMethod(String httpMethod) {
httpCall.method = httpMethod;
return this;
}
public Builder withUrl(String url) {
httpCall.url = url;
return this;
}
public HttpCall build() {
return httpCall;
}
public Builder withPayload(String payload) {
httpCall.payload = payload;
return this;
}
public Builder withResponseBody(String responseBody) {
httpCall.responseBody = responseBody;
return this;
}
public Builder withStatusText(String statusText) {
httpCall.statusText = statusText;
return this;
}
public Builder withStatusCode(int rawStatusCode) {
httpCall.statusCode = rawStatusCode;
return this;
}
public Builder withRequestHeaders(Map<String, List<String>> headers) {
RealmList<HttpHeader> realmList = new RealmList<>();
realmList.addAll(HttpHeader.from(headers));
httpCall.requestHeaders = realmList;
return this;
}
public Builder withResponseHeaders(Map<String, List<String>> headers) {
RealmList<HttpHeader> realmList = new RealmList<>();
realmList.addAll(HttpHeader.from(headers));
httpCall.responseHeaders = realmList;
return this;
}
}
}