You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by be...@apache.org on 2008/05/26 20:11:10 UTC

svn commit: r660259 - in /labs/vysper/src: main/java/org/apache/vysper/xmpp/addressing/ main/java/org/apache/vysper/xmpp/modules/ main/java/org/apache/vysper/xmpp/modules/core/base/handler/ main/java/org/apache/vysper/xmpp/modules/roster/ main/java/org...

Author: berndf
Date: Mon May 26 11:11:03 2008
New Revision: 660259

URL: http://svn.apache.org/viewvc?rev=660259&view=rev
Log:
[vysper] work in roster IQ and presence stuff

Added:
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterException.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java
      - copied, changed from r653995, labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/IQRosterHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java
      - copied, changed from r657582, labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterPersistenceManager.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterManager.java
      - copied, changed from r657582, labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterPersistenceManager.java
    labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/
    labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/
    labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java
Removed:
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/IQRosterHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterPersistenceManager.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterPersistenceManager.java
Modified:
    labs/vysper/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/ServerRuntimeContextService.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterDictionary.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/PresenceStanzaType.java
    labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java
    labs/vysper/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java Mon May 26 11:11:03 2008
@@ -94,7 +94,8 @@
     }
 
     public Entity getBareJID() {
-		return new EntityImpl(node, domain, null);
+        if (!isResourceSet()) return this; // this _is_ a bare id 
+        return new EntityImpl(node, domain, null);
 	}
 
     public String getCanonicalizedName() {

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/ServerRuntimeContextService.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/ServerRuntimeContextService.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/ServerRuntimeContextService.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/ServerRuntimeContextService.java Mon May 26 11:11:03 2008
@@ -20,5 +20,5 @@
  * a service which is managed and retrievable through the server runtime context 
  */
 public interface ServerRuntimeContextService {
-    String getName();
+    String getServiceName();
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java Mon May 26 11:11:03 2008
@@ -19,13 +19,11 @@
 
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
-import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy;
 import org.apache.vysper.xmpp.delivery.failure.ReturnErrorToSenderFailureStrategy;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.MessageStanza;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
-import org.apache.vysper.xmpp.stanza.XMPPCoreStanzaVerifier;
 import org.apache.vysper.xmpp.xmlfragment.XMLElement;
 import org.apache.vysper.xmpp.xmlfragment.XMLSemanticError;
 
@@ -44,8 +42,6 @@
 
     protected Stanza executeCore(XMPPCoreStanza stanza, SessionContext sessionContext) {
 
-        XMPPCoreStanzaVerifier stanzaVerifier = stanza.getCoreVerifier();
-        
         // (try to) read thread id
         String threadId = null;
         XMLElement threadElement = null;

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandler.java Mon May 26 11:11:03 2008
@@ -66,7 +66,10 @@
         boolean hasTo = verifier.attributePresent("to");
         boolean hasType = verifier.attributePresent("type");
         boolean isOutbound = !hasFrom && hasTo && !sessionContext.isServerToServer();
+        
         PresenceStanzaType type = presenceStanza.getPresenceType();
+        boolean subscriptionRelated = type != null && PresenceStanzaType.isSubscriptionType(type);
+        
 
         if (!hasTo && !hasType) {
             ResourceState resourceState = registry.getResourceState(registry.getFirstResourceForSession(sessionContext));

Added: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java?rev=660259&view=auto
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java (added)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java Mon May 26 11:11:03 2008
@@ -0,0 +1,19 @@
+package org.apache.vysper.xmpp.modules.roster;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ */
+public class MutableRoster implements Roster {
+    private final List<RosterItem> items = new ArrayList<RosterItem>();
+
+    public Iterator<RosterItem> iterator() {
+        return items.iterator();
+    }
+
+    public void addItem(RosterItem rosterItem) {
+        items.add(rosterItem);
+    }
+}

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java Mon May 26 11:11:03 2008
@@ -16,18 +16,13 @@
  ***********************************************************************/
 package org.apache.vysper.xmpp.modules.roster;
 
-import java.util.List;
-import java.util.ArrayList;
 import java.util.Iterator;
 
 /**
  * a whole roster for a user
  */
-public class Roster {
-    private final List<RosterItem> items = new ArrayList<RosterItem>();
+public interface Roster extends Iterable<RosterItem> {
     
-    public Iterator<RosterItem> itemsIterator() {
-        return items.iterator();
-    }
+    public Iterator<RosterItem> iterator();
     
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterDictionary.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterDictionary.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterDictionary.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterDictionary.java Mon May 26 11:11:03 2008
@@ -17,7 +17,7 @@
 
 package org.apache.vysper.xmpp.modules.roster;
 
-import org.apache.vysper.xmpp.modules.roster.handler.IQRosterHandler;
+import org.apache.vysper.xmpp.modules.roster.handler.RosterIQHandler;
 import org.apache.vysper.xmpp.protocol.NamespaceHandlerDictionary;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 
@@ -28,7 +28,7 @@
 
     public RosterDictionary() {
         super(NamespaceURIs.JABBER_IQ_ROSTER);
-        register(new IQRosterHandler());
+        register(new RosterIQHandler());
         seal();
     }
 }
\ No newline at end of file

Added: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterException.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterException.java?rev=660259&view=auto
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterException.java (added)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterException.java Mon May 26 11:11:03 2008
@@ -0,0 +1,22 @@
+package org.apache.vysper.xmpp.modules.roster;
+
+/**
+ */
+public class RosterException extends Exception {
+
+    public RosterException() {
+        super();
+    }
+
+    public RosterException(String s) {
+        super(s);
+    }
+
+    public RosterException(String s, Throwable throwable) {
+        super(s, throwable);
+    }
+
+    public RosterException(Throwable throwable) {
+        super(throwable);
+    }
+}                                             

Copied: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java (from r653995, labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/IQRosterHandler.java)
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java?p2=labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java&p1=labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/IQRosterHandler.java&r1=653995&r2=660259&rev=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/IQRosterHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java Mon May 26 11:11:03 2008
@@ -18,19 +18,27 @@
 package org.apache.vysper.xmpp.modules.roster.handler;
 
 import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
+import org.apache.vysper.xmpp.modules.roster.Roster;
+import org.apache.vysper.xmpp.modules.roster.RosterException;
+import org.apache.vysper.xmpp.modules.roster.RosterGroup;
+import org.apache.vysper.xmpp.modules.roster.RosterItem;
+import org.apache.vysper.xmpp.modules.roster.persistence.RosterManager;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.resourcebinding.ResourceRegistry;
+import org.apache.vysper.xmpp.resourcebinding.ResourceState;
+import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
-import org.apache.vysper.xmpp.resourcebinding.ResourceState;
-import org.apache.vysper.xmpp.resourcebinding.ResourceRegistry;
+
+import java.util.List;
 
 /**
- * handles bind requests
+ * handles roster get, set, push & result requests
  */
-public class IQRosterHandler extends IQHandler {
+public class RosterIQHandler extends IQHandler {
 
     protected boolean verifyNamespace(Stanza stanza) {
         return verifyInnerNamespace(stanza, NamespaceURIs.JABBER_IQ_ROSTER);
@@ -61,26 +69,54 @@
 
     private Stanza retrieveRoster(IQStanza stanza, SessionContext sessionContext) {
 
-        ResourceRegistry registry = sessionContext.getServerRuntimeContext().getResourceRegistry();
+        ServerRuntimeContext serverContext = sessionContext.getServerRuntimeContext();
+        ResourceRegistry registry = serverContext.getResourceRegistry();
+        RosterManager rosterManager = (RosterManager)serverContext.getServerRuntimeContextService(RosterManager.SERVER_SERVICE_ROSTERMANAGER);
+
+        if (rosterManager == null) {
+            return handleCannotRetrieveRoster(stanza, sessionContext);
+        }        
+        
         String resourceId = registry.getFirstResourceForSession(sessionContext);
         ResourceState currentState = registry.getResourceState(resourceId);
         if (currentState != null && currentState == ResourceState.CONNECTED) {
             registry.setResourceState(resourceId, ResourceState.INTERESTED);
         }
-        
+
+        Roster roster = null;
+        try {
+            roster = rosterManager.retrieve(stanza.getFrom().getBareJID());
+            if (roster == null) return handleCannotRetrieveRoster(stanza, sessionContext);
+        } catch (RosterException e) {
+            return handleCannotRetrieveRoster(stanza, sessionContext);
+        }
+
         StanzaBuilder stanzaBuilder =
             StanzaBuilder.createIQStanza(IQStanzaType.RESULT, stanza.getID()).
             startInnerElement("query", NamespaceURIs.JABBER_IQ_ROSTER);
-            // TODO add roster items
-        
-        
-            stanzaBuilder.startInnerElement("item").addAttribute("jid", "user2@vysper.org").addAttribute("name", "u2");
-            stanzaBuilder.endInnerElement();
         
+            for (RosterItem rosterItem : roster) {
+                stanzaBuilder.startInnerElement("item")
+                        .addAttribute("jid", rosterItem.getJid().getFullQualifiedName())
+                        .addAttribute("name", rosterItem.getName());
+                List<RosterGroup> groupList = rosterItem.getGroups();
+                if (groupList != null) {
+                    for (RosterGroup rosterGroup : groupList) {
+                        stanzaBuilder.startInnerElement("group")
+                                     .addText(rosterGroup.getName())
+                                     .endInnerElement();
+                    }
+                }
+                stanzaBuilder.endInnerElement();
+            }
         
             stanzaBuilder.endInnerElement();
 
         return stanzaBuilder.getFinalStanza();
     }
 
+    private Stanza handleCannotRetrieveRoster(IQStanza stanza, SessionContext sessionContext) {
+        throw new RuntimeException("gracefully handling roster management problem not implemented");
+    }
+
 }
\ No newline at end of file

Copied: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java (from r657582, labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterPersistenceManager.java)
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java?p2=labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java&p1=labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterPersistenceManager.java&r1=657582&r2=660259&rev=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterPersistenceManager.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/MemoryRosterManager.java Mon May 26 11:11:03 2008
@@ -19,6 +19,9 @@
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.modules.roster.Roster;
 import org.apache.vysper.xmpp.modules.roster.RosterItem;
+import org.apache.vysper.xmpp.modules.roster.RosterException;
+import org.apache.vysper.xmpp.modules.roster.MutableRoster;
+import org.apache.vysper.xmpp.modules.ServerRuntimeContextService;
 
 import java.util.Map;
 import java.util.HashMap;
@@ -26,18 +29,39 @@
 /**
  * manages rosters in memory (and if the application ends, they are lost)
  */
-public class MemoryRosterPersistenceManager implements RosterPersistenceManager {
+public class MemoryRosterManager implements RosterManager, ServerRuntimeContextService {
 
-    private Map<Entity, Roster> rosterMap = new HashMap<Entity, Roster>();
+    private Map<Entity, MutableRoster> rosterMap = new HashMap<Entity, MutableRoster>();
     
 
     public Roster retrieve(Entity jid) {
-        if (!rosterMap.containsKey(jid)) rosterMap.put(jid, new Roster());
+        if (!rosterMap.containsKey(jid)) rosterMap.put(jid, new MutableRoster());
         return rosterMap.get(jid);
     }
 
-    public void addContact(Entity jid, RosterItem rosterItem) {
-        throw new RuntimeException("not yet implemented");
+    public void addContact(Entity jid, RosterItem rosterItem) throws RosterException {
+        if (jid == null) throw new RosterException("jid not provided");
+        MutableRoster mutableRoster = (MutableRoster) retrieve(jid);
+        if (mutableRoster == null) {
+            mutableRoster = new MutableRoster();
+            rosterMap.put(jid, mutableRoster);
+        }
+        mutableRoster.addItem(rosterItem);
     }
 
+    public void modifyContact(Entity jid, RosterItem rosterItem) throws RosterException {
+        if (jid == null) throw new RosterException("jid not provided");
+        Roster roster = retrieve(jid);
+        if (roster == null) throw new RosterException("roster not available for jid = " + jid.getFullQualifiedName());
+    }
+
+    public void removeContact(Entity jid, RosterItem rosterItem) throws RosterException {
+        if (jid == null) throw new RosterException("jid not provided");
+        Roster roster = retrieve(jid);
+        if (roster == null) throw new RosterException("roster not available for jid = " + jid.getFullQualifiedName());
+    }
+
+    public String getServiceName() {
+        return RosterManager.SERVER_SERVICE_ROSTERMANAGER;
+    }
 }

Copied: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterManager.java (from r657582, labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterPersistenceManager.java)
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterManager.java?p2=labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterManager.java&p1=labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterPersistenceManager.java&r1=657582&r2=660259&rev=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterPersistenceManager.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/persistence/RosterManager.java Mon May 26 11:11:03 2008
@@ -18,12 +18,22 @@
 
 import org.apache.vysper.xmpp.modules.roster.Roster;
 import org.apache.vysper.xmpp.modules.roster.RosterItem;
+import org.apache.vysper.xmpp.modules.roster.RosterException;
 import org.apache.vysper.xmpp.addressing.Entity;
 
 /**
+ * for getting and changing rosters. implementations must transparently handle persistence
  */
-public interface RosterPersistenceManager {
-    Roster retrieve(Entity jid);
+public interface RosterManager {
 
-    void addContact(Entity jid, RosterItem rosterItem);
+    public final static String SERVER_SERVICE_ROSTERMANAGER = "rosterManager";
+    
+    Roster retrieve(Entity jid) throws RosterException;
+
+    void addContact(Entity jid, RosterItem rosterItem) throws RosterException;
+    
+    void modifyContact(Entity jid, RosterItem rosterItem) throws RosterException;
+    
+    void removeContact(Entity jid, RosterItem rosterItem) throws RosterException;
+    
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java Mon May 26 11:11:03 2008
@@ -132,10 +132,10 @@
 
     public void registerServerRuntimeContextService(ServerRuntimeContextService service) {
         if (service == null) throw new IllegalStateException("service must not be null");
-        if (serverRuntimeContextServiceMap.get(service.getName()) == null) {
-            throw new IllegalStateException("service already registered: " + service.getName());
+        if (serverRuntimeContextServiceMap.get(service.getServiceName()) != null) {
+            throw new IllegalStateException("service already registered: " + service.getServiceName());
         }
-        serverRuntimeContextServiceMap.put(service.getName(), service);
+        serverRuntimeContextServiceMap.put(service.getServiceName(), service);
     }
 
     public ServerRuntimeContextService getServerRuntimeContextService(String name) {

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/PresenceStanzaType.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/PresenceStanzaType.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/PresenceStanzaType.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/PresenceStanzaType.java Mon May 26 11:11:03 2008
@@ -46,5 +46,10 @@
     public String value() {
         return value;
     }
+    
+    public static boolean isSubscriptionType(PresenceStanzaType presenceStanzaType) {
+        return presenceStanzaType == SUBSCRIBE || presenceStanzaType == SUBSCRIBED ||
+               presenceStanzaType == UNSUBSCRIBE || presenceStanzaType == UNSUBSCRIBED; 
+    }
 
 }
\ No newline at end of file

Modified: labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java (original)
+++ labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/PresenceHandlerTestCase.java Mon May 26 11:11:03 2008
@@ -20,57 +20,53 @@
 import junit.framework.TestCase;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.resourcebinding.ResourceState;
-import org.apache.vysper.xmpp.server.SessionState;
 import org.apache.vysper.xmpp.server.TestSessionContext;
-import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
+import org.apache.vysper.xmpp.modules.roster.persistence.MemoryRosterManager;
+import org.apache.vysper.xmpp.modules.roster.handler.RosterIQHandler;
 
 /**
  */
 public class PresenceHandlerTestCase extends TestCase {
     private TestSessionContext sessionContext;
 
-    private SessionStateHolder sessionStateHolder = new SessionStateHolder();
     private PresenceHandler presenceHandler = new PresenceHandler();
     private String boundResourceId;
+    protected MemoryRosterManager rosterManager;
+    protected EntityImpl client;
+    protected RosterIQHandler handler;
 
     protected void setUp() throws Exception {
         super.setUp();
-        sessionContext = new TestSessionContext(sessionStateHolder);
-        sessionContext.setInitiatingEntity(EntityImpl.parse("tester@vysper.org"));
-        sessionStateHolder.setState(SessionState.AUTHENTICATED);
+        sessionContext = TestSessionContext.createWithStanzaReceiverRelayAuthenticated();
+        client = EntityImpl.parse("tester@vysper.org");
+        sessionContext.setInitiatingEntity(client);
         boundResourceId = sessionContext.bindResource();
         sessionContext.getServerRuntimeContext().getResourceRegistry().setResourceState(boundResourceId, ResourceState.INTERESTED);
+        rosterManager = new MemoryRosterManager();
+        sessionContext.getServerRuntimeContext().registerServerRuntimeContextService(rosterManager);
+        handler = new RosterIQHandler();
     }
 
-    protected ResourceState getBoundResourcesState() {
-        return sessionContext.getServerRuntimeContext().getResourceRegistry().getResourceState(boundResourceId);
-    }
-    
-    protected void setBoundResourcesState(ResourceState newResourcesState) {
-        sessionContext.getServerRuntimeContext().getResourceRegistry().setResourceState(boundResourceId, newResourcesState);
-    }
-    
-    public void testInitialPresence() {
-        StanzaBuilder stanzaBuilder = new StanzaBuilder("presence");
-
-        assertEquals(getBoundResourcesState(), ResourceState.INTERESTED);
-        ResponseStanzaContainer responseStanzaContainer = presenceHandler.execute(stanzaBuilder.getFinalStanza(), sessionContext, null);
-        assertNull(responseStanzaContainer);
-        assertEquals(getBoundResourcesState(), ResourceState.AVAILABLE);
-    }
-
-    public void testUnavailable() {
-        StanzaBuilder stanzaBuilder = StanzaBuilder.createPresenceStanza(null, null, null, PresenceStanzaType.UNAVAILABLE, null, null);
+    public void testRosterGet() {
+        
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(IQStanzaType.GET, "id1");
+        stanzaBuilder.addAttribute("from", client.getFullQualifiedName());
+        stanzaBuilder.startInnerElement("query").addNamespaceAttribute(NamespaceURIs.JABBER_IQ_ROSTER).endInnerElement();
 
-        setBoundResourcesState(ResourceState.AVAILABLE);
-        ResponseStanzaContainer responseStanzaContainer = presenceHandler.execute(stanzaBuilder.getFinalStanza(), sessionContext, null);
-        assertNull(responseStanzaContainer);
-        assertEquals(ResourceState.UNAVAILABLE, getBoundResourcesState());
+        handler.execute(stanzaBuilder.getFinalStanza(), sessionContext, null);
+        
+//        C: <iq from='juliet@example.com/balcony'
+//               type='get'
+//               id='roster_get'>
+//            <query xmlns='jabber:iq:roster'/>
+//          </iq>
         
-        // TODO check that the required notifications are sent
     }
 
+
 }

Added: labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java?rev=660259&view=auto
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java (added)
+++ labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java Mon May 26 11:11:03 2008
@@ -0,0 +1,10 @@
+package org.apache.vysper.xmpp.modules.roster.handler;
+
+import junit.framework.TestCase;
+
+/**
+ */
+public class RosterIQHandlerTestCase extends TestCase {
+    
+    
+}

Modified: labs/vysper/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java?rev=660259&r1=660258&r2=660259&view=diff
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java (original)
+++ labs/vysper/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java Mon May 26 11:11:03 2008
@@ -42,6 +42,12 @@
         return sessionContext;
     }
 
+    public static TestSessionContext createWithStanzaReceiverRelayAuthenticated() {
+        SessionStateHolder sessionStateHolder = new SessionStateHolder();
+        sessionStateHolder.setState(SessionState.AUTHENTICATED);
+        return createWithStanzaReceiverRelay(sessionStateHolder);
+    }
+    
     public static TestSessionContext createWithStanzaReceiverRelay(SessionStateHolder sessionStateHolder) {
         StanzaReceiverRelay relay = new org.apache.vysper.xmpp.delivery.StanzaReceiverRelay();
         DefaultServerRuntimeContext serverContext = new DefaultServerRuntimeContext(new EntityImpl(null, "test", null), relay);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org