You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2010/08/08 23:10:16 UTC
svn commit: r983483 [1/2] - in
/mina/vysper/trunk/server/extensions/xep0045-muc/src:
main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/
main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/
main/java/org/apache/vysp...
Author: ngn
Date: Sun Aug 8 21:10:15 2010
New Revision: 983483
URL: http://svn.apache.org/viewvc?rev=983483&view=rev
Log:
Implemented change affiliation use cases (VYSPER-130, VYSPER-132, VYSPER-133, VYSPER-142, VYSPER-143, VYSPER-145, VYSPER-146)
Refactored test cases (needs more work)
Added:
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserItem.java
- copied, changed from r958281, mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractAffiliationTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractGrantRevokeTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/BanUserTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/GrantAdminTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/GrantMembershipTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/GrantOwnershipTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/RevokeAdminTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/RevokeMembershipTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/RevokeOwnershipTestCase.java
Removed:
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java
Modified:
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Affiliation.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessage.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeSubjectTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/GrantModeratorTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/GrantVoiceTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MessageTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ModeratorKickOccupantTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/RevokeModeratorTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/RevokeVoiceTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionHistoryTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessageTestCase.java
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTestCase.java
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java Sun Aug 8 21:10:15 2010
@@ -19,9 +19,11 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+import org.apache.vysper.xml.fragment.Renderer;
import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xml.fragment.XMLSemanticError;
import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.addressing.EntityFormatException;
import org.apache.vysper.xmpp.addressing.EntityImpl;
import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy;
@@ -32,8 +34,9 @@ import org.apache.vysper.xmpp.modules.ex
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.IqAdminItem;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserItem;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
@@ -72,7 +75,7 @@ public class MUCIqAdminHandler extends D
}
private Entity roomAndNick(Room room, Occupant occupant) {
- return new EntityImpl(room.getJID(), occupant.getName());
+ return new EntityImpl(room.getJID(), occupant.getNick());
}
@Override
@@ -86,29 +89,31 @@ public class MUCIqAdminHandler extends D
// only moderators are allowed to continue
return MUCHandlerHelper.createErrorReply(stanza, StanzaErrorType.AUTH, StanzaErrorCondition.FORBIDDEN);
}
-
try {
XMLElement query = stanza.getSingleInnerElementsNamed("query", NamespaceURIs.XEP0045_MUC_ADMIN);
XMLElement itemElement = query.getSingleInnerElementsNamed("item", NamespaceURIs.XEP0045_MUC_ADMIN);
- IqAdminItem item = IqAdminItem.getWrapper(itemElement);
-
- Occupant target = null;
- if (item.getNick() != null) {
- target = room.findOccupantByNick(item.getNick());
- } else {
- return createBadRequestError(stanza, serverRuntimeContext, sessionContext, "Missing nick for item");
+ IqAdminItem item;
+ try {
+ item = IqAdminItem.getWrapper(itemElement);
+ } catch (EntityFormatException e) {
+ return createBadRequestError(stanza, serverRuntimeContext, sessionContext,
+ "Invalid JID");
}
+
if (item.getRole() != null) {
- return changeRole(stanza, serverRuntimeContext, sessionContext, item, room, moderator, target);
+ return changeRole(stanza, serverRuntimeContext, sessionContext, item, room, moderator);
+ } else if(item.getAffiliation() != null) {
+ return changeAffiliation(stanza, serverRuntimeContext, sessionContext, item, room, moderator);
} else {
return createBadRequestError(stanza, serverRuntimeContext, sessionContext, "Unknown IQ stanza");
}
} catch (XMLSemanticError e) {
+ e.printStackTrace();
return createBadRequestError(stanza, serverRuntimeContext, sessionContext,
- "iq stanza of type set requires exactly one query element");
+ "Invalid IQ stanza");
}
}
@@ -116,12 +121,131 @@ public class MUCIqAdminHandler extends D
private Stanza createBadRequestError(IQStanza stanza, ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext, String message) {
return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.BAD_REQUEST, stanza,
- StanzaErrorType.MODIFY, "iq stanza of type set requires exactly one query element",
+ StanzaErrorType.MODIFY, message,
getErrorLanguage(serverRuntimeContext, sessionContext), null);
}
+
+ private Stanza changeAffiliation(IQStanza stanza, ServerRuntimeContext serverRuntimeContext,
+ SessionContext sessionContext, IqAdminItem item, Room room, Occupant moderator) {
+ // only allowed by admins and owners
+ if(moderator.getAffiliation() != Affiliation.Admin && moderator.getAffiliation() != Affiliation.Owner) {
+ return MUCHandlerHelper.createErrorReply(stanza, StanzaErrorType.CANCEL,
+ StanzaErrorCondition.NOT_ALLOWED);
+ }
+
+
+ Entity target = null;
+
+ if (item.getNick() != null) {
+ target = room.findOccupantByNick(item.getNick()).getJid();
+ } else {
+ try {
+ if(item.getJid() != null) {
+ target = item.getJid();
+ } else {
+ return createBadRequestError(stanza, serverRuntimeContext, sessionContext, "Missing nick for item");
+ }
+ } catch (EntityFormatException e) {
+ return createBadRequestError(stanza, serverRuntimeContext, sessionContext, "Invalid JID");
+ }
+ }
+
+ Affiliation currentAffiliation = room.getAffiliations().getAffiliation(target);
+ Affiliation newAffiliation = item.getAffiliation();
+
+ // if the target is present in the room, we need to send presence updates
+ // otherwise we should send messages
+ Occupant targetOccupant = room.findOccupantByJID(target);
+
+ // notify remaining users that user got affiliation updated
+ PresenceStanzaType presenceType = null;
+ Status status = null;
+ Role newRole;
+ Entity from;
+ if(targetOccupant != null) {
+ newRole = targetOccupant.getRole();
+ from = roomAndNick(room, targetOccupant);
+ } else {
+ newRole = Role.None;
+ from = room.getJID();
+
+ }
+
+ // only owners can revoke ownership and admin
+ if((currentAffiliation == Affiliation.Owner || currentAffiliation == Affiliation.Admin) && moderator.getAffiliation() != Affiliation.Owner) {
+ return MUCHandlerHelper.createErrorReply(stanza, StanzaErrorType.CANCEL,
+ StanzaErrorCondition.NOT_ALLOWED);
+ }
+
+ // if the occupant is getting revoke as a member, and this is a members-only room, he also needs to leave the room
+ if((newAffiliation == Affiliation.None && room.isRoomType(RoomType.MembersOnly)) || newAffiliation == Affiliation.Outcast) {
+ if(newAffiliation == Affiliation.Outcast && targetOccupant.getAffiliation().compareTo(moderator.getAffiliation()) < 0) {
+ return MUCHandlerHelper.createErrorReply(stanza, StanzaErrorType.CANCEL,
+ StanzaErrorCondition.NOT_ALLOWED);
+ }
+
+ if(targetOccupant != null) {
+ room.removeOccupant(target);
+ }
+ presenceType = PresenceStanzaType.UNAVAILABLE;
+
+ if(newAffiliation == Affiliation.Outcast) {
+ status = new Status(StatusCode.BEEN_BANNED);
+ } else {
+ status = new Status(StatusCode.REMOVED_BY_AFFILIATION);
+ }
+
+ newRole = Role.None;
+
+ MucUserItem presenceItem = new MucUserItem(newAffiliation, newRole);
+
+ Stanza presenceToFormerMember = MUCStanzaBuilder.createPresenceStanza(from, targetOccupant.getJid(),
+ presenceType, NamespaceURIs.XEP0045_MUC_USER, presenceItem, status);
+
+ relayStanza(targetOccupant.getJid(), presenceToFormerMember, serverRuntimeContext);
+ } else if(newAffiliation == Affiliation.Owner || newAffiliation == Affiliation.Admin) {
+ if(moderator.getAffiliation() != Affiliation.Owner) {
+ return MUCHandlerHelper.createErrorReply(stanza, StanzaErrorType.CANCEL,
+ StanzaErrorCondition.NOT_ALLOWED);
+ }
+ }
+ room.getAffiliations().add(target, newAffiliation);
+
+
+ if(targetOccupant != null) {
+ MucUserItem presenceItem = new MucUserItem(newAffiliation, newRole);
+ for (Occupant occupant : room.getOccupants()) {
+ Stanza presenceToRemaining = MUCStanzaBuilder.createPresenceStanza(from, occupant.getJid(),
+ presenceType, NamespaceURIs.XEP0045_MUC_USER, presenceItem, status);
+
+ relayStanza(occupant.getJid(), presenceToRemaining, serverRuntimeContext);
+ }
+ } else {
+ room.getAffiliations().add(target, newAffiliation);
+
+ MucUserItem presenceItem = new MucUserItem(target, null, newAffiliation, Role.None);
+ for (Occupant occupant : room.getOccupants()) {
+ StanzaBuilder builder = MUCStanzaBuilder.createMessageStanza(room.getJID(), occupant.getJid(), null, null);
+ builder.addPreparedElement(presenceItem);
+
+ relayStanza(occupant.getJid(), builder.build(), serverRuntimeContext);
+ }
+
+ }
+
+ return StanzaBuilder.createIQStanza(stanza.getTo(), stanza.getFrom(), IQStanzaType.RESULT, stanza.getID())
+ .build();
+ }
private Stanza changeRole(IQStanza stanza, ServerRuntimeContext serverRuntimeContext,
- SessionContext sessionContext, IqAdminItem item, Room room, Occupant moderator, Occupant target) {
+ SessionContext sessionContext, IqAdminItem item, Room room, Occupant moderator) {
+ Occupant target = null;
+ if (item.getNick() != null) {
+ target = room.findOccupantByNick(item.getNick());
+ } else {
+ return createBadRequestError(stanza, serverRuntimeContext, sessionContext, "Missing nick for item");
+ }
+
Role newRole = item.getRole();
// you can not change yourself
@@ -177,7 +301,7 @@ public class MUCIqAdminHandler extends D
// notify user he got kicked
Stanza presenceToKicked = MUCStanzaBuilder.createPresenceStanza(targetInRoom, target.getJid(),
- PresenceStanzaType.UNAVAILABLE, NamespaceURIs.XEP0045_MUC_USER, new MucUserPresenceItem(
+ PresenceStanzaType.UNAVAILABLE, NamespaceURIs.XEP0045_MUC_USER, new MucUserItem(
Affiliation.None, Role.None),
// TODO handle <actor>
// TODO handle <reason>
@@ -189,7 +313,7 @@ public class MUCIqAdminHandler extends D
PresenceStanzaType availType = (newRole == Role.None) ? PresenceStanzaType.UNAVAILABLE : null;
// notify remaining users that user got role updated
- MucUserPresenceItem presenceItem = new MucUserPresenceItem(target.getAffiliation(), newRole);
+ MucUserItem presenceItem = new MucUserItem(target.getAffiliation(), newRole);
for (Occupant occupant : room.getOccupants()) {
Stanza presenceToRemaining = MUCStanzaBuilder.createPresenceStanza(targetInRoom, occupant.getJid(),
availType, NamespaceURIs.XEP0045_MUC_USER, presenceItem, status);
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java Sun Aug 8 21:10:15 2010
@@ -110,7 +110,7 @@ public class MUCMessageHandler extends D
// sender must be participant in room
if (sendingOccupant != null) {
- Entity roomAndSendingNick = new EntityImpl(room.getJID(), sendingOccupant.getName());
+ Entity roomAndSendingNick = new EntityImpl(room.getJID(), sendingOccupant.getNick());
if (sendingOccupant.hasVoice()) {
// relay message to all occupants in room
@@ -169,7 +169,7 @@ public class MUCMessageHandler extends D
// must be sent to an existing occupant in the room
if (receivingOccupant != null) {
- Entity roomAndSendingNick = new EntityImpl(room.getJID(), sendingOccupant.getName());
+ Entity roomAndSendingNick = new EntityImpl(room.getJID(), sendingOccupant.getNick());
logger.debug("Relaying message to {}", receivingOccupant);
List<Attribute> replaceAttributes = new ArrayList<Attribute>();
replaceAttributes.add(new Attribute("from", roomAndSendingNick.getFullQualifiedName()));
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java Sun Aug 8 21:10:15 2010
@@ -40,7 +40,7 @@ import org.apache.vysper.xmpp.modules.ex
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.History;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserItem;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
@@ -138,7 +138,7 @@ public class MUCPresenceHandler extends
// occupant is already in room
Occupant occupant = room.findOccupantByJID(newOccupantJid);
- if (nick.equals(occupant.getName())) {
+ if (nick.equals(occupant.getNick())) {
// nick unchanged, change show and status
for (Occupant receiver : room.getOccupants()) {
sendChangeShowStatus(occupant, receiver, room, getInnerElementText(stanza, "show"),
@@ -150,9 +150,9 @@ public class MUCPresenceHandler extends
return createPresenceErrorStanza(roomJid, newOccupantJid, stanza.getID(), "cancel", "conflict");
}
- String oldNick = occupant.getName();
+ String oldNick = occupant.getNick();
// update the nick
- occupant.setName(nick);
+ occupant.setNick(nick);
// send out unavailable presences to all existing occupants
for (Occupant receiver : room.getOccupants()) {
@@ -187,15 +187,11 @@ public class MUCPresenceHandler extends
}
}
- Occupant newOccupant = room.addOccupant(newOccupantJid, nick);
- if (newOccupant == null) {
- // outcast
- return createPresenceErrorStanza(roomJid, newOccupantJid, stanza.getID(), "auth", "forbidden");
- }
- if (room.isRoomType(RoomType.MembersOnly) && newOccupant.getAffiliation() == Affiliation.None) {
- // non-member can not enter members only room
- return createPresenceErrorStanza(roomJid, newOccupantJid, stanza.getID(), "auth",
- "registration-required");
+ Occupant newOccupant;
+ try {
+ newOccupant = room.addOccupant(newOccupantJid, nick);
+ } catch(RuntimeException e) {
+ return createPresenceErrorStanza(roomJid, newOccupantJid, stanza.getID(), "auth", e.getMessage());
}
// relay presence of all existing room occupants to the now joined occupant
@@ -272,9 +268,9 @@ public class MUCPresenceHandler extends
return;
}
- Entity roomAndOccupantNick = new EntityImpl(room.getJID(), existingOccupant.getName());
+ Entity roomAndOccupantNick = new EntityImpl(room.getJID(), existingOccupant.getNick());
Stanza presenceToNewOccupant = MUCStanzaBuilder.createPresenceStanza(roomAndOccupantNick, newOccupant.getJid(),
- null, NamespaceURIs.XEP0045_MUC_USER, new MucUserPresenceItem(existingOccupant.getAffiliation(),
+ null, NamespaceURIs.XEP0045_MUC_USER, new MucUserItem(existingOccupant.getAffiliation(),
existingOccupant.getRole()));
logger.debug("Room presence from {} sent to {}", newOccupant, roomAndOccupantNick);
@@ -283,14 +279,14 @@ public class MUCPresenceHandler extends
private void sendNewOccupantPresenceToExisting(Occupant newOccupant, Occupant existingOccupant, Room room,
ServerRuntimeContext serverRuntimeContext) {
- Entity roomAndNewUserNick = new EntityImpl(room.getJID(), newOccupant.getName());
+ Entity roomAndNewUserNick = new EntityImpl(room.getJID(), newOccupant.getNick());
List<XMLElement> inner = new ArrayList<XMLElement>();
// room is non-anonymous or semi-anonymous and the occupant a moderator, send full user JID
boolean includeJid = room.getRoomTypes().contains(RoomType.NonAnonymous)
|| (room.getRoomTypes().contains(RoomType.SemiAnonymous) && existingOccupant.getRole() == Role.Moderator);
- inner.add(new MucUserPresenceItem(newOccupant, includeJid, false));
+ inner.add(new MucUserItem(newOccupant, includeJid, false));
if (existingOccupant.getJid().equals(newOccupant.getJid())) {
@@ -317,7 +313,7 @@ public class MUCPresenceHandler extends
List<XMLElement> inner = new ArrayList<XMLElement>();
boolean includeJid = includeJidInItem(room, receiver);
- inner.add(new MucUserPresenceItem(changer, includeJid, true));
+ inner.add(new MucUserItem(changer, includeJid, true));
inner.add(new Status(StatusCode.NEW_NICK));
if (receiver.getJid().equals(changer.getJid())) {
@@ -333,7 +329,7 @@ public class MUCPresenceHandler extends
private void sendChangeShowStatus(Occupant changer, Occupant receiver, Room room, String show, String status,
ServerRuntimeContext serverRuntimeContext) {
- Entity roomAndNick = new EntityImpl(room.getJID(), changer.getName());
+ Entity roomAndNick = new EntityImpl(room.getJID(), changer.getNick());
StanzaBuilder builder = StanzaBuilder.createPresenceStanza(roomAndNick, receiver.getJid(), null, null, show,
status);
@@ -344,7 +340,7 @@ public class MUCPresenceHandler extends
// new Status(StatusCode.OWN_PRESENCE).insertElement(builder);
// }
- builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, new MucUserPresenceItem(changer, includeJid,
+ builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, new MucUserItem(changer, includeJid,
true)));
logger.debug("Room presence from {} sent to {}", roomAndNick, receiver);
@@ -359,11 +355,11 @@ public class MUCPresenceHandler extends
private void sendChangeNickAvailable(Occupant changer, Occupant receiver, Room room,
ServerRuntimeContext serverRuntimeContext) {
- Entity roomAndOldNick = new EntityImpl(room.getJID(), changer.getName());
+ Entity roomAndOldNick = new EntityImpl(room.getJID(), changer.getNick());
List<XMLElement> inner = new ArrayList<XMLElement>();
boolean includeJid = includeJidInItem(room, receiver);
- inner.add(new MucUserPresenceItem(changer, includeJid, false));
+ inner.add(new MucUserItem(changer, includeJid, false));
if (receiver.getJid().equals(changer.getJid())) {
// send status to indicate that this is the users own presence
@@ -377,10 +373,10 @@ public class MUCPresenceHandler extends
private void sendExitRoomPresenceToExisting(Occupant exitingOccupant, Occupant existingOccupant, Room room,
String statusMessage, ServerRuntimeContext serverRuntimeContext) {
- Entity roomAndNewUserNick = new EntityImpl(room.getJID(), exitingOccupant.getName());
+ Entity roomAndNewUserNick = new EntityImpl(room.getJID(), exitingOccupant.getNick());
List<XMLElement> inner = new ArrayList<XMLElement>();
- inner.add(new MucUserPresenceItem(null, null, existingOccupant.getAffiliation(), Role.None));
+ inner.add(new MucUserItem(null, null, existingOccupant.getAffiliation(), Role.None));
// is this stanza to be sent to the exiting user himself?
boolean ownStanza = existingOccupant.getJid().equals(exitingOccupant.getJid());
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Affiliation.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Affiliation.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Affiliation.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Affiliation.java Sun Aug 8 21:10:15 2010
@@ -47,7 +47,7 @@ import org.apache.vysper.compliance.Spec
@SpecCompliant(spec = "xep-0045", section = "5.2", status = SpecCompliant.ComplianceStatus.FINISHED, coverage = SpecCompliant.ComplianceCoverage.COMPLETE)
public enum Affiliation {
- Owner, Admin, Member, Outcast, None;
+ Owner, Admin, Member, None, Outcast;
public static Affiliation fromString(String s) {
if ("owner".equals(s))
@@ -56,7 +56,7 @@ public enum Affiliation {
return Admin;
else if ("member".equals(s))
return Member;
- else if ("outcatse".equals(s))
+ else if ("outcast".equals(s))
return Outcast;
else if ("none".equals(s))
return None;
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessage.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessage.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessage.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessage.java Sun Aug 8 21:10:15 2010
@@ -42,7 +42,7 @@ public class DiscussionMessage {
public DiscussionMessage(Stanza stanza, Occupant from, Calendar timestamp) {
this.message = stanza;
- this.fromNick = from.getName();
+ this.fromNick = from.getNick();
this.timestamp = (Calendar) timestamp.clone();
}
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java Sun Aug 8 21:10:15 2010
@@ -28,38 +28,36 @@ import org.apache.vysper.xmpp.addressing
*/
public class Occupant {
- private Affiliation affiliation;
+ private Room room;
private Role role;
private Entity jid;
- private String name;
+ private String nick;
- public Occupant(Entity jid, String name, Affiliation affiliation, Role role) {
+ public Occupant(Entity jid, String nick, Room room, Role role) {
if (jid == null)
throw new IllegalArgumentException("JID can not be null");
- if (name == null)
+ if (nick == null)
throw new IllegalArgumentException("Name can not be null");
- if (affiliation == null)
- throw new IllegalArgumentException("Affiliation can not be null");
+ if (room == null)
+ throw new IllegalArgumentException("Room can not be null");
if (role == null)
throw new IllegalArgumentException("Role can not be null");
this.jid = jid;
- this.name = name;
- this.affiliation = affiliation;
+ this.nick = nick;
+ this.room = room;
this.role = role;
}
public Affiliation getAffiliation() {
+ Affiliation affiliation = room.getAffiliations().getAffiliation(jid);
+ if(affiliation == null) affiliation = Affiliation.None;
return affiliation;
}
- public void setAffiliation(Affiliation affiliation) {
- this.affiliation = affiliation;
- }
-
public Role getRole() {
return role;
}
@@ -68,12 +66,12 @@ public class Occupant {
this.role = role;
}
- public String getName() {
- return name;
+ public String getNick() {
+ return nick;
}
- public void setName(String name) {
- this.name = name;
+ public void setNick(String nick) {
+ this.nick = nick;
}
public Entity getJid() {
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java Sun Aug 8 21:10:15 2010
@@ -109,18 +109,21 @@ public class Room implements InfoRequest
public Occupant addOccupant(Entity occupantJid, String name) {
Affiliation affiliation = affiliations.getAffiliation(occupantJid);
+ // TODO throw a domain specific exception
if (affiliation == Affiliation.Outcast) {
- return null;
+ throw new RuntimeException("forbidden");
}
// default to none
- if (affiliation == null)
+ if (affiliation == null) {
affiliation = Affiliation.None;
-
+ }
+
Role role = Role.getRole(affiliation, roomTypes);
- Occupant occupant = new Occupant(occupantJid, name, affiliation, role);
+ Occupant occupant = new Occupant(occupantJid, name, this, role);
if (isRoomType(RoomType.MembersOnly) && affiliation == Affiliation.None) {
// don't add non member to room
+ throw new RuntimeException("registration-required");
} else {
occupants.put(occupantJid, occupant);
}
@@ -133,7 +136,7 @@ public class Room implements InfoRequest
public Occupant findOccupantByNick(String nick) {
for (Occupant occupant : getOccupants()) {
- if (occupant.getName().equals(nick))
+ if (occupant.getNick().equals(nick))
return occupant;
}
@@ -192,7 +195,7 @@ public class Room implements InfoRequest
// private room, return empty list
} else {
for (Occupant occupant : getOccupants()) {
- items.add(new Item(new EntityImpl(getJID(), occupant.getName())));
+ items.add(new Item(new EntityImpl(getJID(), occupant.getNick())));
}
}
return items;
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java Sun Aug 8 21:10:15 2010
@@ -25,6 +25,10 @@ import java.util.List;
import org.apache.vysper.xml.fragment.Attribute;
import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xml.fragment.XMLSemanticError;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.addressing.EntityFormatException;
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -35,7 +39,7 @@ import org.apache.vysper.xmpp.stanza.IQS
*/
public class IqAdminItem extends XMLElement {
- public static List<IqAdminItem> extractItems(IQStanza stanza) throws XMLSemanticError {
+ public static List<IqAdminItem> extractItems(IQStanza stanza) throws XMLSemanticError, EntityFormatException {
XMLElement query = stanza.getSingleInnerElementsNamed("query", NamespaceURIs.XEP0045_MUC_ADMIN);
List<XMLElement> itemElms = query.getInnerElementsNamed("item", NamespaceURIs.XEP0045_MUC_ADMIN);
@@ -46,25 +50,61 @@ public class IqAdminItem extends XMLElem
return items;
}
- public static IqAdminItem getWrapper(XMLElement itemElm) {
+ public static IqAdminItem getWrapper(XMLElement itemElm) throws EntityFormatException {
String nick = itemElm.getAttributeValue("nick");
+
+ String jidStr = itemElm.getAttributeValue("jid");
+ Entity jid = null;
+ if(jidStr != null) {
+ jid = EntityImpl.parse(jidStr);
+ }
+
String roleStr = itemElm.getAttributeValue("role");
Role role = null;
if (roleStr != null) {
role = Role.fromString(roleStr);
}
- return new IqAdminItem(nick, role);
+ String affiliationStr = itemElm.getAttributeValue("affiliation");
+ Affiliation affiliation = null;
+ if (affiliationStr != null) {
+ affiliation = Affiliation.fromString(affiliationStr);
+ }
+
+ return new IqAdminItem(nick, jid, role, affiliation);
}
public IqAdminItem(String nick, Role role) {
- super(NamespaceURIs.XEP0045_MUC_ADMIN, "item", null, createAttributes(nick, role), null);
+ super(NamespaceURIs.XEP0045_MUC_ADMIN, "item", null, createAttributes(nick, null, role, null), null);
+ }
+
+ public IqAdminItem(String nick, Affiliation affiliation) {
+ super(NamespaceURIs.XEP0045_MUC_ADMIN, "item", null, createAttributes(nick, null, null, affiliation), null);
+ }
+
+ public IqAdminItem(Entity jid, Affiliation affiliation) {
+ super(NamespaceURIs.XEP0045_MUC_ADMIN, "item", null, createAttributes(null, jid, null, affiliation), null);
+ }
+
+ public IqAdminItem(String nick, Entity jid, Role role, Affiliation affiliation) {
+ super(NamespaceURIs.XEP0045_MUC_ADMIN, "item", null, createAttributes(nick, jid, role, affiliation), null);
}
+
public String getNick() {
return getAttributeValue("nick");
}
+ public Entity getJid() throws EntityFormatException {
+ String jidStr = getAttributeValue("jid");
+ Entity jid = null;
+ if(jidStr != null) {
+ return EntityImpl.parse(jidStr);
+ } else {
+ return null;
+ }
+ }
+
public Role getRole() {
String value = getAttributeValue("role");
if (value != null) {
@@ -74,12 +114,30 @@ public class IqAdminItem extends XMLElem
}
}
- private static List<Attribute> createAttributes(String nick, Role role) {
+ public Affiliation getAffiliation() {
+ String value = getAttributeValue("affiliation");
+ if (value != null) {
+ return Affiliation.fromString(value);
+ } else {
+ return null;
+ }
+ }
+
+ private static List<Attribute> createAttributes(String nick, Entity jid, Role role, Affiliation affiliation) {
List<Attribute> attributes = new ArrayList<Attribute>();
- if (nick != null)
+ if (nick != null) {
attributes.add(new Attribute("nick", nick));
- if (role != null)
+ }
+ if (jid != null) {
+ attributes.add(new Attribute("jid", jid.getFullQualifiedName()));
+ }
+ if (role != null) {
attributes.add(new Attribute("role", role.toString()));
+ }
+ if (affiliation != null) {
+ attributes.add(new Attribute("affiliation", affiliation.toString()));
+ }
+
return attributes;
}
Copied: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserItem.java (from r958281, mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java)
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserItem.java?p2=mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserItem.java&p1=mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java&r1=958281&r2=983483&rev=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserItem.java Sun Aug 8 21:10:15 2010
@@ -36,23 +36,23 @@ import org.apache.vysper.xmpp.protocol.N
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class MucUserPresenceItem extends XMLElement {
+public class MucUserItem extends XMLElement {
- public MucUserPresenceItem(Occupant occupant, boolean includeJid, boolean includeNick) {
+ public MucUserItem(Occupant occupant, boolean includeJid, boolean includeNick) {
super(NamespaceURIs.XEP0045_MUC_USER, "item", null, createAttributes(occupant, includeJid, includeNick), null);
}
- public MucUserPresenceItem(Affiliation affiliation, Role role) {
+ public MucUserItem(Affiliation affiliation, Role role) {
super(NamespaceURIs.XEP0045_MUC_USER, "item", null, createAttributes(null, null, affiliation, role), null);
}
- public MucUserPresenceItem(Entity jid, String nick, Affiliation affiliation, Role role) {
+ public MucUserItem(Entity jid, String nick, Affiliation affiliation, Role role) {
super(NamespaceURIs.XEP0045_MUC_USER, "item", null, createAttributes(jid, nick, affiliation, role), null);
}
private static List<Attribute> createAttributes(Occupant occupant, boolean includeJid, boolean includeNick) {
Entity jid = includeJid ? occupant.getJid() : null;
- String nick = includeNick ? occupant.getName() : null;
+ String nick = includeNick ? occupant.getNick() : null;
return createAttributes(jid, nick, occupant.getAffiliation(), occupant.getRole());
}
Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractAffiliationTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractAffiliationTestCase.java?rev=983483&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractAffiliationTestCase.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractAffiliationTestCase.java Sun Aug 8 21:10:15 2010
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+
+import static org.apache.vysper.xmpp.stanza.IQStanzaType.SET;
+
+import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xml.fragment.XMLElementBuilder;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.IqAdminItem;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.protocol.ProtocolException;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+
+/**
+ */
+public abstract class AbstractAffiliationTestCase extends AbstractGrantRevokeTestCase {
+
+
+}
Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractGrantRevokeTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractGrantRevokeTestCase.java?rev=983483&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractGrantRevokeTestCase.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractGrantRevokeTestCase.java Sun Aug 8 21:10:15 2010
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+
+import static org.apache.vysper.xmpp.stanza.IQStanzaType.SET;
+
+import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xml.fragment.XMLElementBuilder;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.IqAdminItem;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.protocol.ProtocolException;
+import org.apache.vysper.xmpp.protocol.StanzaHandler;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
+
+/**
+ */
+public abstract class AbstractGrantRevokeTestCase extends AbstractMUCHandlerTestCase {
+
+ protected void assertChangeNotAllowed(String nickToGrant, StanzaErrorCondition expectedError, Affiliation newAffiliation, Role newRole) throws ProtocolException {
+
+ // send message to room
+ IQStanza result = (IQStanza) IQStanza.getWrapper(sendIq(OCCUPANT1_JID, ROOM2_JID, SET, "id1",
+ NamespaceURIs.XEP0045_MUC_ADMIN, new IqAdminItem(nickToGrant, null, newRole, newAffiliation)));
+
+ XMLElementBuilder builder = new XMLElementBuilder("query", NamespaceURIs.XEP0045_MUC_ADMIN).startInnerElement(
+ "item", NamespaceURIs.XEP0045_MUC_ADMIN).addAttribute("nick", nickToGrant);
+ if(newAffiliation != null) {
+ builder.addAttribute("affiliation", newAffiliation.toString());
+ }
+ if(newRole != null) {
+ builder.addAttribute("role", newRole.toString());
+ }
+ builder.endInnerElement();
+
+ XMLElement expectedInner = builder.build();
+
+ assertErrorStanza(result, "iq", ROOM2_JID, OCCUPANT1_JID, StanzaErrorType.CANCEL, expectedError, expectedInner);
+ }
+
+ @Override
+ protected StanzaHandler createHandler() {
+ return new MUCIqAdminHandler(conference);
+ }
+
+}
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java Sun Aug 8 21:10:15 2010
@@ -34,7 +34,7 @@ import org.apache.vysper.xmpp.delivery.S
import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.TestSessionContext;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserItem;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
@@ -45,8 +45,11 @@ import org.apache.vysper.xmpp.stanza.IQS
import org.apache.vysper.xmpp.stanza.IQStanzaType;
import org.apache.vysper.xmpp.stanza.MessageStanza;
import org.apache.vysper.xmpp.stanza.PresenceStanza;
+import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
/**
*/
@@ -99,8 +102,8 @@ public abstract class AbstractMUCHandler
protected abstract StanzaHandler createHandler();
- protected void assertErrorStanza(Stanza response, String stanzaName, Entity from, Entity to, String type,
- String errorName, XMLElement... expectedInnerElements) {
+ protected void assertErrorStanza(Stanza response, String stanzaName, Entity from, Entity to, StanzaErrorType type,
+ StanzaErrorCondition expectedError, XMLElement... expectedInnerElements) {
assertNotNull(response);
assertEquals(stanzaName, response.getName());
assertEquals(to, response.getTo());
@@ -122,11 +125,11 @@ public abstract class AbstractMUCHandler
// error element must always be present
XMLElement errorElement = innerElements.get(index);
assertEquals("error", errorElement.getName());
- assertEquals(type, errorElement.getAttributeValue("type"));
+ assertEquals(type.value(), errorElement.getAttributeValue("type"));
- XMLElement jidMalformedElement = errorElement.getFirstInnerElement();
- assertEquals(errorName, jidMalformedElement.getName());
- assertEquals(NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS, jidMalformedElement.getNamespaceURI());
+ XMLElement errorTypeElement = errorElement.getFirstInnerElement();
+ assertEquals(expectedError.value(), errorTypeElement.getName());
+ assertEquals(NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS, errorTypeElement.getNamespaceURI());
}
protected void assertMessageStanza(Entity from, Entity to, String type, String body, Stanza stanza)
@@ -154,6 +157,31 @@ public abstract class AbstractMUCHandler
}
}
+ protected void assertMessageStanza(Entity from, Entity to, String type, XMLElement expectedInner, Stanza actual) throws XMLSemanticError {
+ assertMessageStanza(from, to, type, Arrays.asList(expectedInner), actual);
+ }
+
+ protected void assertMessageStanza(Entity from, Entity to, String type, List<XMLElement> expectedInner, Stanza actual) throws XMLSemanticError {
+ assertNotNull(actual);
+ MessageStanza msgStanza = (MessageStanza) MessageStanza.getWrapper(actual);
+
+ assertEquals(from, actual.getFrom());
+ assertEquals(to, actual.getTo());
+ if (type != null) {
+ assertEquals(type, msgStanza.getType());
+ }
+
+ assertEquals("Length of inner elements", expectedInner.size(), actual.getInnerElements().size());
+
+ for(int i = 0; i<expectedInner.size(); i++) {
+ assertEquals(
+ new Renderer(expectedInner.get(i)).getComplete()
+ + " \n "
+ + new Renderer(actual.getInnerElements().get(i)).getComplete(),
+ expectedInner.get(i), actual.getInnerElements().get(i));
+ }
+ }
+
protected void assertIqResultStanza(Entity from, Entity to, String id, Stanza stanza) throws XMLSemanticError {
assertNotNull(stanza);
IQStanza iqStanza = (IQStanza) IQStanza.getWrapper(stanza);
@@ -164,51 +192,44 @@ public abstract class AbstractMUCHandler
assertEquals("result", iqStanza.getType());
}
- protected void assertPresenceStanza(Stanza stanza, Entity expectedFrom, Entity expectedTo, String expectedShow,
- String expectedStatus, MucUserPresenceItem expectedItem) throws XMLSemanticError, Exception {
-
- PresenceStanza presenceStanza = (PresenceStanza) PresenceStanza.getWrapper(stanza);
- assertNotNull("Stanza must not be null", stanza);
- assertEquals(expectedFrom, stanza.getFrom());
- assertEquals(expectedTo, stanza.getTo());
- assertEquals(expectedShow, presenceStanza.getShow());
- assertEquals(expectedStatus, presenceStanza.getStatus(null));
-
- XMLElement xElm = stanza.getSingleInnerElementsNamed("x");
- assertEquals(NamespaceURIs.XEP0045_MUC_USER, xElm.getNamespaceURI());
-
- List<XMLElement> innerElements = xElm.getInnerElements();
-
- assertEquals(1, innerElements.size());
- XMLElement itemElm = innerElements.get(0);
- assertEquals("item", itemElm.getName());
- assertEquals(expectedItem.getJid().getFullQualifiedName(), itemElm.getAttributeValue("jid"));
- assertEquals(expectedItem.getNick(), itemElm.getAttributeValue("nick"));
- assertEquals(expectedItem.getAffiliation().toString(), itemElm.getAttributeValue("affiliation"));
- assertEquals(expectedItem.getRole().toString(), itemElm.getAttributeValue("role"));
-
- }
-
- protected void assertPresenceStanza(Stanza stanza, Entity expectedFrom, Entity expectedTo, String expectedType,
- MucUserPresenceItem expectedItem, StatusCode expectedStatus) throws Exception {
- List<MucUserPresenceItem> expectedItems = Arrays.asList(expectedItem);
+ protected void assertPresenceStanza(Entity expectedFrom, Entity expectedTo, PresenceStanzaType expectedType, MucUserItem expectedItem,
+ StatusCode expectedStatus, Stanza actualStanza) throws Exception {
+ List<MucUserItem> expectedItems = Arrays.asList(expectedItem);
List<StatusCode> expectedStatuses = expectedStatus == null ? null : Arrays.asList(expectedStatus);
- assertPresenceStanza(stanza, expectedFrom, expectedTo, expectedType, expectedItems, expectedStatuses);
+ assertPresenceStanza(expectedFrom, expectedTo, expectedType, expectedItems, expectedStatuses, actualStanza);
}
- protected void assertPresenceStanza(Stanza stanza, Entity expectedFrom, Entity expectedTo, String expectedType,
- List<MucUserPresenceItem> expectedItems, List<StatusCode> expectedStatuses) throws Exception {
-
- assertNotNull(stanza);
- assertEquals(expectedFrom, stanza.getFrom());
- assertEquals(expectedTo, stanza.getTo());
- assertEquals(expectedType, stanza.getAttributeValue("type"));
+ protected void assertPresenceStanza(Entity expectedFrom, Entity expectedTo, PresenceStanzaType expectedType,
+ List<MucUserItem> expectedMucItems,
+ List<StatusCode> expectedMucStatuses, Stanza actualStanza) throws Exception {
+ assertPresenceStanza(expectedFrom, expectedTo, expectedType, null, null, expectedMucItems, expectedMucStatuses, actualStanza);
+ }
+
+ protected void assertPresenceStanza(Entity expectedFrom, Entity expectedTo, PresenceStanzaType expectedType,
+ String expectedShow, String expectedStatus,
+ List<MucUserItem> expectedMucItems, List<StatusCode> expectedMucStatuses,
+ Stanza actualStanza) throws Exception {
+
+ PresenceStanza actualPresenceStanza = (PresenceStanza) PresenceStanza.getWrapper(actualStanza);
+
+ assertNotNull(actualStanza);
+ assertEquals(expectedFrom, actualStanza.getFrom());
+ assertEquals(expectedTo, actualStanza.getTo());
+
+ if(expectedType != null) {
+ assertEquals(expectedType.value(), actualStanza.getAttributeValue("type"));
+ } else {
+ assertEquals(null, actualStanza.getAttributeValue("type"));
+ }
+
+ assertEquals(expectedShow, actualPresenceStanza.getShow());
+ assertEquals(expectedStatus, actualPresenceStanza.getStatus(null));
- XMLElement xElm = stanza.getFirstInnerElement();
- assertEquals(NamespaceURIs.XEP0045_MUC_USER, xElm.getNamespaceURI());
+ XMLElement xElm = actualStanza.getSingleInnerElementsNamed("x", NamespaceURIs.XEP0045_MUC_USER);
+ assertNotNull(xElm);
Iterator<XMLElement> innerElements = xElm.getInnerElements().iterator();
- for (MucUserPresenceItem expectedItem : expectedItems) {
+ for (MucUserItem expectedItem : expectedMucItems) {
XMLElement itemElm = innerElements.next();
assertEquals("item", itemElm.getName());
@@ -221,8 +242,8 @@ public abstract class AbstractMUCHandler
assertEquals(expectedItem.getAffiliation().toString(), itemElm.getAttributeValue("affiliation"));
assertEquals(expectedItem.getRole().toString(), itemElm.getAttributeValue("role"));
}
- if (expectedStatuses != null) {
- for (StatusCode status : expectedStatuses) {
+ if (expectedMucStatuses != null) {
+ for (StatusCode status : expectedMucStatuses) {
XMLElement statusElm = innerElements.next();
assertEquals("status", statusElm.getName());
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java Sun Aug 8 21:10:15 2010
@@ -33,6 +33,8 @@ import org.apache.vysper.xmpp.protocol.S
import org.apache.vysper.xmpp.stanza.MessageStanzaType;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
/**
*/
@@ -64,19 +66,20 @@ public abstract class AbstractMUCMessage
}
}
- protected void assertMessageErrorStanza(Stanza response, Entity from, Entity to, String type, String errorName,
+ protected void assertMessageErrorStanza(Stanza actualResponse, Entity expectedFrom, Entity expectedTo,
+ StanzaErrorType expectedErrorType, StanzaErrorCondition expectedErrorName,
XMLElement... expectedInnerElements) {
- assertErrorStanza(response, "message", from, to, type, errorName, expectedInnerElements);
+ assertErrorStanza(actualResponse, "message", expectedFrom, expectedTo, expectedErrorType, expectedErrorName, expectedInnerElements);
}
- protected void testNotAllowedMessage(Room room, String expectedErrorName) throws Exception {
+ protected void testNotAllowedMessage(Room room, StanzaErrorCondition expectedErrorName) throws Exception {
String body = "Message body";
// now, let user 2 exit room
Stanza errorStanza = sendMessage(OCCUPANT1_JID, ROOM1_JID, GROUPCHAT, body);
XMLElement expectedBody = new XMLElementBuilder("body").addText(body).build();
- assertMessageErrorStanza(errorStanza, ROOM1_JID, OCCUPANT1_JID, "modify", expectedErrorName, expectedBody);
+ assertMessageErrorStanza(errorStanza, ROOM1_JID, OCCUPANT1_JID, StanzaErrorType.MODIFY, expectedErrorName, expectedBody);
// no message should be relayed
assertNull(occupant1Queue.getNext());
Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/BanUserTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/BanUserTestCase.java?rev=983483&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/BanUserTestCase.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/BanUserTestCase.java Sun Aug 8 21:10:15 2010
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+
+import static org.apache.vysper.xmpp.stanza.IQStanzaType.SET;
+
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.IqAdminItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+
+/**
+ */
+public class BanUserTestCase extends AbstractAffiliationTestCase {
+
+ public void testBanUser() throws Exception {
+ Room room = conference.findOrCreateRoom(ROOM2_JID, "Room 2");
+ Occupant occ1 = room.addOccupant(OCCUPANT1_JID, "nick");
+ occ1.setRole(Role.Moderator);
+ room.getAffiliations().add(OCCUPANT1_JID, Affiliation.Admin);
+
+ room.getAffiliations().add(OCCUPANT2_JID, Affiliation.Member);
+ room.addOccupant(OCCUPANT2_JID, "Nick 2");
+
+ // send message to room
+ IQStanza result = (IQStanza) IQStanza.getWrapper(sendIq(OCCUPANT1_JID, ROOM2_JID, SET, "id1",
+ NamespaceURIs.XEP0045_MUC_ADMIN, new IqAdminItem(OCCUPANT2_JID, Affiliation.Outcast)));
+
+ assertIqResultStanza(ROOM2_JID, OCCUPANT1_JID, "id1", result);
+
+ assertNull(room.findOccupantByNick("Nick 2"));
+ assertEquals(Affiliation.Outcast, room.getAffiliations().getAffiliation(OCCUPANT2_JID));
+
+ // banned user is notified
+ assertPresenceStanza(new EntityImpl(ROOM2_JID, "Nick 2"), OCCUPANT2_JID, PresenceStanzaType.UNAVAILABLE,
+ new MucUserItem(null, null, Affiliation.Outcast, Role.None), StatusCode.BEEN_BANNED, occupant2Queue.getNext());
+
+ // verify that remaining users got message
+ // must be sent from the room
+ assertPresenceStanza(new EntityImpl(ROOM2_JID, "Nick 2"), OCCUPANT1_JID, PresenceStanzaType.UNAVAILABLE,
+ new MucUserItem(null, null, Affiliation.Outcast, Role.None), StatusCode.BEEN_BANNED, occupant1Queue.getNext());
+ }
+
+ public void testNonAdmin() throws Exception {
+ Room room = conference.findOrCreateRoom(ROOM2_JID, "Room 2");
+ Occupant occupant1 = room.addOccupant(OCCUPANT1_JID, "nick");
+ occupant1.setRole(Role.Moderator);
+ room.getAffiliations().add(OCCUPANT1_JID, Affiliation.Member);
+
+ room.addOccupant(OCCUPANT2_JID, "Nick 2");
+
+ assertChangeNotAllowed("Nick 2", StanzaErrorCondition.NOT_ALLOWED, Affiliation.None, null);
+ }
+
+ public void testAdminBanningOwner() throws Exception {
+ Room room = conference.findOrCreateRoom(ROOM2_JID, "Room 2");
+ Occupant occupant1 = room.addOccupant(OCCUPANT1_JID, "nick");
+ occupant1.setRole(Role.Moderator);
+ room.getAffiliations().add(OCCUPANT1_JID, Affiliation.Admin);
+
+ room.addOccupant(OCCUPANT2_JID, "Nick 2");
+ room.getAffiliations().add(OCCUPANT2_JID, Affiliation.Owner);
+
+ assertChangeNotAllowed("Nick 2", StanzaErrorCondition.NOT_ALLOWED, Affiliation.Outcast, null);
+ }
+
+}
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java Sun Aug 8 21:10:15 2010
@@ -27,12 +27,13 @@ import org.apache.vysper.xmpp.modules.ex
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserItem;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.apache.vysper.xmpp.protocol.ProtocolException;
import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
+import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -69,21 +70,21 @@ public class ChangeNickTestCase extends
changeNick(OCCUPANT1_JID, new EntityImpl(ROOM1_JID, "new nick"));
Occupant occupant = room.findOccupantByJID(OCCUPANT1_JID);
- assertEquals("new nick", occupant.getName());
+ assertEquals("new nick", occupant.getNick());
- MucUserPresenceItem unavailbleItem = new MucUserPresenceItem(OCCUPANT1_JID, "new nick", Affiliation.None,
+ MucUserItem unavailbleItem = new MucUserItem(OCCUPANT1_JID, "new nick", Affiliation.None,
Role.Participant);
- assertPresenceStanza(occupant1Queue.getNext(), new EntityImpl(ROOM1_JID, "nick"), OCCUPANT1_JID, "unavailable",
- Arrays.asList(unavailbleItem), Arrays.asList(StatusCode.NEW_NICK, StatusCode.OWN_PRESENCE));
- assertPresenceStanza(occupant2Queue.getNext(), new EntityImpl(ROOM1_JID, "nick"), OCCUPANT2_JID, "unavailable",
- Arrays.asList(unavailbleItem), Arrays.asList(StatusCode.NEW_NICK));
+ assertPresenceStanza(new EntityImpl(ROOM1_JID, "nick"), OCCUPANT1_JID, PresenceStanzaType.UNAVAILABLE, Arrays.asList(unavailbleItem),
+ Arrays.asList(StatusCode.NEW_NICK, StatusCode.OWN_PRESENCE), occupant1Queue.getNext());
+ assertPresenceStanza(new EntityImpl(ROOM1_JID, "nick"), OCCUPANT2_JID, PresenceStanzaType.UNAVAILABLE, Arrays.asList(unavailbleItem),
+ Arrays.asList(StatusCode.NEW_NICK), occupant2Queue.getNext());
- MucUserPresenceItem availbleItem = new MucUserPresenceItem(OCCUPANT1_JID, null, Affiliation.None,
+ MucUserItem availbleItem = new MucUserItem(OCCUPANT1_JID, null, Affiliation.None,
Role.Participant);
- assertPresenceStanza(occupant1Queue.getNext(), new EntityImpl(ROOM1_JID, "new nick"), OCCUPANT1_JID, null,
- Arrays.asList(availbleItem), Arrays.asList(StatusCode.OWN_PRESENCE));
- assertPresenceStanza(occupant2Queue.getNext(), new EntityImpl(ROOM1_JID, "new nick"), OCCUPANT2_JID, null,
- Arrays.asList(availbleItem), null);
+ assertPresenceStanza(new EntityImpl(ROOM1_JID, "new nick"), OCCUPANT1_JID, null, Arrays.asList(availbleItem),
+ Arrays.asList(StatusCode.OWN_PRESENCE), occupant1Queue.getNext());
+ assertPresenceStanza(new EntityImpl(ROOM1_JID, "new nick"), OCCUPANT2_JID, null, Arrays.asList(availbleItem),
+ null, occupant2Queue.getNext());
}
public void testChangeNickWithDuplicateNick() throws Exception {
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java Sun Aug 8 21:10:15 2010
@@ -19,11 +19,14 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+import java.util.Arrays;
+
+import org.apache.vysper.xml.fragment.XMLSemanticError;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserItem;
import org.apache.vysper.xmpp.protocol.ProtocolException;
import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
@@ -61,9 +64,9 @@ public class ChangeStatusTestCase extend
assertNull(changeStatus(OCCUPANT1_JID, ROOM1_JID_WITH_NICK, "xa", "Gone"));
- MucUserPresenceItem item = new MucUserPresenceItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
- assertPresenceStanza(occupant1Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT1_JID, "xa", "Gone", item);
- assertPresenceStanza(occupant2Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT2_JID, "xa", "Gone", item);
+ MucUserItem item = new MucUserItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
+ assertPresenceStanza(ROOM1_JID_WITH_NICK, OCCUPANT1_JID, "xa", "Gone", item, occupant1Queue.getNext());
+ assertPresenceStanza(ROOM1_JID_WITH_NICK, OCCUPANT2_JID, "xa", "Gone", item, occupant2Queue.getNext());
}
public void testChangeShow() throws Exception {
@@ -73,9 +76,9 @@ public class ChangeStatusTestCase extend
assertNull(changeStatus(OCCUPANT1_JID, ROOM1_JID_WITH_NICK, "xa", null));
- MucUserPresenceItem item = new MucUserPresenceItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
- assertPresenceStanza(occupant1Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT1_JID, "xa", null, item);
- assertPresenceStanza(occupant2Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT2_JID, "xa", null, item);
+ MucUserItem item = new MucUserItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
+ assertPresenceStanza(ROOM1_JID_WITH_NICK, OCCUPANT1_JID, "xa", null, item, occupant1Queue.getNext());
+ assertPresenceStanza(ROOM1_JID_WITH_NICK, OCCUPANT2_JID, "xa", null, item, occupant2Queue.getNext());
}
public void testChangeStatus() throws Exception {
@@ -85,9 +88,15 @@ public class ChangeStatusTestCase extend
assertNull(changeStatus(OCCUPANT1_JID, ROOM1_JID_WITH_NICK, null, "Gone"));
- MucUserPresenceItem item = new MucUserPresenceItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
- assertPresenceStanza(occupant1Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT1_JID, null, "Gone", item);
- assertPresenceStanza(occupant2Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT2_JID, null, "Gone", item);
+ MucUserItem item = new MucUserItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
+ assertPresenceStanza(ROOM1_JID_WITH_NICK, OCCUPANT1_JID, null, "Gone", item, occupant1Queue.getNext());
+ assertPresenceStanza(ROOM1_JID_WITH_NICK, OCCUPANT2_JID, null, "Gone", item, occupant2Queue.getNext());
}
+ private void assertPresenceStanza(Entity expectedFrom, Entity expectedTo, String expectedShow, String expectedStatus,
+ MucUserItem expectedItem, Stanza actualStanza) throws XMLSemanticError, Exception {
+
+ assertPresenceStanza(expectedFrom, expectedTo, null, expectedShow, expectedStatus,
+ Arrays.asList(expectedItem), null, actualStanza);
+ }
}
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeSubjectTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeSubjectTestCase.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeSubjectTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeSubjectTestCase.java Sun Aug 8 21:10:15 2010
@@ -26,6 +26,8 @@ import org.apache.vysper.xmpp.modules.ex
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
/**
*/
@@ -71,7 +73,7 @@ public class ChangeSubjectTestCase exten
// send message to room
Stanza error = sendMessage(OCCUPANT1_JID, ROOM2_JID, GROUPCHAT, null, null, SUBJECT);
- assertMessageErrorStanza(error, ROOM2_JID, OCCUPANT1_JID, "auth", "forbidden", new XMLElementBuilder("subject")
+ assertMessageErrorStanza(error, ROOM2_JID, OCCUPANT1_JID, StanzaErrorType.AUTH, StanzaErrorCondition.FORBIDDEN, new XMLElementBuilder("subject")
.addText(SUBJECT).build());
assertNull(occupant1Queue.getNext());
Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java?rev=983483&r1=983482&r2=983483&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java Sun Aug 8 21:10:15 2010
@@ -43,6 +43,8 @@ import org.apache.vysper.xmpp.stanza.Mes
import org.apache.vysper.xmpp.stanza.MessageStanzaType;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
/**
*/
@@ -107,7 +109,7 @@ public class EnterRoomTestCase extends A
Occupant occupant = room.getOccupants().iterator().next();
assertEquals(OCCUPANT1_JID, occupant.getJid());
- assertEquals("nick", occupant.getName());
+ assertEquals("nick", occupant.getNick());
}
public void testEnterWithGroupchatProtocol() throws Exception {
@@ -121,7 +123,7 @@ public class EnterRoomTestCase extends A
Occupant occupant = room.getOccupants().iterator().next();
assertEquals(OCCUPANT1_JID, occupant.getJid());
- assertEquals("nick", occupant.getName());
+ assertEquals("nick", occupant.getNick());
}
public void testEnterAsAdmin() throws Exception {
@@ -140,7 +142,7 @@ public class EnterRoomTestCase extends A
room.getAffiliations().add(OCCUPANT1_JID, Affiliation.Outcast);
Stanza error = enterRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK);
- assertPresenceErrorStanza(error, ROOM1_JID, OCCUPANT1_JID, "auth", "forbidden");
+ assertPresenceErrorStanza(error, ROOM1_JID, OCCUPANT1_JID, StanzaErrorType.AUTH, StanzaErrorCondition.FORBIDDEN);
assertEquals(0, room.getOccupants().size());
}
@@ -149,7 +151,7 @@ public class EnterRoomTestCase extends A
Room room = conference.createRoom(ROOM2_JID, "Room", RoomType.MembersOnly);
Stanza error = enterRoom(OCCUPANT1_JID, ROOM2_JID_WITH_NICK);
- assertPresenceErrorStanza(error, ROOM2_JID, OCCUPANT1_JID, "auth", "registration-required");
+ assertPresenceErrorStanza(error, ROOM2_JID, OCCUPANT1_JID, StanzaErrorType.AUTH, StanzaErrorCondition.REGISTRATION_REQUIRED);
assertEquals(0, room.getOccupants().size());
}
@@ -173,14 +175,14 @@ public class EnterRoomTestCase extends A
Occupant occupant = room.getOccupants().iterator().next();
assertEquals(OCCUPANT1_JID, occupant.getJid());
- assertEquals("nick", occupant.getName());
+ assertEquals("nick", occupant.getNick());
}
public void testEnterWithoutNick() throws Exception {
// try entering without a nick
Stanza response = enterRoom(OCCUPANT1_JID, ROOM1_JID);
- assertPresenceErrorStanza(response, ROOM1_JID, OCCUPANT1_JID, "modify", "jid-malformed");
+ assertPresenceErrorStanza(response, ROOM1_JID, OCCUPANT1_JID, StanzaErrorType.MODIFY, StanzaErrorCondition.JID_MALFORMED);
}
public void testEnterWithPassword() throws Exception {
@@ -199,10 +201,10 @@ public class EnterRoomTestCase extends A
// try entering without a password
Stanza response = enterRoom(OCCUPANT1_JID, ROOM2_JID_WITH_NICK);
- assertPresenceErrorStanza(response, ROOM2_JID, OCCUPANT1_JID, "auth", "not-authorized");
+ assertPresenceErrorStanza(response, ROOM2_JID, OCCUPANT1_JID, StanzaErrorType.AUTH, StanzaErrorCondition.NOT_AUTHORIZED);
}
- private void assertPresenceErrorStanza(Stanza response, Entity from, Entity to, String type, String errorName) {
+ private void assertPresenceErrorStanza(Stanza response, Entity from, Entity to, StanzaErrorType type, StanzaErrorCondition errorName) {
XMLElement xElement = new XMLElementBuilder("x", NamespaceURIs.XEP0045_MUC).build();
assertErrorStanza(response, "presence", from, to, type, errorName, xElement);
}
@@ -257,13 +259,13 @@ public class EnterRoomTestCase extends A
Room room = conference.findOrCreateRoom(ROOM1_JID, "Room 1");
room.getHistory().append(
StanzaBuilder.createMessageStanza(OCCUPANT2_JID, ROOM1_JID, MessageStanzaType.GROUPCHAT, null, "Body")
- .build(), new Occupant(OCCUPANT2_JID, "nick2", Affiliation.None, Role.Participant));
+ .build(), new Occupant(OCCUPANT2_JID, "nick2", room, Role.Participant));
room.getHistory().append(
StanzaBuilder.createMessageStanza(OCCUPANT2_JID, ROOM1_JID, MessageStanzaType.GROUPCHAT, null, "Body2")
- .build(), new Occupant(OCCUPANT2_JID, "nick2", Affiliation.None, Role.Participant));
+ .build(), new Occupant(OCCUPANT2_JID, "nick2", room, Role.Participant));
room.getHistory().append(
StanzaBuilder.createMessageStanza(OCCUPANT2_JID, ROOM1_JID, MessageStanzaType.GROUPCHAT, null, "Body3")
- .build(), new Occupant(OCCUPANT2_JID, "nick2", Affiliation.None, Role.Participant));
+ .build(), new Occupant(OCCUPANT2_JID, "nick2", room, Role.Participant));
// now, let user 1 enter room
enterRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK, null, new History(2, null, null, null), false);