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