Author: berndf
Date: Thu Sep  3 11:15:31 2009
New Revision: 810893

URL: http://svn.apache.org/viewvc?rev=810893&view=rev
Log:
VYSPER-102: announce MUC component correctly in service disco

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

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=810893&r1=810892&r2=810893&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 Sep  3 11:15:31 2009
@@ -39,6 +39,7 @@
 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.modules.servicediscovery.management.ComponentInfoRequestListener;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.StanzaProcessor;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
@@ -50,13 +51,16 @@
 import org.slf4j.LoggerFactory;
 
 import java.util.List;
+import java.util.ArrayList;
 
 /**
  * A module for <a href="http://xmpp.org/extensions/xep-0045.html";>XEP-0045 
Multi-user chat</a>.
  *
  * @author The Apache MINA Project ([email protected])
  */
-public class MUCModule extends DefaultDiscoAwareModule implements 
ServerInfoRequestListener, InfoRequestListener, ItemRequestListener, Component {
+public class MUCModule 
+        extends DefaultDiscoAwareModule 
+        implements Component, ComponentInfoRequestListener, 
InfoRequestListener, ItemRequestListener {
 
     private String subdomain = "chat";
     private Conference conference;
@@ -128,15 +132,6 @@
         return "1.24";
     }
 
-    @Override
-    protected void 
addServerInfoRequestListeners(List<ServerInfoRequestListener> 
serverInfoRequestListeners) {
-        serverInfoRequestListeners.add(this);
-    }
-
-    public List<InfoElement> getServerInfosFor(InfoRequest request) {
-        return conference.getServerInfosFor(request);
-    }
-
     /**
      * Make this object available for disco#items requests.
      */
@@ -145,6 +140,25 @@
         itemRequestListeners.add(this);
     }
     
+    
+    public List<InfoElement> getComponentInfosFor(InfoRequest request) throws 
ServiceDiscoveryRequestException {
+        if (fullDomain.equals(request.getTo())) {
+            if (request.getTo() == null) {
+                List<InfoElement> serverInfos = 
conference.getServerInfosFor(request);
+                return serverInfos;
+            } else {
+                // TODO return room info
+                return null;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    protected void 
addComponentInfoRequestListeners(List<ComponentInfoRequestListener> 
componentInfoRequestListeners) {
+        componentInfoRequestListeners.add(this);
+    }
+
     /**
      * Implements the getItemsFor method from the {...@link 
ItemRequestListener} interface.
      * Makes this modules available via disco#items and returns the associated 
nodes.
@@ -153,18 +167,28 @@
      */
     public List<Item> getItemsFor(InfoRequest request) throws 
ServiceDiscoveryRequestException {
         Entity to = request.getTo();
-        if(to.getNode() == null) {
-            // items request on the component
-            return conference.getItemsFor(request);
-        } else {
+        if (to.getNode() == null) {
+            // react on request send to server domain or this subdomain, but 
not to others
+            if(fullDomain.equals(to)) {
+                List<Item> conferenceItems = conference.getItemsFor(request);
+                return conferenceItems;
+            } else if (serverRuntimeContext.getServerEnitity().equals(to)) {
+                List<Item> componentItem = new ArrayList<Item>();
+                componentItem.add(new Item(fullDomain));
+                return componentItem;
+            }
+            return null;
+        } else if (fullDomain.equals(to)) {
             // might be an items request on a room
             Room room = conference.findRoom(to.getBareJID());
-            if(room != null) {
-                if(to.getResource() != null) {
+            if (room != null) {
+                if (to.getResource() != null) {
                     // request for an occupant
                     Occupant occupant = 
room.findOccupantByNick(to.getResource());
                     // request for occupant, relay
-                    if(occupant != null) relayDiscoStanza(occupant.getJid(), 
request, NamespaceURIs.XEP0030_SERVICE_DISCOVERY_ITEMS);
+                    if (occupant != null) {
+                        relayDiscoStanza(occupant.getJid(), request, 
NamespaceURIs.XEP0030_SERVICE_DISCOVERY_ITEMS);
+                    }
                 } else {
                     return room.getItemsFor(request);
                 }
@@ -223,4 +247,5 @@
     public StanzaProcessor getStanzaProcessor() {
         return stanzaProcessor;
     }
+
 }

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=810893&r1=810892&r2=810893&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 Sep  3 11:15:31 2009
@@ -59,7 +59,7 @@
 
     public void initialize() {
         roomStorageProvider.initialize();
-        occupantStorageProvider.initialize();   
+        if (occupantStorageProvider != null) 
occupantStorageProvider.initialize();   
     }
     
     public Collection<Room> getAllRooms() {


Reply via email to