Author: berndf
Date: Thu Sep  3 11:11:02 2009
New Revision: 810892

URL: http://svn.apache.org/viewvc?rev=810892&view=rev
Log:
VYSPER-62: support components in service disco

Added:
    
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ComponentInfoRequestListener.java
      - copied, changed from r809880, 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java
Modified:
    
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/DefaultDiscoAwareModule.java
    
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java
    
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceDiscoveryRequestListenerRegistry.java
    
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
    
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java

Modified: 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/DefaultDiscoAwareModule.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/DefaultDiscoAwareModule.java?rev=810892&r1=810891&r2=810892&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/DefaultDiscoAwareModule.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/DefaultDiscoAwareModule.java
 Thu Sep  3 11:11:02 2009
@@ -24,6 +24,7 @@
 import 
org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
 import 
org.apache.vysper.xmpp.modules.servicediscovery.management.ServerInfoRequestListener;
 import 
org.apache.vysper.xmpp.modules.servicediscovery.management.ItemRequestListener;
+import 
org.apache.vysper.xmpp.modules.servicediscovery.management.ComponentInfoRequestListener;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,6 +68,13 @@
             
requestListenerRegistry.addServerInfoRequestListener(serverInfoRequestListener);
         }
 
+        List<ComponentInfoRequestListener> componentInfoRequestListeners = new 
ArrayList<ComponentInfoRequestListener>();
+        addComponentInfoRequestListeners(componentInfoRequestListeners);
+        for (ComponentInfoRequestListener componentInfoRequestListener : 
componentInfoRequestListeners) {
+            if (componentInfoRequestListener == null) continue;
+            
requestListenerRegistry.addComponentInfoRequestListener(componentInfoRequestListener);
+        }
+
         List<ItemRequestListener> itemRequestListeners = new 
ArrayList<ItemRequestListener>();
         addItemRequestListeners(itemRequestListeners);
         for (ItemRequestListener itemRequestListener : itemRequestListeners) {
@@ -84,6 +92,10 @@
         // emtpy default implementation
     }
 
+    protected void 
addComponentInfoRequestListeners(List<ComponentInfoRequestListener> 
componentInfoRequestListeners) {
+        // emtpy default implementation
+    }
+
     protected void addItemRequestListeners(List<ItemRequestListener> 
itemRequestListeners) {
         // emtpy default implementation
     }

Modified: 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java?rev=810892&r1=810891&r2=810892&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java
 Thu Sep  3 11:11:02 2009
@@ -35,9 +35,10 @@
 
     private static final Feature DEFAULT_FEATURE = new 
Feature(NamespaceURIs.XEP0030_SERVICE_DISCOVERY_INFO);
 
-    protected List<InfoRequestListener> infoRequestListeners = new 
ArrayList<InfoRequestListener>();
-    protected List<ServerInfoRequestListener> serverInfoRequestListeners = new 
ArrayList<ServerInfoRequestListener>();
-    protected List<ItemRequestListener> itemRequestListeners = new 
ArrayList<ItemRequestListener>();
+    protected final List<InfoRequestListener> infoRequestListeners = new 
ArrayList<InfoRequestListener>();
+    protected final List<ServerInfoRequestListener> serverInfoRequestListeners 
= new ArrayList<ServerInfoRequestListener>();
+    protected final List<ComponentInfoRequestListener> 
componentInfoRequestListeners = new ArrayList<ComponentInfoRequestListener>();
+    protected final List<ItemRequestListener> itemRequestListeners = new 
ArrayList<ItemRequestListener>();
 
     public void addInfoRequestListener(InfoRequestListener 
infoRequestListener) {
         infoRequestListeners.add(infoRequestListener);
@@ -47,6 +48,10 @@
         serverInfoRequestListeners.add(infoRequestListener);
     }
 
+    public void addComponentInfoRequestListener(ComponentInfoRequestListener 
infoRequestListener) {
+        componentInfoRequestListeners.add(infoRequestListener);
+    }
+
     public void addItemRequestListener(ItemRequestListener 
itemRequestListener) {
         itemRequestListeners.add(itemRequestListener);
     }
@@ -73,6 +78,24 @@
         return elements;
     }
 
+    public List<InfoElement> processComponentInfoRequest(InfoRequest 
infoRequest) throws ServiceDiscoveryRequestException {
+        // sorted structure, to place all <feature/> after <identity/>
+        List<InfoElement> elements = new ArrayList<InfoElement>();
+        for (ComponentInfoRequestListener componentInfoRequestListener : 
componentInfoRequestListeners) {
+            List<InfoElement> elementList = null;
+            try {
+                elementList = 
componentInfoRequestListener.getComponentInfosFor(infoRequest);
+            } catch (ServiceDiscoveryRequestException abortion) {
+                throw abortion;
+            } catch (Throwable e) {
+                continue;
+            }
+            if (elementList != null) elements.addAll(elementList);
+        }
+        Collections.sort(elements, new ElementPartitioningComparator());
+        return elements;
+    }
+    
     /**
      * collect all non-server feature and identity info from the listeners
      */

