public Map<String, Object> convertToRoomSpec(MUCRoom room) { Map<String, Object> roomSpec = new HashMap(); roomSpec.put("naturalLanguageName", room.getNaturalLanguageName()); roomSpec.put("name", room.getName()); roomSpec.put("description", room.getDescription()); roomSpec.put("canAnyoneDiscoverJID", room.canAnyoneDiscoverJID()); roomSpec.put("canChangeNickname", room.canChangeNickname()); roomSpec.put("canOccupantsChangeSubject", room.canOccupantsChangeSubject()); roomSpec.put("canOccupantsInvite", room.canOccupantsInvite()); roomSpec.put("publicRoom", room.isPublicRoom()); roomSpec.put("password", room.getPassword()); roomSpec.put("ID", room.getID()); roomSpec.put("persistent", room.isPersistent()); roomSpec.put("registrationEnabled", room.isRegistrationEnabled()); roomSpec.put("logEnabled", room.isLogEnabled()); roomSpec.put("loginRestrictedToNickname", room.isLoginRestrictedToNickname()); roomSpec.put("maxUsers", room.getMaxUsers()); roomSpec.put("membersOnly", room.isMembersOnly()); roomSpec.put("moderated", room.isModerated()); roomSpec.put("owners", convertJIDsToStringList(room.getOwners())); roomSpec.put("admins", convertJIDsToStringList(room.getAdmins())); roomSpec.put("members", convertJIDsToStringList(room.getMembers())); roomSpec.put("outcasts", convertJIDsToStringList(room.getOutcasts())); roomSpec.put("broadcastPresenceRoles", room.getRolesToBroadcastPresence()); roomSpec.put("creationDate", room.getCreationDate()); roomSpec.put("modificationDate", room.getModificationDate()); return roomSpec; }
private void setRoles(MUCRoom room, Map<String, Object> roomSpec) throws Exception { List<JID> roles = new ArrayList<JID>(); Collection<JID> owners = new ArrayList<JID>(); Collection<JID> existingOwners = new ArrayList<JID>(); List<String> specOwners = (List) roomSpec.get("owners"); List<String> specAdmins = (List) roomSpec.get("admins"); List<String> specMembers = (List) roomSpec.get("members"); List<String> specOutcasts = (List) roomSpec.get("outcasts"); List<JID> mucRoomEntityOwners = convertStringsToJIDs(specOwners); owners.addAll(room.getOwners()); // Find same owners for (JID jid : owners) { if (mucRoomEntityOwners.contains(jid)) { existingOwners.add(jid); } } // Don't delete the same owners owners.removeAll(existingOwners); room.addOwners(convertStringsToJIDs(specOwners), room.getRole()); // Collect all roles to reset roles.addAll(owners); roles.addAll(room.getAdmins()); roles.addAll(room.getMembers()); roles.addAll(room.getOutcasts()); for (JID jid : roles) { room.addNone(jid, room.getRole()); } room.addOwners(convertStringsToJIDs(specOwners), room.getRole()); if (specAdmins != null) { room.addAdmins(convertStringsToJIDs(specAdmins), room.getRole()); } if (specMembers != null) { for (String memberJid : specMembers) { room.addMember(new JID(memberJid), null, room.getRole()); } } if (specOutcasts != null) { for (String outcastJid : specOutcasts) { room.addOutcast(new JID(outcastJid), null, room.getRole()); } } }