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 2009/08/06 22:07:05 UTC
svn commit: r801806 - in
/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src:
main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/
main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/
main/java/org/apache/vysper/xmp...
Author: ngn
Date: Thu Aug 6 20:07:05 2009
New Revision: 801806
URL: http://svn.apache.org/viewvc?rev=801806&view=rev
Log:
Implemented disco of room information (VYSPER-104)
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomType.java
- copied, changed from r800979, mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/AnonymityType.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractInfoDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTypeTestCase.java
Removed:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/AnonymityType.java
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractItemsDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java Thu Aug 6 20:07:05 2009
@@ -32,6 +32,7 @@
import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
import org.apache.vysper.xmpp.modules.servicediscovery.management.Item;
import org.apache.vysper.xmpp.modules.servicediscovery.management.ItemRequestListener;
import org.apache.vysper.xmpp.modules.servicediscovery.management.ServerInfoRequestListener;
@@ -47,7 +48,7 @@
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class MUCModule extends DefaultDiscoAwareModule implements ServerInfoRequestListener, ItemRequestListener {
+public class MUCModule extends DefaultDiscoAwareModule implements ServerInfoRequestListener, InfoRequestListener, ItemRequestListener {
private Conference conference;
@@ -102,10 +103,7 @@
}
public List<InfoElement> getServerInfosFor(InfoRequest request) {
- List<InfoElement> infoElements = new ArrayList<InfoElement>();
- infoElements.add(new Identity("conference", "text", conference.getName()));
- infoElements.add(new Feature(NamespaceURIs.XEP0045_MUC));
- return infoElements;
+ return conference.getServerInfosFor(request);
}
/**
@@ -123,18 +121,41 @@
* @see ItemRequestListener#getItemsFor(InfoRequest)
*/
public List<Item> getItemsFor(InfoRequest request) throws ServiceDiscoveryRequestException {
- List<Item> items = new ArrayList<Item>();
- Collection<Room> rooms = conference.getAllRooms();
-
- for(Room room : rooms) {
- items.add(new Item(room.getJID(), room.getName()));
+ if(request.getTo().getNode() == null) {
+ // items request on the component
+ return conference.getItemsFor(request);
+ } else {
+ // might be an items request on a room
+ Room room = conference.findRoom(request.getTo());
+ if(room != null) {
+ return room.getItemsFor(request);
+ } else {
+ return null;
+ }
+
}
-
- return items;
}
@Override
protected void addHandlerDictionaries(List<HandlerDictionary> dictionary) {
}
+
+ /**
+ * Make this object available for disco#items requests for rooms
+ */
+ @Override
+ protected void addInfoRequestListeners(List<InfoRequestListener> infoRequestListeners) {
+ infoRequestListeners.add(this);
+ }
+
+ public List<InfoElement> getInfosFor(InfoRequest request)
+ throws ServiceDiscoveryRequestException {
+ Room room = conference.findRoom(request.getTo());
+ if(room != null) {
+ return room.getInfosFor(request);
+ } else {
+ return null;
+ }
+ }
}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java Thu Aug 6 20:07:05 2009
@@ -19,19 +19,30 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.model;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.storage.InMemoryRoomStorageProvider;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.storage.OccupantStorageProvider;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.storage.RoomStorageProvider;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Feature;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Item;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.ItemRequestListener;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.ServerInfoRequestListener;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
/**
* Represents the root of a conference, containing rooms
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class Conference {
+public class Conference implements ServerInfoRequestListener, ItemRequestListener {
private String name;
@@ -55,12 +66,16 @@
return roomStorageProvider.getAllRooms();
}
- public Room createRoom(Entity jid, String name) {
+ public Room createRoom(Entity jid, String name, RoomType... types) {
if(roomStorageProvider.roomExists(jid)) {
throw new IllegalArgumentException("Room already exists with JID: " + jid);
}
- return roomStorageProvider.createRoom(jid, name);
+ return roomStorageProvider.createRoom(jid, name, types);
+ }
+
+ public Room findRoom(Entity jid) {
+ return roomStorageProvider.findRoom(jid);
}
public OccupantStorageProvider getOccupantStorageProvider() {
@@ -84,4 +99,22 @@
public String getName() {
return name;
}
+
+ public List<InfoElement> getServerInfosFor(InfoRequest request) {
+ List<InfoElement> infoElements = new ArrayList<InfoElement>();
+ infoElements.add(new Identity("conference", "text", getName()));
+ infoElements.add(new Feature(NamespaceURIs.XEP0045_MUC));
+ return infoElements;
+ }
+
+ public List<Item> getItemsFor(InfoRequest request) {
+ List<Item> items = new ArrayList<Item>();
+ Collection<Room> rooms = getAllRooms();
+
+ for(Room room : rooms) {
+ items.add(new Item(room.getJID(), room.getName()));
+ }
+
+ return items;
+ }
}
Modified: mina/sandbox/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/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java Thu Aug 6 20:07:05 2009
@@ -20,9 +20,20 @@
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.model;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.EnumSet;
import java.util.List;
import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Feature;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Item;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.ItemRequestListener;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
/**
@@ -30,23 +41,29 @@
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class Room {
+public class Room implements InfoRequestListener, ItemRequestListener {
- private boolean secured;
- private boolean moderated;
- private boolean persistent;
- private boolean hidden;
- private boolean open;
- private AnonymityType anonymity;
+ private EnumSet<RoomType> roomTypes;
private Entity jid;
private String name;
- private List<Occupant> occupants = new ArrayList<Occupant>();
-
- public Room(Entity jid, String name) {
+ public Room(Entity jid, String name, RoomType... types) {
this.jid = jid;
this.name = name;
+
+ EnumSet<RoomType> potentialTypes;
+ if(types != null && types.length > 0) {
+ potentialTypes = EnumSet.copyOf(Arrays.asList(types));
+
+ // make sure the list does not contain antonyms
+ RoomType.validateAntonyms(potentialTypes);
+ } else {
+ potentialTypes = EnumSet.noneOf(RoomType.class);
+ }
+
+ // complement with default types
+ this.roomTypes = RoomType.complement(potentialTypes);
}
public Entity getJID() {
@@ -56,5 +73,24 @@
public String getName() {
return name;
}
+
+ public List<InfoElement> getInfosFor(InfoRequest request)
+ throws ServiceDiscoveryRequestException {
+ List<InfoElement> infoElements = new ArrayList<InfoElement>();
+ infoElements.add(new Identity("conference", "text", getName()));
+ infoElements.add(new Feature(NamespaceURIs.XEP0045_MUC));
+
+ for(RoomType type : roomTypes) {
+ infoElements.add(new Feature(type.getDiscoName()));
+ }
+
+ return infoElements;
+ }
+
+ public List<Item> getItemsFor(InfoRequest request)
+ throws ServiceDiscoveryRequestException {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
Copied: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomType.java (from r800979, mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/AnonymityType.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomType.java?p2=mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomType.java&p1=mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/AnonymityType.java&r1=800979&r2=801806&rev=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/AnonymityType.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomType.java Thu Aug 6 20:07:05 2009
@@ -19,28 +19,146 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0045_muc.model;
+import java.util.EnumSet;
+
import org.apache.vysper.compliance.SpecCompliant;
/**
- * Describes the different anonymity settings for a {@link Room}
+ * Describes the different room types for chats
* @author The Apache MINA Project (dev@mina.apache.org)
*
*/
@SpecCompliant(spec="xep-0045", section="4.2", status= SpecCompliant.ComplianceStatus.FINISHED, coverage = SpecCompliant.ComplianceCoverage.COMPLETE)
-public enum AnonymityType {
+public enum RoomType {
+
/**
* A room in which the full JIDs or bare JIDs of occupants cannot be discovered by anyone, including room admins and room owners; such rooms are NOT RECOMMENDED or explicitly supported by MUC, but are possible using this protocol if a service implementation offers the appropriate configuration options; contrast with Non-Anonymous Room and Semi-Anonymous Room.
*/
- FullyAnonymous,
+ FullyAnonymous(null),
+
+ /**
+ * A room that cannot be found by any user through normal means such as searching and service discovery; antonym: Public Room.
+ */
+ Hidden("muc_hidden"),
+
+ /**
+ * A room that a user cannot enter without being on the member list; antonym: Open Room.
+ */
+ MembersOnly("muc_membersonly"),
+
+ /**
+ * A room in which only those with "voice" may send messages to all occupants; antonym: Unmoderated Room.
+ */
+ Moderated("muc_moderated"),
/**
* A room in which an occupant's full JID is exposed to all other occupants, although the occupant may choose any desired room nickname; contrast with Semi-Anonymous Room and Fully-Anonymous Room.
*/
- NonAnonymous,
+ NonAnonymous("muc_nonanonymous"),
+
+ /**
+ * A room that anyone may enter without being on the member list; antonym: Members-Only Room.
+ */
+ Open("muc_open"),
+
+ /**
+ * A room that a user cannot enter without first providing the correct password; antonym: Unsecured Room.
+ */
+ PasswordProtected("muc_passwordprotected"),
+
+ /**
+ * A room that is not destroyed if the last occupant exits; antonym: Temporary Room.
+ */
+ Persistent("muc_persistent"),
+
+ /**
+ * A room that can be found by any user through normal means such as searching and service discovery; antonym: Hidden Room.
+ */
+ Public("muc_public"),
/**
* A room in which an occupant's full JID can be discovered by room admins only; contrast with Fully-Anonymous Room and Non-Anonymous Room.
*/
- SemiAnonymous,
+ SemiAnonymous("muc_semianonymous"),
+
+ /**
+ * A room that is destroyed if the last occupant exits; antonym: Persistent Room.
+ */
+ Temporary("muc_temporary"),
+
+ /**
+ * A room in which any occupant is allowed to send messages to all occupants; antonym: Moderated Room.
+ */
+ Unmoderated("muc_unmoderated"),
+
+ /**
+ * A room that anyone is allowed to enter without first providing the correct password; antonym: Password-Protected Room.
+ */
+ Unsecured("muc_unsecured");
+
+ private String discoName;
+
+ private RoomType(String mucName) {
+ this.discoName = mucName;
+ }
+
+
+ public String getDiscoName() {
+ return discoName;
+ }
+
+ private static void complement(EnumSet<RoomType> types, RoomType defaultType, RoomType... antonyms) {
+ if(types.contains(defaultType)) {
+ return;
+ }
+ for(RoomType type : antonyms) {
+ if(types.contains(type)) {
+ // found, return
+ return;
+ }
+ }
+ // non found, add default type
+ types.add(defaultType);
+ }
+
+ public static EnumSet<RoomType> complement(EnumSet<RoomType> in) {
+ EnumSet<RoomType> result = EnumSet.copyOf(in);
+ complement(result, RoomType.Public, RoomType.Hidden);
+ complement(result, RoomType.Open, RoomType.MembersOnly);
+ complement(result, RoomType.Temporary, RoomType.Persistent);
+ complement(result, RoomType.Unmoderated, RoomType.Moderated);
+ complement(result, RoomType.Unsecured, RoomType.PasswordProtected);
+ complement(result, RoomType.NonAnonymous, RoomType.SemiAnonymous, RoomType.FullyAnonymous);
+
+ return result;
+ }
+
+ public static void validateAntonyms(EnumSet<RoomType> types) {
+ if(types.contains(RoomType.Hidden) && types.contains(RoomType.Public)) {
+ throw new IllegalArgumentException("Room can not be both Hidden and Public");
+ }
+ if(types.contains(RoomType.MembersOnly) && types.contains(RoomType.Open)) {
+ throw new IllegalArgumentException("Room can not be both MembersOnly and Open");
+ }
+ if(types.contains(RoomType.Temporary) && types.contains(RoomType.Persistent)) {
+ throw new IllegalArgumentException("Room can not be both Temporary and Persistent");
+ }
+ if(types.contains(RoomType.Unmoderated) && types.contains(RoomType.Moderated)) {
+ throw new IllegalArgumentException("Room can not be both Unmoderated and Moderated");
+ }
+ if(types.contains(RoomType.Unsecured) && types.contains(RoomType.PasswordProtected)) {
+ throw new IllegalArgumentException("Room can not be both Unsecured and PasswordProtected");
+ }
+ if(types.contains(RoomType.NonAnonymous) && types.contains(RoomType.SemiAnonymous)) {
+ throw new IllegalArgumentException("Room can not be both NonAnonymous and SemiAnonymous");
+ }
+ if(types.contains(RoomType.SemiAnonymous) && types.contains(RoomType.FullyAnonymous)) {
+ throw new IllegalArgumentException("Room can not be both FullyAnonymous and SemiAnonymous");
+ }
+ if(types.contains(RoomType.NonAnonymous) && types.contains(RoomType.FullyAnonymous)) {
+ throw new IllegalArgumentException("Room can not be both NonAnonymous and FullyAnonymous");
+ }
+ }
+
}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryRoomStorageProvider.java Thu Aug 6 20:07:05 2009
@@ -26,6 +26,7 @@
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
/**
@@ -40,8 +41,8 @@
// do nothing
}
- public Room createRoom(Entity jid, String name) {
- Room room = new Room(jid, name);
+ public Room createRoom(Entity jid, String name, RoomType... roomTypes) {
+ Room room = new Room(jid, name, roomTypes);
rooms.put(jid, room);
return room;
}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/RoomStorageProvider.java Thu Aug 6 20:07:05 2009
@@ -24,12 +24,13 @@
import org.apache.vysper.storage.StorageProvider;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
public interface RoomStorageProvider extends StorageProvider {
void initialize();
- Room createRoom(Entity jid, String name);
+ Room createRoom(Entity jid, String name, RoomType... roomTypes);
Collection<Room> getAllRooms();
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractDiscoTestCase.java Thu Aug 6 20:07:05 2009
@@ -21,7 +21,22 @@
import junit.framework.TestCase;
+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.Module;
+import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
+import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
+import org.apache.vysper.xmpp.modules.servicediscovery.handler.DiscoInfoIQHandler;
+import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
+import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
+import org.apache.vysper.xmpp.server.TestSessionContext;
+import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.xmlfragment.Renderer;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
+import org.apache.vysper.xmpp.xmlfragment.XMLSemanticError;
/**
*
@@ -29,6 +44,45 @@
*/
public abstract class AbstractDiscoTestCase extends TestCase {
+ protected static Entity parseUnchecked(String jid) {
+ try {
+ return EntityImpl.parse(jid);
+ } catch (EntityFormatException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected static final Entity SERVER_JID = parseUnchecked("vysper.org");
+ protected static final Entity USER_JID = parseUnchecked("user@vysper.org");
+
protected abstract Module getModule();
+
+ protected abstract void assertResponse(XMLElement queryElement)
+ throws Exception;
+
+ protected abstract StanzaBuilder buildRequest();
+
+ protected abstract void addListener(ServiceCollector serviceCollector);
+ protected abstract IQHandler createDiscoIQHandler();
+
+ public void testDisco() throws Exception {
+ ServiceCollector serviceCollector = new ServiceCollector();
+ addListener(serviceCollector);
+
+ DefaultServerRuntimeContext runtimeContext = new DefaultServerRuntimeContext(SERVER_JID, null);
+ runtimeContext.registerServerRuntimeContextService(serviceCollector);
+
+ IQHandler infoIQHandler = createDiscoIQHandler();
+
+ StanzaBuilder request = buildRequest();
+
+ ResponseStanzaContainer resultStanzaContainer = infoIQHandler.execute(request.getFinalStanza(), runtimeContext, false, new TestSessionContext(runtimeContext, new SessionStateHolder()), null);
+ Stanza resultStanza = resultStanzaContainer.getResponseStanza();
+
+ System.out.println(new Renderer(resultStanza).getComplete());
+ XMLElement queryElement = resultStanza.getFirstInnerElement();
+
+ assertResponse(queryElement);
+ }
}
Added: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractInfoDiscoTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractInfoDiscoTestCase.java?rev=801806&view=auto
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractInfoDiscoTestCase.java (added)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractInfoDiscoTestCase.java Thu Aug 6 20:07:05 2009
@@ -0,0 +1,124 @@
+/*
+ * 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;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.Module;
+import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
+import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
+import org.apache.vysper.xmpp.modules.servicediscovery.handler.DiscoInfoIQHandler;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
+import org.apache.vysper.xmpp.xmlfragment.XMLSemanticError;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public abstract class AbstractInfoDiscoTestCase extends AbstractDiscoTestCase {
+
+ protected InfoRequestListener getInfoRequestListener() {
+ Module module = getModule();
+ if(module instanceof InfoRequestListener) {
+ return (InfoRequestListener) module;
+ } else {
+ throw new RuntimeException("Module does not implement InfoRequestListener");
+ }
+ }
+
+ protected IQHandler createDiscoIQHandler() {
+ return new DiscoInfoIQHandler();
+ }
+
+
+ protected abstract Entity getTo();
+
+ /**
+ * Default, expect no identity
+ */
+ protected Identity getExpectedIdentity() {
+ return null;
+ }
+
+ /**
+ * Default, expect no features
+ */
+ protected List<String> getExpectedFeatures() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ protected void addListener(ServiceCollector serviceCollector) {
+ serviceCollector.addInfoRequestListener(getInfoRequestListener());
+ }
+
+ @Override
+ protected void assertResponse(XMLElement queryElement)
+ throws XMLSemanticError {
+ assertIdentity(queryElement);
+
+ assertFeatures(queryElement);
+ }
+
+ @Override
+ protected StanzaBuilder buildRequest() {
+ StanzaBuilder request = StanzaBuilder.createIQStanza(USER_JID, getTo(), IQStanzaType.GET, "1");
+ request.startInnerElement("query", NamespaceURIs.XEP0030_SERVICE_DISCOVERY_INFO).endInnerElement();
+ return request;
+ }
+
+ private void assertIdentity(XMLElement queryElement)
+ throws XMLSemanticError {
+ Identity expectedIdentity = getExpectedIdentity();
+ if(expectedIdentity != null) {
+ XMLElement identityElement = queryElement.getSingleInnerElementsNamed("identity");
+
+ assertNotNull("Identity element must exist", identityElement);
+
+ assertEquals("Identity category", expectedIdentity.getCategory(), identityElement.getAttributeValue("category"));
+ assertEquals("Identity type", expectedIdentity.getType(), identityElement.getAttributeValue("type"));
+
+ if(expectedIdentity.getName() != null) {
+ assertEquals("Identity name", expectedIdentity.getName(), identityElement.getAttributeValue("name"));
+ } else {
+ assertNull("Identity name attribute should be missing", identityElement.getAttributeValue("name"));
+ }
+ }
+ }
+
+ private void assertFeatures(XMLElement queryElement) {
+ List<XMLElement> featureElements = queryElement.getInnerElementsNamed("feature");
+ List<String> expectedFeatures = new ArrayList<String>(getExpectedFeatures());
+ // order is random, check that all namespaces are present
+ for(XMLElement element : featureElements) {
+ expectedFeatures.remove(element.getAttributeValue("var"));
+ }
+
+ assertTrue("Disco response missing features: " + expectedFeatures.toString(), expectedFeatures.size() == 0);
+ }
+}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractItemsDiscoTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractItemsDiscoTestCase.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractItemsDiscoTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractItemsDiscoTestCase.java Thu Aug 6 20:07:05 2009
@@ -26,19 +26,14 @@
import junit.framework.AssertionFailedError;
import org.apache.vysper.xmpp.addressing.EntityFormatException;
-import org.apache.vysper.xmpp.addressing.EntityImpl;
import org.apache.vysper.xmpp.modules.Module;
+import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
import org.apache.vysper.xmpp.modules.servicediscovery.handler.DiscoItemIQHandler;
import org.apache.vysper.xmpp.modules.servicediscovery.management.Item;
import org.apache.vysper.xmpp.modules.servicediscovery.management.ItemRequestListener;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.protocol.SessionStateHolder;
-import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
-import org.apache.vysper.xmpp.server.TestSessionContext;
import org.apache.vysper.xmpp.stanza.IQStanzaType;
-import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.apache.vysper.xmpp.xmlfragment.XMLElement;
@@ -57,6 +52,10 @@
}
}
+ protected IQHandler createDiscoIQHandler() {
+ return new DiscoItemIQHandler();
+ }
+
/**
* Default, expect no features
* @throws EntityFormatException
@@ -65,26 +64,25 @@
return Collections.emptyList();
}
- public void testDiscoItems() throws Exception {
- ServiceCollector serviceCollector = new ServiceCollector();
+ @Override
+ protected void addListener(ServiceCollector serviceCollector) {
serviceCollector.addItemRequestListener(getItemRequestListener());
-
- DefaultServerRuntimeContext runtimeContext = new DefaultServerRuntimeContext(EntityImpl.parse("vysper.org"), null);
- runtimeContext.registerServerRuntimeContextService(serviceCollector);
-
- DiscoItemIQHandler itemIQHandler = new DiscoItemIQHandler();
-
- StanzaBuilder request = StanzaBuilder.createIQStanza(EntityImpl.parse("user@vysper.org"), EntityImpl.parse("vysper.org"), IQStanzaType.GET, "1");
+ }
+
+ @Override
+ protected StanzaBuilder buildRequest() {
+ StanzaBuilder request = StanzaBuilder.createIQStanza(USER_JID, SERVER_JID, IQStanzaType.GET, "1");
request.startInnerElement("query", NamespaceURIs.XEP0030_SERVICE_DISCOVERY_ITEMS).endInnerElement();
-
- ResponseStanzaContainer resultStanzaContainer = itemIQHandler.execute(request.getFinalStanza(), runtimeContext, false, new TestSessionContext(runtimeContext, new SessionStateHolder()), null);
- Stanza resultStanza = resultStanzaContainer.getResponseStanza();
+ return request;
+ }
- XMLElement queryElement = resultStanza.getFirstInnerElement();
-
+ @Override
+ protected void assertResponse(XMLElement queryElement)
+ throws Exception {
assertItems(queryElement);
}
+
private void assertItems(XMLElement queryElement) throws Exception {
List<XMLElement> itemElements = queryElement.getInnerElementsNamed("item");
List<Item> expectedItems = new ArrayList<Item>(getExpectedItems());
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractServerInfoDiscoTestCase.java Thu Aug 6 20:07:05 2009
@@ -23,18 +23,13 @@
import java.util.Collections;
import java.util.List;
-import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.Module;
import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
-import org.apache.vysper.xmpp.modules.servicediscovery.handler.DiscoInfoIQHandler;
import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
import org.apache.vysper.xmpp.modules.servicediscovery.management.ServerInfoRequestListener;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.protocol.SessionStateHolder;
-import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
-import org.apache.vysper.xmpp.server.TestSessionContext;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.apache.vysper.xmpp.stanza.IQStanzaType;
-import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.apache.vysper.xmpp.xmlfragment.XMLElement;
import org.apache.vysper.xmpp.xmlfragment.XMLSemanticError;
@@ -43,7 +38,7 @@
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public abstract class AbstractServerInfoDiscoTestCase extends AbstractDiscoTestCase {
+public abstract class AbstractServerInfoDiscoTestCase extends AbstractInfoDiscoTestCase {
protected ServerInfoRequestListener getServerInfoRequestListener() {
Module module = getModule();
@@ -54,69 +49,13 @@
}
}
- /**
- * Default, expect no identity
- */
- protected Identity getExpectedIdentity() {
- return null;
+ protected Entity getTo() {
+ return SERVER_JID;
}
- /**
- * Default, expect no features
- */
- protected List<String> getExpectedServerInfoFeatures() {
- return Collections.emptyList();
- }
- public void testDiscoServerInfo() throws Exception {
- ServiceCollector serviceCollector = new ServiceCollector();
+ @Override
+ protected void addListener(ServiceCollector serviceCollector) {
serviceCollector.addServerInfoRequestListener(getServerInfoRequestListener());
-
- DefaultServerRuntimeContext runtimeContext = new DefaultServerRuntimeContext(EntityImpl.parse("vysper.org"), null);
- runtimeContext.registerServerRuntimeContextService(serviceCollector);
-
- DiscoInfoIQHandler infoIQHandler = new DiscoInfoIQHandler();
-
- StanzaBuilder request = StanzaBuilder.createIQStanza(EntityImpl.parse("user@vysper.org"), EntityImpl.parse("vysper.org"), IQStanzaType.GET, "1");
- request.startInnerElement("query", "http://jabber.org/protocol/disco#info").endInnerElement();
-
- ResponseStanzaContainer resultStanzaContainer = infoIQHandler.execute(request.getFinalStanza(), runtimeContext, false, new TestSessionContext(runtimeContext, new SessionStateHolder()), null);
- Stanza resultStanza = resultStanzaContainer.getResponseStanza();
-
- XMLElement queryElement = resultStanza.getFirstInnerElement();
-
- assertIdentity(queryElement);
-
- assertFeatures(queryElement);
- }
-
- private void assertIdentity(XMLElement queryElement)
- throws XMLSemanticError {
- Identity expectedIdentity = getExpectedIdentity();
- if(expectedIdentity != null) {
- XMLElement identityElement = queryElement.getSingleInnerElementsNamed("identity");
-
- assertNotNull("Identity element must exist", identityElement);
-
- assertEquals("Identity category", expectedIdentity.getCategory(), identityElement.getAttributeValue("category"));
- assertEquals("Identity type", expectedIdentity.getType(), identityElement.getAttributeValue("type"));
-
- if(expectedIdentity.getName() != null) {
- assertEquals("Identity name", expectedIdentity.getName(), identityElement.getAttributeValue("name"));
- } else {
- assertNull("Identity name attribute should be missing", identityElement.getAttributeValue("name"));
- }
- }
- }
-
- private void assertFeatures(XMLElement queryElement) {
- List<XMLElement> featureElements = queryElement.getInnerElementsNamed("feature");
- List<String> expectedFeatures = new ArrayList<String>(getExpectedServerInfoFeatures());
- // order is random, check that all namespaces are present
- for(XMLElement element : featureElements) {
- expectedFeatures.remove(element.getAttributeValue("var"));
- }
-
- assertTrue("Disco response missing features: " + expectedFeatures.toString(), expectedFeatures.size() == 0);
}
}
Added: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java?rev=801806&view=auto
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java (added)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCRoomInfoDiscoTestCase.java Thu Aug 6 20:07:05 2009
@@ -0,0 +1,65 @@
+/*
+ * 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;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.Module;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class MUCRoomInfoDiscoTestCase extends AbstractInfoDiscoTestCase {
+
+ private static final Entity ROOM_JID = parseUnchecked("jid1@vysper.org");
+
+ @Override
+ protected Module getModule() {
+ Conference conference = new Conference("Foo");
+ conference.createRoom(ROOM_JID, "Room1", RoomType.Hidden, RoomType.PasswordProtected);
+ return new MUCModule(conference);
+ }
+
+ @Override
+ protected Identity getExpectedIdentity() {
+ return new Identity("conference", "text", "Room1");
+ }
+
+ @Override
+ protected List<String> getExpectedFeatures() {
+ return Arrays.asList(
+ NamespaceURIs.XEP0045_MUC,
+ "muc_passwordprotected",
+ "muc_hidden"
+ );
+ }
+
+ @Override
+ protected Entity getTo() {
+ return ROOM_JID;
+ }
+}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java?rev=801806&r1=801805&r2=801806&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCServerInfoDiscoTestCase.java Thu Aug 6 20:07:05 2009
@@ -40,7 +40,7 @@
}
@Override
- protected List<String> getExpectedServerInfoFeatures() {
+ protected List<String> getExpectedFeatures() {
return Arrays.asList(NamespaceURIs.XEP0045_MUC);
}
Added: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTypeTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTypeTestCase.java?rev=801806&view=auto
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTypeTestCase.java (added)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/RoomTypeTestCase.java Thu Aug 6 20:07:05 2009
@@ -0,0 +1,81 @@
+/*
+ * 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.model;
+
+import java.util.EnumSet;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class RoomTypeTestCase extends TestCase {
+
+ public void testComplement() {
+ EnumSet<RoomType> original = EnumSet.of(RoomType.FullyAnonymous, RoomType.Hidden);
+
+ EnumSet<RoomType> complemented = RoomType.complement(original);
+
+ assertTrue(complemented.contains(RoomType.FullyAnonymous));
+ assertTrue(complemented.contains(RoomType.Hidden));
+ assertTrue(complemented.contains(RoomType.Open));
+ assertTrue(complemented.contains(RoomType.Unmoderated));
+ assertTrue(complemented.contains(RoomType.Unsecured));
+ assertTrue(complemented.contains(RoomType.Temporary));
+
+ assertFalse(complemented.contains(RoomType.SemiAnonymous));
+ assertFalse(complemented.contains(RoomType.NonAnonymous));
+ assertFalse(complemented.contains(RoomType.Public));
+ assertFalse(complemented.contains(RoomType.MembersOnly));
+ assertFalse(complemented.contains(RoomType.Moderated));
+ assertFalse(complemented.contains(RoomType.PasswordProtected));
+ assertFalse(complemented.contains(RoomType.Persistent));
+ }
+
+ private void assertAntonyms(RoomType type1, RoomType type2) {
+ try {
+ RoomType.validateAntonyms(EnumSet.of(type1, type2));
+ fail("Must throw IllegalArgumentException");
+ } catch(IllegalArgumentException e) {
+ // ok
+ }
+ }
+
+ private void assertNonAntonyms(RoomType type1, RoomType type2) {
+ RoomType.validateAntonyms(EnumSet.of(type1, type2));
+ }
+
+ public void testValidateAntonyms() {
+ assertAntonyms(RoomType.Public, RoomType.Hidden);
+ assertAntonyms(RoomType.MembersOnly, RoomType.Open);
+ assertAntonyms(RoomType.Moderated, RoomType.Unmoderated);
+ assertAntonyms(RoomType.Persistent, RoomType.Temporary);
+ assertAntonyms(RoomType.Unsecured, RoomType.PasswordProtected);
+ assertAntonyms(RoomType.FullyAnonymous, RoomType.SemiAnonymous);
+ assertAntonyms(RoomType.SemiAnonymous, RoomType.NonAnonymous);
+ assertAntonyms(RoomType.FullyAnonymous, RoomType.NonAnonymous);
+
+ assertNonAntonyms(RoomType.Public, RoomType.Open);
+ assertNonAntonyms(RoomType.Unsecured, RoomType.FullyAnonymous);
+ assertNonAntonyms(RoomType.Persistent, RoomType.Public);
+
+ }
+}