Modified: 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceDiscoveryRequestListenerRegistry.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceDiscoveryRequestListenerRegistry.java?rev=810892&r1=810891&r2=810892&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceDiscoveryRequestListenerRegistry.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceDiscoveryRequestListenerRegistry.java
 Thu Sep  3 11:11:02 2009
@@ -22,6 +22,7 @@
 import 
org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
 import 
org.apache.vysper.xmpp.modules.servicediscovery.management.ServerInfoRequestListener;
 import 
org.apache.vysper.xmpp.modules.servicediscovery.management.ItemRequestListener;
+import 
org.apache.vysper.xmpp.modules.servicediscovery.management.ComponentInfoRequestListener;
 
 /**
  * registers listeners which can react to service discovery item or info 
requests by yielding features, identities
@@ -38,6 +39,8 @@
     void addInfoRequestListener(InfoRequestListener infoRequestListener);
 
     void addServerInfoRequestListener(ServerInfoRequestListener 
infoRequestListener);
+    
+    void addComponentInfoRequestListener(ComponentInfoRequestListener 
infoRequestListener);
 
     void addItemRequestListener(ItemRequestListener itemRequestListener);
 }

Modified: 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java?rev=810892&r1=810891&r2=810892&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
 Thu Sep  3 11:11:02 2009
@@ -94,9 +94,12 @@
         // if "vysper.org" is the server entity, 'to' can either be 
"vysper.org", "[email protected]", "service.vysper.org".
         Entity to = stanza.getTo();
         boolean isServerInfoRequest = false;
+        boolean isComponentInfoRequest = false;
         Entity serviceEntity = serverRuntimeContext.getServerEnitity();
         if (to == null || to.equals(serviceEntity)) {
             isServerInfoRequest = true; // this can only be meant to query the 
server
+        } else if 
(serverRuntimeContext.getComponentStanzaProcessor(to.getDomain()) != null) {
+            isComponentInfoRequest = true; // this is a query to a component
         } else if (!to.isNodeSet()) {
             isServerInfoRequest = serviceEntity.equals(to);
             if (!isServerInfoRequest) {
@@ -115,6 +118,8 @@
         try {
             if (isServerInfoRequest) {
                 elements = serviceCollector.processServerInfoRequest(new 
InfoRequest(stanza.getFrom(), to, node, stanza.getID()));
+            } else if (isComponentInfoRequest) {
+                elements = serviceCollector.processComponentInfoRequest(new 
InfoRequest(stanza.getFrom(), to, node, stanza.getID()));
             } else {
                 elements = serviceCollector.processInfoRequest(new 
InfoRequest(stanza.getFrom(), to, node, stanza.getID()));
             }

Modified: 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java?rev=810892&r1=810891&r2=810892&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java
 Thu Sep  3 11:11:02 2009
@@ -85,11 +85,13 @@
 
         Entity to = stanza.getTo();
         boolean isServerInfoRequest = false;
+        boolean isComponentInfoRequest = false;
         if (to == null) {
             isServerInfoRequest = true; // this can only be meant to query the 
server
         } else if (!to.isNodeSet()) {
             isServerInfoRequest = 
serverRuntimeContext.getServerEnitity().equals(to);
-            if (!isServerInfoRequest) {
+            isComponentInfoRequest = 
serverRuntimeContext.getComponentStanzaProcessor(to.getDomain()) != null;
+            if (!isServerInfoRequest && !isComponentInfoRequest) {
                 return 
ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.ITEM_NOT_FOUND,
 stanza,
                         StanzaErrorType.CANCEL,
                         "server does not handle items query requests for " + 
to.getFullQualifiedName(),

Copied: 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ComponentInfoRequestListener.java
 (from r809880, 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java)
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ComponentInfoRequestListener.java?p2=mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ComponentInfoRequestListener.java&p1=mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java&r1=809880&r2=810892&rev=810892&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ComponentInfoRequestListener.java
 Thu Sep  3 11:11:02 2009
@@ -22,12 +22,12 @@
 import java.util.List;
 
 /**
- * listens for info request for the server JID and returns info elements to be 
returned with the response
+ * listens for info request for the components subdomain JID and returns info 
elements to be returned with the response
  *
  * @author The Apache MINA Project ([email protected])
  */
-public interface ServerInfoRequestListener {
+public interface ComponentInfoRequestListener {
 
-    public List<InfoElement> getServerInfosFor(InfoRequest request) throws 
ServiceDiscoveryRequestException;
+    public List<InfoElement> getComponentInfosFor(InfoRequest request) throws 
ServiceDiscoveryRequestException;
 
 }
\ No newline at end of file


Reply via email to