You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by be...@apache.org on 2012/06/07 17:23:29 UTC

svn commit: r1347674 - in /mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc: model/ storage/

Author: berndf
Date: Thu Jun  7 15:23:29 2012
New Revision: 1347674

URL: http://svn.apache.org/viewvc?rev=1347674&view=rev
Log:
VYSPER-318: add option: visitors can speak in unmoderated rooms

Modified:
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryOccupantStorageProvider.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/OccupantStorageProvider.java

Modified: mina/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/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java?rev=1347674&r1=1347673&r2=1347674&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Conference.java Thu Jun  7 15:23:29 2012
@@ -64,7 +64,7 @@ public class Conference implements Serve
     }
 
     public void initialize() {
-        roomStorageProvider.initialize();
+        if (roomStorageProvider != null) roomStorageProvider.initialize();
         if (occupantStorageProvider != null) occupantStorageProvider.initialize();
     }
 
@@ -77,7 +77,9 @@ public class Conference implements Serve
             throw new IllegalArgumentException("Room already exists with JID: " + jid);
         }
 
-        return roomStorageProvider.createRoom(mucFeatures, jid, name, types);
+        final Room room = roomStorageProvider.createRoom(mucFeatures, jid, name, types);
+        if (occupantStorageProvider != null) room.setOccupantStorageProvider(occupantStorageProvider);
+        return room;
     }
 
     public void deleteRoom(Entity jid) {

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java?rev=1347674&r1=1347673&r2=1347674&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Occupant.java Thu Jun  7 15:23:29 2012
@@ -80,7 +80,9 @@ public class Occupant {
     }
 
     public boolean hasVoice() {
-        return role == Role.Moderator || role == Role.Participant;
+        if (role == Role.Moderator || role == Role.Participant) return true;
+        if (room.isRoomType(RoomType.Unmoderated) && room.doVisitorsHaveVoice()) return true;
+        return false;
     }
 
     @Override

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java?rev=1347674&r1=1347673&r2=1347674&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java Thu Jun  7 15:23:29 2012
@@ -31,6 +31,7 @@ import java.util.concurrent.ConcurrentHa
 
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.storage.OccupantStorageProvider;
 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;
@@ -58,6 +59,8 @@ public class Room implements InfoRequest
     private String password;
     
     private boolean rewriteDuplicateNick = true;
+    
+    private boolean visitorsHaveVoice = false;
 
     private DiscussionHistory history = new DiscussionHistory();
 
@@ -66,7 +69,9 @@ public class Room implements InfoRequest
     // keep in a map to allow for quick access
     private Map<Entity, Occupant> occupants = new ConcurrentHashMap<Entity, Occupant>();
     
-    private Map<Entity, PresenceStanza> occupantsLatestPresence = new ConcurrentHashMap<Entity, PresenceStanza>(); 
+    private Map<Entity, PresenceStanza> occupantsLatestPresence = new ConcurrentHashMap<Entity, PresenceStanza>();
+    
+    protected OccupantStorageProvider occupantStorageProvider;
 
     public Room(Entity jid, String name, RoomType... types) {
         if (jid == null) {
@@ -95,6 +100,10 @@ public class Room implements InfoRequest
         this.roomTypes = RoomType.complement(potentialTypes);
     }
 
+    public void setOccupantStorageProvider(OccupantStorageProvider occupantStorageProvider) {
+        this.occupantStorageProvider = occupantStorageProvider;
+    }
+    
     public Entity getJID() {
         return jid;
     }
@@ -123,6 +132,14 @@ public class Room implements InfoRequest
         history.setMaxItems(maxItems);
     }
 
+    public boolean doVisitorsHaveVoice() {
+        return visitorsHaveVoice;
+    }
+
+    public void setVisitorsHaveVoice(boolean visitorsHaveVoice) {
+        this.visitorsHaveVoice = visitorsHaveVoice;
+    }
+
     public Occupant addOccupant(Entity occupantJid, String name) {
         Affiliation affiliation = affiliations.getAffiliation(occupantJid);
 
@@ -144,6 +161,7 @@ public class Room implements InfoRequest
         } else {
             occupants.put(occupantJid, occupant);
         }
+        if (occupantStorageProvider != null) occupantStorageProvider.occupantAdded(this, occupant);
         return occupant;
     }
 
@@ -191,8 +209,9 @@ public class Room implements InfoRequest
     }
 
     public void removeOccupant(Entity occupantJid) {
-        occupants.remove(occupantJid);
+        final Occupant removed = occupants.remove(occupantJid);
         occupantsLatestPresence.remove(occupantJid);
+        if (occupantStorageProvider != null) occupantStorageProvider.occupantRemoved(this, removed);
     }
 
     public int getOccupantCount() {

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryOccupantStorageProvider.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryOccupantStorageProvider.java?rev=1347674&r1=1347673&r2=1347674&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryOccupantStorageProvider.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/InMemoryOccupantStorageProvider.java Thu Jun  7 15:23:29 2012
@@ -19,6 +19,9 @@
  */
 package org.apache.vysper.xmpp.modules.extension.xep0045_muc.storage;
 
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+
 /**
  *
  * @author The Apache MINA Project (dev@mina.apache.org)
@@ -29,4 +32,12 @@ public class InMemoryOccupantStorageProv
         // do nothing
     }
 
+    public void occupantAdded(Room room, Occupant occupant) {
+        // do nothing
+    }
+
+    public void occupantRemoved(Room room, Occupant occupant) {
+        // do nothing
+    }
+
 }

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/OccupantStorageProvider.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/OccupantStorageProvider.java?rev=1347674&r1=1347673&r2=1347674&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/OccupantStorageProvider.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/storage/OccupantStorageProvider.java Thu Jun  7 15:23:29 2012
@@ -20,9 +20,14 @@
 package org.apache.vysper.xmpp.modules.extension.xep0045_muc.storage;
 
 import org.apache.vysper.storage.StorageProvider;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
 
 public interface OccupantStorageProvider extends StorageProvider {
 
     void initialize();
 
+    void occupantAdded(Room room, Occupant occupant);
+    
+    void occupantRemoved(Room room, Occupant occupant);
 }