@Override
public List<Presence> getPresence(Iterable<JID> jabberIds, JID fromJid) {
checkArgument(jabberIds != null, "Jabber ID list cannot be null");
BulkPresenceRequest request = new BulkPresenceRequest();
for (JID jabberId : jabberIds) {
request.addJid(jabberId.getId());
}
checkArgument(request.jids().size() != 0, "Jabber ID list cannot be empty");
if (fromJid != null) {
request.setFromJid(fromJid.getId());
}
byte[] responseBytes;
try {
responseBytes = ApiProxy.makeSyncCall(PACKAGE, "BulkGetPresence", request.toByteArray());
} catch (ApiProxy.ApplicationException ex) {
switch (XmppServiceError.ErrorCode.valueOf(ex.getApplicationError())) {
case INVALID_JID:
throw new IllegalArgumentException(
"One or more jabber ID is invalid: " + jabberIds.toString());
case NO_BODY:
case UNSPECIFIED_ERROR:
default:
throw new XMPPFailureException(
String.format("Unknown error [code %d] retrieving presence for jabber IDs: %s",
ex.getApplicationError(), jabberIds));
}
}
BulkPresenceResponse response = new BulkPresenceResponse();
response.mergeFrom(responseBytes);
ImmutableList.Builder<Presence> retVal = new ImmutableList.Builder<Presence>();
for (int i = 0; i < response.presenceResponseSize(); i++) {
PresenceResponse presenceResponse = response.getPresenceResponse(i);
retVal.add(presenceFromPresenceResponse(new JID(request.getJid(i)), fromJid, presenceResponse,
presenceResponse.isValid()));
}
return retVal.build();
}