package com.wesabe.grendel.representations;
import java.util.List;
import java.util.Set;
import javax.ws.rs.core.UriInfo;
import org.codehaus.jackson.annotate.JsonGetter;
import org.codehaus.jackson.annotate.JsonIgnore;
import com.google.common.collect.Lists;
import com.wesabe.grendel.entities.Document;
import com.wesabe.grendel.resources.DocumentResource;
public class DocumentListRepresentation {
public static class DocumentListItem {
private final UriInfo uriInfo;
private final Document document;
public DocumentListItem(UriInfo uriInfo, Document document) {
this.uriInfo = uriInfo;
this.document = document;
}
@JsonGetter("name")
public String getName() {
return document.getName();
}
@JsonGetter("uri")
public String getURI() {
return uriInfo.getBaseUriBuilder()
.path(DocumentResource.class)
.build(document.getOwner(), document)
.toASCIIString();
}
}
private UriInfo uriInfo;
private Set<Document> documents;
public DocumentListRepresentation(UriInfo uriInfo, Set<Document> documents) {
this.uriInfo = uriInfo;
this.documents = documents;
}
@JsonGetter("documents")
public List<DocumentListItem> listDocuments() {
final List<DocumentListItem> items = Lists.newArrayListWithCapacity(documents.size());
for (Document doc : documents) {
items.add(new DocumentListItem(uriInfo, doc));
}
return items;
}
@JsonIgnore
public Set<Document> getDocuments() {
return documents;
}
@JsonIgnore
public UriInfo getUriInfo() {
return uriInfo;
}
}