package com.wesabe.grendel.representations;
import java.util.List;
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.entities.User;
import com.wesabe.grendel.representations.UserListRepresentation.UserListItem;
import com.wesabe.grendel.resources.LinkedDocumentResource;
public class LinkedDocumentListRepresentation {
public static class DocumentListItem {
private final UriInfo uriInfo;
private final User user;
private final Document document;
public DocumentListItem(UriInfo uriInfo, User user, Document document) {
this.uriInfo = uriInfo;
this.user = user;
this.document = document;
}
@JsonGetter("name")
public String getName() {
return document.getName();
}
@JsonGetter("owner")
public UserListItem getOwner() {
return new UserListItem(uriInfo, document.getOwner());
}
@JsonGetter("uri")
public String getURI() {
return uriInfo.getBaseUriBuilder()
.path(LinkedDocumentResource.class)
.build(user, document.getOwner(), document)
.toASCIIString();
}
}
private final UriInfo uriInfo;
private final User user;
public LinkedDocumentListRepresentation(UriInfo uriInfo, User user) {
this.uriInfo = uriInfo;
this.user = user;
}
@JsonGetter("linked-documents")
public List<DocumentListItem> listDocuments() {
final List<DocumentListItem> items = Lists.newArrayList();
for (Document doc : user.getLinkedDocuments()) {
items.add(new DocumentListItem(uriInfo, user, doc));
}
return items;
}
@JsonIgnore
public User getUser() {
return user;
}
@JsonIgnore
public UriInfo getUriInfo() {
return uriInfo;
}
}