/** * Returns the roster for the given username. * * @param username the username to search for. * @return the roster associated with the ID. * @throws org.jivesoftware.openfire.user.UserNotFoundException if the ID does not correspond * to a known entity on the server. */ public Roster getRoster(String username) throws UserNotFoundException { Roster roster = rosterCache.get(username); if (roster == null) { // Synchronize using a unique key so that other threads loading the User // and not the Roster cannot produce a deadlock synchronized ((username + MUTEX_SUFFIX).intern()) { roster = rosterCache.get(username); if (roster == null) { // Not in cache so load a new one: roster = new Roster(username); rosterCache.put(username, roster); } } } return roster; }
try { RosterItem item = getRosterItem(deletedUser); int groupSize = item.getSharedGroups().size() + item.getInvisibleSharedGroups().size(); if (item.isOnlyShared() && groupSize == 1) { deleteRosterItem(deletedUser, false); } else { GroupManager.getInstance().getGroups(getUserJID()); Collection<Group> sharedGroups = new ArrayList<>(); sharedGroups.addAll(item.getSharedGroups()); if (rosterManager.hasMutualVisibility(getUsername(), userGroups, deletedUser, sharedGroups)) { item.setSubStatus(RosterItem.SUB_BOTH); broadcast(item, false);
if (name != null && !"".equals(name)) { Roster roster = rosterManager.getRoster(name); roster.broadcastPresence(update);
/** * A shared group of the user has been renamed. Update the existing roster items with the new * name of the shared group and make a roster push for all the available resources. * * @param users group users of the renamed group. */ void shareGroupRenamed(Collection<JID> users) { JID userJID = getUserJID(); for (JID user : users) { if (userJID.equals(user)) { continue; } RosterItem item; try { // Get the RosterItem for the *local* user to add item = getRosterItem(user); // Broadcast to all the user resources of the updated roster item broadcast(item, true); } catch (UserNotFoundException e) { // Do nothing since the contact does not exist in the user's roster. (strange case!) Log.warn( "Unexpected error while broadcasting shared group rename for user '{}'!", user, e); } } }
for (RosterItem item : roster.getRosterItems()) { try { roster.deleteRosterItem(item.getJid(), false); roster.deleteRosterItem(user, false);
boolean newItem = false; try { if (roster.isRosterItem(target)) { item = roster.getRosterItem(target); item = roster.createRosterItem(target, false, true); newItem = true; roster.updateRosterItem(item); roster.broadcast(item, false);
try { item = getRosterItem(addedUser); Collection<Group> userGroups = GroupManager.getInstance().getGroups(getUserJID()); Collection<Group> sharedGroups = new ArrayList<>(); sharedGroups.addAll(item.getSharedGroups()); if (rosterManager.hasMutualVisibility(getUsername(), userGroups, addedUser, sharedGroups)) { item.setSubStatus(RosterItem.SUB_BOTH); else if (group.isUser(addedUser) && !group.isUser(getUsername())) { item.setSubStatus(RosterItem.SUB_TO); } else if (!group.isUser(addedUser) && group.isUser(getUsername())) { item.setSubStatus(RosterItem.SUB_FROM); broadcast(item, true); probePresence(item.getJid());
String latestVersion = String.valueOf( cachedRoster.hashCode() ); returnPacket = cachedRoster.getReset(); returnPacket.getChildElement().addAttribute("ver", latestVersion ); } else { returnPacket = cachedRoster.getReset(); returnPacket.setError(error); } else { if (cachedRoster.isRosterItem(item.getJID())) { RosterItem cachedItem = cachedRoster.getRosterItem(item.getJID()); cachedItem.setAsCopyOf(item); cachedRoster.updateRosterItem(cachedItem); } else { cachedRoster.createRosterItem(item);
continue; org.xmpp.packet.Roster.Ask ask = getAskStatus(item.getAskStatus()); org.xmpp.packet.Roster.Subscription sub = org.xmpp.packet.Roster.Subscription.valueOf(item.getSubStatus() .getName()); if (groups.contains(null)) { Log.warn("A group is null in roster item: " + item.getJid() + " of user: " + getUsername()); item.getRecvStatus() != RosterItem.RECV_SUBSCRIBE && !isSubscriptionRejected(item)) { roster.addItem(item.getJid(), item.getNickname(), ask, sub, groups);
JID recipient = item.getJID(); RosterItem removedItem = roster.deleteRosterItem(item.getJID(), true); RosterItem rosterItem = recipientRoster.getRosterItem(sender); recipientRoster.deleteRosterItem(sender, true); rosterItem.setRecvStatus(RosterItem.RECV_NONE); rosterItem.setSubStatus(RosterItem.SUB_NONE); recipientRoster.updateRosterItem(rosterItem);
roster.setType(IQ.Type.set); roster.addItem(item.getJid(), item.getNickname(), getAskStatus(item.getAskStatus()), org.xmpp.packet.Roster.Subscription.valueOf(item.getSubStatus().getName()), groups); broadcast(roster);
item.getRecvStatus() != RosterItem.RECV_SUBSCRIBE && !isSubscriptionRejected(item)) { broadcast(item, true);
roster.setType(IQ.Type.set); roster.addItem(user, org.xmpp.packet.Roster.Subscription.remove); broadcast(roster); RosterItem item = getImplicitRosterItem(user); if (item != null) { implicitFrom.remove(user.toBareJID());
/** * Returns true if the specified user is a member of the roster, false otherwise. * * @param user the user object to check. * @return true if the specified user is a member of the roster, false otherwise. */ public boolean isRosterItem(JID user) { // Optimization: Check if the contact has a FROM subscription due to shared groups // (only when not present in the rosterItems collection) return rosterItems.containsKey(user.toBareJID()) || getImplicitRosterItem(user) != null; }
roster.deleteSharedUser(group, deletedUser); deletedUserRoster.deleteSharedUser(userToUpdate, group);
roster.addSharedUser(group, newUserJID);
/** * Create a new item to the roster. Roster items may not be created that contain the same user * address as an existing item. * * @param user The item to add to the roster. * @param push True if the new item must be pushed to the user. * @param persistent True if the new roster item should be persisted to the DB. */ public RosterItem createRosterItem(JID user, boolean push, boolean persistent) throws UserAlreadyExistsException, SharedGroupException { return createRosterItem(user, null, null, push, persistent); }
try { item = getRosterItem(addedUser); newItem = false; } catch (UserNotFoundException e) { Collection<Group> userGroups = GroupManager.getInstance().getGroups(getUserJID()); if (rosterManager.hasMutualVisibility(getUsername(), userGroups, addedUser, groups)) { item.setSubStatus(RosterItem.SUB_BOTH); for (Group group : groups) { if (rosterManager.isGroupVisible(group, getUserJID())) { if (rosterManager.isGroupVisible(group, getUserJID())) { broadcast(item, true); probePresence(item.getJid());
String latestVersion = String.valueOf( cachedRoster.hashCode() ); returnPacket = cachedRoster.getReset(); returnPacket.getChildElement().addAttribute("ver", latestVersion ); } else { returnPacket = cachedRoster.getReset(); returnPacket.setError(error); } else { if (cachedRoster.isRosterItem(item.getJID())) { RosterItem cachedItem = cachedRoster.getRosterItem(item.getJID()); cachedItem.setAsCopyOf(item); cachedRoster.updateRosterItem(cachedItem); } else { cachedRoster.createRosterItem(item);