You are viewing a plain text version of this content. The canonical link for it is here.
Posted to nuvem-commits@incubator.apache.org by jo...@apache.org on 2011/07/10 21:47:25 UTC
svn commit: r1144969 - in /incubator/nuvem/trunk:
nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/
nuvem-google/src/main/java/org/apache/nuvem/cloud/xmpp/impl/
nuvem-standalone/src/main/resources/
nuvem-standalone/src/main/resources/META-INF/
Author: johnp
Date: Sun Jul 10 21:47:25 2011
New Revision: 1144969
URL: http://svn.apache.org/viewvc?rev=1144969&view=rev
Log:
refactored to place the common code (which broadcasts recieved messages to listeners) in single place and also promoted xmpp service for standalone implementation
Modified:
incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/AbstractXMPPEndPoint.java
incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/XMPPEndPoint.java
incubator/nuvem/trunk/nuvem-google/src/main/java/org/apache/nuvem/cloud/xmpp/impl/GoogleRecieverServlet.java
incubator/nuvem/trunk/nuvem-standalone/src/main/resources/META-INF/sca-contribution.xml
incubator/nuvem/trunk/nuvem-standalone/src/main/resources/nuvemxmpp.composite
Modified: incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/AbstractXMPPEndPoint.java
URL: http://svn.apache.org/viewvc/incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/AbstractXMPPEndPoint.java?rev=1144969&r1=1144968&r2=1144969&view=diff
==============================================================================
--- incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/AbstractXMPPEndPoint.java (original)
+++ incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/AbstractXMPPEndPoint.java Sun Jul 10 21:47:25 2011
@@ -20,9 +20,13 @@
package org.apache.nuvem.cloud.xmpp;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.commons.lang.StringUtils;
import org.apache.nuvem.cloud.xmpp.message.Message;
import org.apache.nuvem.cloud.xmpp.message.MessageBuilder;
import org.apache.nuvem.cloud.xmpp.message.MessageListener;
@@ -36,6 +40,7 @@ public abstract class AbstractXMPPEndPoi
* Listeners for recivnig the XMPP messages from specific JIDs
*/
protected Map<JID, MessageListener> listeners = new ConcurrentHashMap<JID, MessageListener>();
+ protected List<MessageListener> genericListeners = Collections.synchronizedList(new ArrayList<MessageListener>());
public boolean isConnected() {
throw new UnsupportedOperationException("still not implemented");
@@ -48,10 +53,21 @@ public abstract class AbstractXMPPEndPoi
public void registerListner(JID jid, MessageListener listener) {
if (listener == null || jid == null)
throw new IllegalArgumentException("invalid jid/listener");
- listeners.put(jid, listener);
+
+ //avoid resource identifier for listeners
+ listeners.put(new JID(StringUtils.substringBefore(jid.asString(), "/")), listener);
}
+ /**
+ * {@inheritDoc}
+ */
+ public void registerListener(MessageListener listener) {
+ if (listener == null)
+ throw new IllegalArgumentException("invalid listener");
+ genericListeners.add(listener);
+ }
+
public Status sendTextMessage(String content, String recipient) {
Message message = new MessageBuilder().containing(content).toRecipient(
recipient).build();
@@ -86,10 +102,37 @@ public abstract class AbstractXMPPEndPoi
public MessageListener getListenerFor(JID jid) {
MessageListener target = null;
- if (listeners != null && (target = listeners.get(jid)) != null)
+ if (listeners != null
+ && (target = listeners.get(new JID(StringUtils.substringBefore(
+ jid.asString(), "/")))) != null)
return target;
// default listener.
return MessageListener.LOGGING_LISTENER;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<MessageListener> getListeners() {
+ if (this.genericListeners == null || this.genericListeners.size() == 0) {
+ return Collections.EMPTY_LIST;
+ }
+ //returning a copy to maintain thread safety.
+ List<MessageListener> listeners = new ArrayList<MessageListener>();
+ listeners.addAll(genericListeners);
+ return listeners;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void broadCastToListeners(Message message) {
+ List<MessageListener> listeners = new ArrayList<MessageListener>();
+ listeners.add(getListenerFor(message.sender()));
+ listeners.addAll(getListeners());
+ for (MessageListener listener : listeners) {
+ listener.listen(message);
+ }
+ }
}
Modified: incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/XMPPEndPoint.java
URL: http://svn.apache.org/viewvc/incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/XMPPEndPoint.java?rev=1144969&r1=1144968&r2=1144969&view=diff
==============================================================================
--- incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/XMPPEndPoint.java (original)
+++ incubator/nuvem/trunk/nuvem-api/src/main/java/org/apache/nuvem/cloud/xmpp/XMPPEndPoint.java Sun Jul 10 21:47:25 2011
@@ -20,6 +20,8 @@
package org.apache.nuvem.cloud.xmpp;
+import java.util.List;
+
import org.apache.nuvem.cloud.xmpp.message.Message;
import org.apache.nuvem.cloud.xmpp.message.MessageBuilder;
import org.apache.nuvem.cloud.xmpp.message.MessageListener;
@@ -98,6 +100,16 @@ public interface XMPPEndPoint {
* @see MessageListener#listen(Message)
*/
void registerListner(JID jid, MessageListener listener);
+
+ /**
+ * Registers the {@link MessageListener} to listen to messages recieved from any JID!
+ * On receipt of an XMPP message, the endpoint will call
+ * the {@link MessageListener#listen(Message)} method by passing the
+ * received message as argument.
+ * @param listener
+ * @see #registerListner(JID, MessageListener)
+ */
+ void registerListener(MessageListener listener);
/**
* Returns the message listener registered for the specific JID.
@@ -111,6 +123,18 @@ public interface XMPPEndPoint {
MessageListener getListenerFor(JID jid);
/**
+ * Returns the Message Listeners registered using {@link #registerListener(MessageListener)}
+ * @return the listeners registered using {@link #registerListener(MessageListener)}
+ */
+ List<MessageListener> getListeners();
+
+ /**
+ * Broadcasts the message to all listeners registered with this endpoint.
+ * @param message the XMPP Message.
+ */
+ void broadCastToListeners(Message message);
+
+ /**
* Clears the listener for the specified JID, which means, the messages
* received from this specific JID will be ignored/lost!
*
Modified: incubator/nuvem/trunk/nuvem-google/src/main/java/org/apache/nuvem/cloud/xmpp/impl/GoogleRecieverServlet.java
URL: http://svn.apache.org/viewvc/incubator/nuvem/trunk/nuvem-google/src/main/java/org/apache/nuvem/cloud/xmpp/impl/GoogleRecieverServlet.java?rev=1144969&r1=1144968&r2=1144969&view=diff
==============================================================================
--- incubator/nuvem/trunk/nuvem-google/src/main/java/org/apache/nuvem/cloud/xmpp/impl/GoogleRecieverServlet.java (original)
+++ incubator/nuvem/trunk/nuvem-google/src/main/java/org/apache/nuvem/cloud/xmpp/impl/GoogleRecieverServlet.java Sun Jul 10 21:47:25 2011
@@ -20,6 +20,8 @@
package org.apache.nuvem.cloud.xmpp.impl;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.logging.Logger;
import javax.servlet.ServletConfig;
@@ -97,14 +99,6 @@ public class GoogleRecieverServlet exten
Message message = xmpp.parseMessage(req);
org.apache.nuvem.cloud.xmpp.message.Message nuvemMessage = GoogleXMPPMessageAdapter
.toNuvemMessage(message);
- JID from = message.getFromJid();
-
- // for identifying the listeners, we exclude the resource.
- String jidExcludingResource = StringUtils.substringBefore(from.getId(),
- "/");
-
- endPoint.getListenerFor(
- new org.apache.nuvem.cloud.xmpp.JID(jidExcludingResource))
- .listen(nuvemMessage);
+ endPoint.broadCastToListeners(nuvemMessage);
}
}
Modified: incubator/nuvem/trunk/nuvem-standalone/src/main/resources/META-INF/sca-contribution.xml
URL: http://svn.apache.org/viewvc/incubator/nuvem/trunk/nuvem-standalone/src/main/resources/META-INF/sca-contribution.xml?rev=1144969&r1=1144968&r2=1144969&view=diff
==============================================================================
--- incubator/nuvem/trunk/nuvem-standalone/src/main/resources/META-INF/sca-contribution.xml (original)
+++ incubator/nuvem/trunk/nuvem-standalone/src/main/resources/META-INF/sca-contribution.xml Sun Jul 10 21:47:25 2011
@@ -19,10 +19,10 @@
-->
<contribution xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
- xmlns:standalone="http://nuvemstandalone">
+ xmlns:nuvem="http://apache.org/nuvem">
- <export namespace="http://nuvemstandalone" />
- <export.java package="org.apache.nuvem.cloud.xmpp.client" />
+ <deployable composite="nuvem:xmppstandalone" />
+ <export namespace="http://apache.org/nuvem" />
+
- <deployable composite="standalone:xmpp" />
</contribution>
\ No newline at end of file
Modified: incubator/nuvem/trunk/nuvem-standalone/src/main/resources/nuvemxmpp.composite
URL: http://svn.apache.org/viewvc/incubator/nuvem/trunk/nuvem-standalone/src/main/resources/nuvemxmpp.composite?rev=1144969&r1=1144968&r2=1144969&view=diff
==============================================================================
--- incubator/nuvem/trunk/nuvem-standalone/src/main/resources/nuvemxmpp.composite (original)
+++ incubator/nuvem/trunk/nuvem-standalone/src/main/resources/nuvemxmpp.composite Sun Jul 10 21:47:25 2011
@@ -15,9 +15,14 @@
-->
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
- targetNamespace="http://nuvemstandalone" name="xmpp">
-
-
+ targetNamespace="http://apache.org/nuvem" name="xmppstandalone">
+
+ <service name="XMPPEndPoint" promote="XMPPComponent/XMPPEndPoint" />
+ <property name="clientJID" type="xs:string">nuvem@localhost</property>
+ <property name="clientPassword" type="xs:string">password</property>
+ <property name="trustStorePath" type="xs:string">truststorepath</property>
+ <property name="trustStorePassword" type="xs:string">changeit</property>
+
<component name="XMPPComponent">
<implementation.java
class="org.apache.nuvem.cloud.xmpp.client.DefaultXMPPEndPoint" />
@@ -57,10 +62,10 @@
<service name="XMPPConnector">
<interface.java interface="org.apache.nuvem.cloud.xmpp.XMPPConnector" />
</service>
- <property name="clientJID">nuvem@localhost</property>
- <property name="clientPassword">password</property>
- <property name="trustStorePath">truststorepath</property>
- <property name="trustStorePassword">changeit</property>
+ <property name="clientJID" source="$clientJID" />
+ <property name="clientPassword" source="$clientPassword" />
+ <property name="trustStorePath" source="$trustStorePath" />
+ <property name="trustStorePassword" source="$trustStorePassword" />
</component>
</composite>