package br.com.caelum.restfulie.http.apache;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import br.com.caelum.restfulie.Link;
import br.com.caelum.restfulie.RestClient;
import br.com.caelum.restfulie.http.DefaultHeader;
import br.com.caelum.restfulie.http.DefaultRelation;
import br.com.caelum.restfulie.http.Headers;
public class ApacheHeaders implements Headers {
private final HttpResponse response;
private List<Link> links;
private final RestClient client;
public ApacheHeaders(HttpResponse response, RestClient client) {
this.response = response;
this.client = client;
this.links = new ArrayList<Link>();
}
public String getMain(String key) {
return getFirst(key).split(";")[0];
}
public List<String> get(String key) {
Header[] values = response.getHeaders(key);
List<String> list = new ArrayList<String>();
for(Header h : values) {
list.add(h.getValue());
}
return list;
}
public String getFirst(String key) {
Header[] headers = response.getHeaders(key);
return headers != null && headers.length > 0 ? get(key).get(0) : "";
}
//TODO doni rever testes
public List<Link> getLinks() {
if(links.isEmpty()) {
for ( String tempLinks : get("link")) {
for(String link : tempLinks.split(",")){
String[] split = link.split(";");
String href = split[0].trim().substring(1,split[0].trim().length()-1);
String rel = split[1].trim().substring(5,split[1].trim().length()-1);
this.links.add(new DefaultRelation(rel,href,"",client));
}
}
}
return links;
}
public Link getLink(String rel) {
getLinks();
for(Link link : links) {
if(link.getRel().equals(rel)) {
return link;
}
}
return null;
}
public Iterator<br.com.caelum.restfulie.http.Header> iterator() {
List<br.com.caelum.restfulie.http.Header> headers = new ArrayList<br.com.caelum.restfulie.http.Header>();
for(Header apacheHeader : response.getAllHeaders()) {
br.com.caelum.restfulie.http.Header h = new DefaultHeader(apacheHeader.getName(),apacheHeader.getValue());
headers.add(h);
}
return headers.iterator();
}
}