/** * 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); }
/** * Notification that a Group user has been added. Update the group users' roster accordingly. * * @param group the group where the user was added. * @param addedUser the username of the user that has been added to the group. */ private void groupUserAdded(Group group, JID addedUser) { groupUserAdded(group, getAffectedUsers(group), addedUser); }
/** * Notification that a Group user has been deleted. Update the group users' roster accordingly. * * @param group the group from where the user was deleted. * @param deletedUser the username of the user that has been deleted from the group. */ private void groupUserDeleted(Group group, JID deletedUser) { groupUserDeleted(group, getAffectedUsers(group), deletedUser); }
@Override public boolean canProbePresence(JID prober, String probee) throws UserNotFoundException { if (probee.equals(prober.getNode()) && XMPPServer.getInstance().isLocal(prober)) { return true; } RosterItem item = rosterManager.getRoster(probee).getRosterItem(prober); return item.getSubStatus() == RosterItem.SUB_FROM || item.getSubStatus() == RosterItem.SUB_BOTH; }
/** * Returns true if roster item represents a rejected subscription request. * * @param item The roster item. * @return True, if the roster item represents a rejected subscription request. */ private static boolean isSubscriptionRejected(RosterItem item) { return item.getSubStatus() == RosterItem.SUB_NONE && item.getRecvStatus() == RosterItem.RECV_NONE && item.getAskStatus() == RosterItem.AskType.NONE; }
@Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { jid = (JID) ExternalizableUtil.getInstance().readSerializable(in); if (ExternalizableUtil.getInstance().readBoolean(in)) { nickname = ExternalizableUtil.getInstance().readSafeUTF(in); } this.groups = new LinkedList<>(); ExternalizableUtil.getInstance().readStrings(in, groups); ExternalizableUtil.getInstance().readStrings(in, sharedGroups); ExternalizableUtil.getInstance().readStrings(in, invisibleSharedGroups); recvStatus = RecvType.getTypeFromInt(ExternalizableUtil.getInstance().readInt(in)); subStatus = SubType.getTypeFromInt(ExternalizableUtil.getInstance().readInt(in)); askStatus = AskType.getTypeFromInt(ExternalizableUtil.getInstance().readInt(in)); rosterID = ExternalizableUtil.getInstance().readLong(in); } }
@Override public void writeExternal(ObjectOutput out) throws IOException { ExternalizableUtil.getInstance().writeSerializable(out, jid); ExternalizableUtil.getInstance().writeBoolean(out, nickname != null); if (nickname != null) { ExternalizableUtil.getInstance().writeSafeUTF(out, nickname); } ExternalizableUtil.getInstance().writeStrings(out, groups); ExternalizableUtil.getInstance().writeStrings(out, sharedGroups); ExternalizableUtil.getInstance().writeStrings(out, invisibleSharedGroups); ExternalizableUtil.getInstance().writeInt(out, recvStatus.getValue()); ExternalizableUtil.getInstance().writeInt(out, subStatus.getValue()); ExternalizableUtil.getInstance().writeInt(out, askStatus.getValue()); ExternalizableUtil.getInstance().writeLong(out, rosterID); }
@Override public void contactDeleted(Roster roster, RosterItem item) { JID rosterOwner = XMPPServer.getInstance().createJID(roster.getUsername(), null); JID deletedContact = item.getJid(); cancelSubscriptionToPEPService(deletedContact, rosterOwner); }
@Override public void contactAdded(Roster roster, RosterItem item) { // Set object again in cache. This is done so that other cluster nodes // get refreshed with latest version of the object rosterCache.put(roster.getUsername(), roster); }
/** * <p>Obtain the current ask status of the item.</p> * * @return The ask status of the item */ public AskType getAskStatus() { if (isShared()) { // Redefine the ask status since the item belongs to a shared group return ASK_NONE; } else { return askStatus; } }
public static AskType getTypeFromInt(int value) { for (AskType askType : values()) { if (askType.value == value) { return askType; } } return null; } }
public static RecvType getTypeFromInt(int value) { for (RecvType recvType : values()) { if (recvType.value == value) { return recvType; } } return null; } }
public static SubType getTypeFromInt(int value) { for (SubType subType : values()) { if (subType.value == value) { return subType; } } return null; } }
/** * 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 nickname The nickname for the roster entry (can be null). * @param push True if the new item must be push to the user. * @param persistent True if the new roster item should be persisted to the DB. * @param groups The list of groups to assign this roster item to (can be null) */ public RosterItem createRosterItem(JID user, String nickname, List<String> groups, boolean push, boolean persistent) throws UserAlreadyExistsException, SharedGroupException { return provideRosterItem(user, nickname, groups, push, persistent); }
/** * Notifies the listeners that a roster has just been loaded. * * @param roster the loaded roster. */ public static void rosterLoaded(Roster roster) { if (!listeners.isEmpty()) { for (RosterEventListener listener : listeners) { listener.rosterLoaded(roster); } } }
/** * Notifies the listeners that a contact has been added to a roster. * * @param roster the roster that was updated. * @param item the new roster item. */ public static void contactAdded(Roster roster, RosterItem item) { if (!listeners.isEmpty()) { for (RosterEventListener listener : listeners) { listener.contactAdded(roster, item); } } }
/** * Returns true if the the prober is allowed to see the presence of the probee. * * @param prober the user that is trying to probe the presence of another user. * @param probee the username of the uset that is being probed. * @return true if the the prober is allowed to see the presence of the probee. * @throws UserNotFoundException If the probee does not exist in the local server or the prober * is not present in the roster of the probee. */ private boolean canProbePresence(JID prober, JID probee) throws UserNotFoundException { Roster roster; roster = XMPPServer.getInstance().getRosterManager().getRoster(prober.getNode()); RosterItem item = roster.getRosterItem(probee); if (item.getSubStatus() == RosterItem.SUB_BOTH || item.getSubStatus() == RosterItem.SUB_FROM) { return true; } return false; }
@Override public void contactDeleted(Roster roster, RosterItem item) { // Set object again in cache. This is done so that other cluster nodes // get refreshed with latest version of the object rosterCache.put(roster.getUsername(), roster); } });
/** * Returns true if this item belongs ONLY to shared groups. This means that the the item is * considered to be "only shared" if it doesn't belong to a personal group but only to shared * groups. * * @return true if this item belongs ONLY to shared groups. */ public boolean isOnlyShared() { return isShared() && groups.isEmpty(); }
@Override public void contactUpdated(Roster roster, RosterItem item) { // Set object again in cache. This is done so that other cluster nodes // get refreshed with latest version of the object rosterCache.put(roster.getUsername(), roster); }