* <p/>
* examples: /people/john.doe/@all /people/john.doe/@friends /people/john.doe/@self
*/
@Operation(httpMethods = "GET")
public Future<?> get(SocialRequestItem request) throws ProtocolException {
GroupId groupId = request.getGroup();
Set<String> optionalPersonId = ImmutableSet.copyOf(request.getListParameter("personId"));
Set<String> fields = request.getFields(Person.Field.DEFAULT_FIELDS);
Set<UserId> userIds = request.getUsers();
// Preconditions
HandlerPreconditions.requireNotEmpty(userIds, "No userId specified");
// // if (userIds.size() > 1 && !optionalPersonId.isEmpty()) {
// // throw new IllegalArgumentException("Cannot fetch personIds for multiple userIds");
// // }
CollectionOptions options = new CollectionOptions(request);
//// if (userIds.size() == 1) {
if (optionalPersonId.isEmpty()) {
if (groupId.getType() == GroupId.Type.self) {
// If a filter is set then we have to call getPeople(), otherwise use the simpler getPerson()
if (options != null && options.getFilter() != null) {
Future<RestfulCollection<Person>> people = personService.getPeople(
userIds, groupId, options, fields, request.getToken());
return FutureUtil.getFirstFromCollection(people);
} else {
return personService.getPerson(userIds.iterator().next(), fields, request.getToken());
}
} else {
return personService.getPeople(userIds, groupId, options, fields, request.getToken());
}
} else if (optionalPersonId.size() == 1) {
// TODO: Add some concept to handle the userId
Set<UserId> optionalUserIds = ImmutableSet.of(
new UserId(UserId.Type.userId, optionalPersonId.iterator().next()));
Future<RestfulCollection<Person>> people = personService.getPeople(
optionalUserIds, new GroupId(GroupId.Type.self, null),
options, fields, request.getToken());
return FutureUtil.getFirstFromCollection(people);
} else {
ImmutableSet.Builder<UserId> personIds = ImmutableSet.builder();
for (String pid : optionalPersonId) {
personIds.add(new UserId(UserId.Type.userId, pid));
}
// Every other case is a collection response of optional person ids
return personService.getPeople(personIds.build(), new GroupId(GroupId.Type.self, null),
options, fields, request.getToken());
}
//// }
// Every other case is a collection response.