package com.wesabe.grendel.representations; import java.util.List; import javax.ws.rs.core.UriInfo; import org.codehaus.jackson.annotate.JsonGetter; import com.google.common.collect.Lists; import com.wesabe.grendel.entities.User; import com.wesabe.grendel.resources.UserResource; /** * A representation of a response containing information about a list of users. * <p> * Example JSON: * <pre> * { * "users":[ * { * "uri":"http://example.com/users/codahale", * "id":"codahale" * } * ] * } * </pre> * * @author coda */ public class UserListRepresentation { public static class UserListItem { private final UriInfo uriInfo; private final User user; public UserListItem(UriInfo uriInfo, User user) { this.uriInfo = uriInfo; this.user = user; } @JsonGetter("id") public String getId() { return user.getId(); } @JsonGetter("uri") public String getUri() { return uriInfo.getBaseUriBuilder() .path(UserResource.class) .build(user).toASCIIString(); } } private final UriInfo uriInfo; private final List<User> users; public UserListRepresentation(UriInfo uriInfo, List<User> users) { this.uriInfo = uriInfo; this.users = users; } @JsonGetter("users") public List<UserListItem> getUsers() { final List<UserListItem> items = Lists.newArrayListWithExpectedSize(users.size()); for (User user : users) { items.add(new UserListItem(uriInfo, user)); } return items; } }