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