Fixing role behavior and role change reporting, as previous role info is missing when role change occurs.

cusax-fix
Damian Minkov 16 years ago
parent ff6b63415c
commit fc36d2bc9d

@ -101,8 +101,8 @@ public class ChatRoomJabberImpl
/**
* The list of members of this chat room.
*/
private final Hashtable<String, ChatRoomMember> members
= new Hashtable<String, ChatRoomMember>();
private final Hashtable<String, ChatRoomMemberJabberImpl> members
= new Hashtable<String, ChatRoomMemberJabberImpl>();
/**
* The list of banned members of this chat room.
@ -622,16 +622,16 @@ else if (smackRole.equalsIgnoreCase("participant"))
* @return the <tt>ChatRoomMember</tt> corresponding to the given smack
* participant
*/
public ChatRoomMember smackParticipantToScMember(String participant)
public ChatRoomMemberJabberImpl smackParticipantToScMember(String participant)
{
String participantName = StringUtils.parseResource(participant);
Iterator<ChatRoomMember> chatRoomMembers =
Iterator<ChatRoomMemberJabberImpl> chatRoomMembers =
this.members.values().iterator();
while(chatRoomMembers.hasNext())
{
ChatRoomMember member = chatRoomMembers.next();
ChatRoomMemberJabberImpl member = chatRoomMembers.next();
if(participantName.equals(member.getName())
|| participant.equals(member.getContactAddress()))
@ -807,7 +807,8 @@ public void banned(String participant, String actor, String reason)
logger.info(participant + " has been banned from "
+ getName() + " chat room.");
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
@ -818,7 +819,7 @@ public void banned(String participant, String actor, String reason)
banList.put(participant, member);
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.OUTCAST);
}
@ -832,12 +833,13 @@ public void banned(String participant, String actor, String reason)
*/
public void adminGranted(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.ADMINISTRATOR);
}
@ -852,12 +854,13 @@ public void adminGranted(String participant)
*/
public void adminRevoked(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.MEMBER);
}
@ -957,7 +960,7 @@ public void nicknameChanged(String participant, String newNickname)
String participantName = StringUtils.parseResource(participant);
// chnage the member key
ChatRoomMember mem = members.remove(participantName);
ChatRoomMemberJabberImpl mem = members.remove(participantName);
members.put(newNickname, mem);
ChatRoomMemberPropertyChangeEvent evt
@ -981,12 +984,13 @@ public void nicknameChanged(String participant, String newNickname)
*/
public void ownershipRevoked(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.MEMBER);
}
@ -1032,12 +1036,13 @@ public void kicked(String participant, String actor, String reason)
*/
public void moderatorGranted(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.MODERATOR);
}
@ -1051,12 +1056,13 @@ public void moderatorGranted(String participant)
*/
public void voiceRevoked(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.SILENT_MEMBER);
}
@ -1069,12 +1075,13 @@ public void voiceRevoked(String participant)
*/
public void membershipGranted(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.MEMBER);
}
@ -1089,12 +1096,13 @@ public void membershipGranted(String participant)
*/
public void moderatorRevoked(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.MEMBER);
}
@ -1108,12 +1116,13 @@ public void moderatorRevoked(String participant)
*/
public void voiceGranted(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.MEMBER);
}
@ -1128,12 +1137,13 @@ public void voiceGranted(String participant)
*/
public void membershipRevoked(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.GUEST);
}
@ -1147,12 +1157,13 @@ public void membershipRevoked(String participant)
*/
public void ownershipGranted(String participant)
{
ChatRoomMember member = smackParticipantToScMember(participant);
ChatRoomMemberJabberImpl member =
smackParticipantToScMember(participant);
if(member == null)
return;
fireMemberRoleEvent(member, member.getRole(),
fireMemberRoleEvent(member, member.getCurrentRole(),
ChatRoomMemberRole.OWNER);
}
}

@ -80,6 +80,9 @@ public ChatRoomMemberJabberImpl(ChatRoomJabberImpl containingChatRoom,
// If we have found a contact we set also its avatar.
if (contact != null)
this.avatar = contact.getImage();
// just query the stack for role, if its present will be set
getRole();
}
/**
* Returns the chat room that this member is participating in.
@ -164,6 +167,17 @@ public ChatRoomMemberRole getRole()
return role;
}
/**
* Returns the current role without trying to query it in the stack.
* Mostly used for event creating on member role change.
*
* @return the current role of this member.
*/
ChatRoomMemberRole getCurrentRole()
{
return this.role;
}
/**
* Sets the role of this member.
* @param role the role to set

@ -378,9 +378,9 @@ public static Test suite()
// new TestOperationSetMultiUserChat2("testGrantMembership"));
suite.addTest(new TestOperationSetMultiUserChat2("testGrantModerator"));
suite.addTest(new TestOperationSetMultiUserChat2("testRevokeVoice"));
suite.addTest(new TestOperationSetMultiUserChat2("testGrantVoice"));
suite.addTest(
@ -1378,6 +1378,8 @@ public void testGrantMembership()
public void testGrantModerator()
throws OperationFailedException, OperationNotSupportedException
{
logger.info("---= Start test for GrantModerator =---");
String roomName = testRoomBaseName + roomID;
ChatRoom roomUser1 = opSetMUC1.findRoom(roomName);
assertNotNull("The room can't be retrieved on user1's side", roomUser1);
@ -1442,6 +1444,8 @@ public void testGrantModerator()
public void testRevokeVoice()
throws OperationFailedException, OperationNotSupportedException
{
logger.info("---= Start test for RevokeVoice =---");
String roomName = testRoomBaseName + roomID;
ChatRoom roomUser1 = opSetMUC1.findRoom(roomName);
assertNotNull("The room can't be retrieved on user1's side", roomUser1);
@ -1510,6 +1514,8 @@ public void testRevokeVoice()
public void testGrantVoice()
throws OperationFailedException, OperationNotSupportedException
{
logger.info("---= Start test for GrantVoice =---");
String roomName = testRoomBaseName + roomID;
ChatRoom roomUser1 = opSetMUC1.findRoom(roomName);
assertNotNull("The room can't be retrieved on user1's side", roomUser1);

Loading…
Cancel
Save