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);
+
+    }
+}