public void entriesUpdated(Collection<String> updatedIds) { try { synchronized (XMPPFriendConnectionImpl.this) { checkLoggedIn(); synchronized (friends) { Roster roster = connection.getRoster(); if (roster != null) { List<Friend> updatedFriends = new ArrayList<Friend>(); for (String id : updatedIds) { RosterEntry rosterEntry = roster.getEntry(id); XMPPFriendImpl friend = friends.get(id); if (friend == null) { // should never happen ? friend = new XMPPFriendImpl( id, rosterEntry, configuration, connection, featureRegistry); friends.put(id, friend); } else { friend.setRosterEntry(rosterEntry); } updatedFriends.add(friend); LOG.debugf("user {0} updated", friend); } rosterListeners.broadcast( new RosterEvent(updatedFriends, RosterEvent.Type.FRIENDS_UPDATED)); } } } } catch (org.jivesoftware.smack.XMPPException e) { LOG.debugf(e, "error getting roster"); } catch (FriendException e) { LOG.debugf(e, "error getting roster"); } }