Author: mjakl
Date: Sat Jun 27 11:44:12 2009
New Revision: 788961

URL: http://svn.apache.org/viewvc?rev=788961&view=rev
Log:
* Reworked the NullPersistenceManager into two separate StorageProviders (one 
for collection nodes, one for leaf nodes).
* The new storage providers are default (configured at object creation) and 
keep all objects in memory (fallback if no other storage provider is 
configured).
* Moved all storage related classes into their own package (storageprovider).
* Applied uniform naming (storage provider instead of persistence manager).

Added:
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionNodeStorageProvider.java
      - copied, changed from r788947, 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/CollectionNodeStorageProvider.java
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionnodeInMemoryStorageProvider.java
      - copied, changed from r788947, 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/NullPersistenceManager.java
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeInMemoryStorageProvider.java
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeStorageProvider.java
      - copied, changed from r788947, 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/LeafNodeStorageProvider.java
Removed:
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/CollectionNodeStorageProvider.java
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/LeafNodeStorageProvider.java
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/NullPersistenceManager.java
Modified:
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/CollectionNode.java
    
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/LeafNode.java
    
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java

Modified: 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java?rev=788961&r1=788960&r2=788961&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java
 Sat Jun 27 11:44:12 2009
@@ -31,6 +31,8 @@
 import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.handler.owner.PubSubOwnerConfigureNodeHandler;
 import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.handler.owner.PubSubOwnerDeleteNodeHandler;
 import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.CollectionNode;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.CollectionNodeStorageProvider;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.LeafNodeStorageProvider;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.Feature;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
@@ -67,12 +69,19 @@
     public void initialize(ServerRuntimeContext serverRuntimeContext) {
         super.initialize(serverRuntimeContext);
 
-        CollectionNodeStorageProvider persistenceManager = 
(CollectionNodeStorageProvider) 
serverRuntimeContext.getStorageProvider(CollectionNodeStorageProvider.class);
-        if (persistenceManager == null) {
-            logger.error("No persistency manager found");
-            // TODO throw some exception - without PM we can't do anything 
useful
+        CollectionNodeStorageProvider collectionNodeStorageProvider = 
(CollectionNodeStorageProvider) 
serverRuntimeContext.getStorageProvider(CollectionNodeStorageProvider.class);
+        LeafNodeStorageProvider leafNodeStorageProvider = 
(LeafNodeStorageProvider) 
serverRuntimeContext.getStorageProvider(LeafNodeStorageProvider.class);
+        
+        if (collectionNodeStorageProvider == null) {
+            logger.error("No collection node storage provider found, using the 
default (in memory)");
         } else {
-            root.setPersistenceManager(persistenceManager);
+            
root.setCollectionNodeStorageProvider(collectionNodeStorageProvider);
+        }
+
+        if (leafNodeStorageProvider == null) {
+            logger.error("No leaf node storage provider found, using the 
default (in memory)");
+        } else {
+            root.setLeafNodeStorageProvider(leafNodeStorageProvider);
         }
     }
 

Modified: 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/CollectionNode.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/CollectionNode.java?rev=788961&r1=788960&r2=788961&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/CollectionNode.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/CollectionNode.java
 Sat Jun 27 11:44:12 2009
@@ -21,8 +21,10 @@
 
 import org.apache.vysper.compliance.SpecCompliant;
 import org.apache.vysper.xmpp.addressing.Entity;
-import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.CollectionNodeStorageProvider;
-import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.NullPersistenceManager;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.CollectionNodeStorageProvider;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.CollectionnodeInMemoryStorageProvider;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.LeafNodeInMemoryStorageProvider;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.LeafNodeStorageProvider;
 
 /**
  * A collection node is a special pubsub node containing only other nodes. 
Either more CollectionNodes or
@@ -33,14 +35,17 @@
 @SpecCompliant(spec="xep-0060", status= 
SpecCompliant.ComplianceStatus.IN_PROGRESS, coverage = 
SpecCompliant.ComplianceCoverage.UNSUPPORTED)
 public class CollectionNode {
 
-    // the persistence manager for storing and retrieving node-info
-    protected CollectionNodeStorageProvider storage;
+    // the storage provider for storing and retrieving node-info
+    protected CollectionNodeStorageProvider collectionNodeStorage;
+    // the storage provider for leaf nodes
+    protected LeafNodeStorageProvider leafNodeStorage;
 
     /**
      * Initializes the CollectionNode
      */
     public CollectionNode() {
-        storage = new NullPersistenceManager();
+        collectionNodeStorage = new CollectionnodeInMemoryStorageProvider();
+        leafNodeStorage = new LeafNodeInMemoryStorageProvider();
     }
 
     /**
@@ -50,7 +55,7 @@
      * @return the LeafNode for the JID
      */
     public LeafNode find(Entity jid) {
-        return storage.findNode(jid);
+        return collectionNodeStorage.findNode(jid);
     }
 
     /**
@@ -61,23 +66,33 @@
      * @throws DuplicateNodeException if the JID is already taken.
      */
     public LeafNode createNode(Entity jid) throws DuplicateNodeException {
-        if(storage.containsNode(jid)) {
+        if(collectionNodeStorage.containsNode(jid)) {
             throw new DuplicateNodeException(jid.getFullQualifiedName() + " 
already present");
         }
 
         LeafNode node = new LeafNode(jid);
+        node.setPersistenceManager(leafNodeStorage);
 
-        storage.storeNode(jid, node);
+        collectionNodeStorage.storeNode(jid, node);
 
         return node;
     }
 
     /**
-     * Change the persistency manager.
+     * Change the storage provider to be used for the collection nodes.
      * 
-     * @param persistenceManager the new persitency manager.
+     * @param storageProvider the new storage provider.
      */
-    public void setPersistenceManager(CollectionNodeStorageProvider 
persistenceManager) {
-        storage = persistenceManager;
+    public void setCollectionNodeStorageProvider(CollectionNodeStorageProvider 
storageProvider) {
+        this.collectionNodeStorage = storageProvider;
+    }
+
+    /**
+     * Change the storage provider to be used for the leaf nodes.
+     * 
+     * @param storageProvider the new storage provider.
+     */
+    public void setLeafNodeStorageProvider(LeafNodeStorageProvider 
storageProvider) {
+        this.leafNodeStorage = storageProvider;
     }
 }

Modified: 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/LeafNode.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/LeafNode.java?rev=788961&r1=788960&r2=788961&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/LeafNode.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/model/LeafNode.java
 Sat Jun 27 11:44:12 2009
@@ -22,9 +22,9 @@
 import org.apache.vysper.compliance.SpecCompliant;
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
-import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.NullPersistenceManager;
-import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.LeafNodeStorageProvider;
 import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.SubscriberNotificationVisitor;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.LeafNodeInMemoryStorageProvider;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.LeafNodeStorageProvider;
 import org.apache.vysper.xmpp.xmlfragment.XMLElement;
 
 /**
@@ -38,8 +38,8 @@
 
     // the jid of the node
     protected Entity jid;
-    // the persistency manager for storing and retrieving node information.
-    protected LeafNodeStorageProvider storage = new NullPersistenceManager();
+    // the storage provider for storing and retrieving node information.
+    protected LeafNodeStorageProvider storage = new 
LeafNodeInMemoryStorageProvider();
 
     /**
      * Creates a new LeafNode with the specified JID.

Copied: 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionNodeStorageProvider.java
 (from r788947, 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/CollectionNodeStorageProvider.java)
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionNodeStorageProvider.java?p2=mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionNodeStorageProvider.java&p1=mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/CollectionNodeStorageProvider.java&r1=788947&r2=788961&rev=788961&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/CollectionNodeStorageProvider.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionNodeStorageProvider.java
 Sat Jun 27 11:44:12 2009
@@ -17,7 +17,7 @@
  *  under the License.
  *
  */
-package org.apache.vysper.xmpp.modules.extension.xep0060_pubsub;
+package 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider;
 
 import org.apache.vysper.compliance.SpecCompliant;
 import org.apache.vysper.storage.StorageProvider;

Copied: 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionnodeInMemoryStorageProvider.java
 (from r788947, 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/NullPersistenceManager.java)
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionnodeInMemoryStorageProvider.java?p2=mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionnodeInMemoryStorageProvider.java&p1=mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/NullPersistenceManager.java&r1=788947&r2=788961&rev=788961&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/NullPersistenceManager.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/CollectionnodeInMemoryStorageProvider.java
 Sat Jun 27 11:44:12 2009
@@ -17,92 +17,51 @@
  *  under the License.
  *
  */
-package org.apache.vysper.xmpp.modules.extension.xep0060_pubsub;
+package 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.TreeMap;
 
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.LeafNode;
-import org.apache.vysper.xmpp.xmlfragment.XMLElement;
 
 /**
+ * This storage provider keeps all objects in memory and looses its content 
when
+ * removed from memory. This is the default storage provider for collection 
nodes.
+ * 
  * @author The Apache MINA Project (http://mina.apache.org)
- *
  */
-public class NullPersistenceManager implements LeafNodeStorageProvider, 
CollectionNodeStorageProvider {
+public class CollectionnodeInMemoryStorageProvider implements 
CollectionNodeStorageProvider {
 
-       protected Map<Entity, LeafNode> nodes;
+    // Map to store the nodes, access via JID
+    protected Map<Entity, LeafNode> nodes;
 
-       protected Map<String, Entity> subscribers;
-       protected Map<String, XMLElement> messages;
-       
-       public NullPersistenceManager() {
-               nodes = new HashMap<Entity, LeafNode>();
-               
-               this.subscribers = new TreeMap<String, Entity>();
-               this.messages = new TreeMap<String, XMLElement>();
-       }
-       
-       public LeafNode findNode(Entity jid) {
-               return nodes.get(jid);
-       }
-       
-       public boolean containsNode(Entity jid) {
-               return nodes.containsKey(jid);
-       }
-       
-       public void storeNode(Entity jid, LeafNode node) {
-               nodes.put(jid, node);
-       }
-       /////////////////////////////////////////////////////////////////
-       
-       public void addSubscriber(Entity nodeJID, String subscriptionID, Entity 
subscriber) {
-               subscribers.put(subscriptionID, subscriber);
-       }
-
-       public boolean containsSubscriber(Entity nodeJID, Entity subscriber) {
-               return subscribers.containsValue(subscriber);
-       }
-
-       public boolean containsSubscriber(Entity nodeJID, String 
subscriptionId) {
-               return subscribers.containsKey(subscriptionId);
-       }
-
-       public Entity getSubscriber(Entity nodeJID, String subscriptionId) {
-               return subscribers.get(subscriptionId);
-       }
-
-       public boolean removeSubscription(Entity nodeJID, String 
subscriptionId) {
-               return subscribers.remove(subscriptionId) != null;
-       }
-
-       public boolean removeSubscriber(Entity nodeJID, Entity subscriber) {
-               return subscribers.values().remove(subscriber);
-       }
-
-       public int countSubscriptions(Entity nodeJID, Entity subscriber) {
-               int count = 0;
-               for(Entity sub : subscribers.values()) {
-                       if(subscriber.equals(sub)) {
-                               ++count;
-                       }
-               }
-               return count;
-       }
-
-       public int countSubscriptions(Entity nodeJID) {
-               return subscribers.size();
-       }
-
-       public void addMessage(Entity nodeJID, String messageID, XMLElement 
item) {
-               messages.put(messageID, item);
-       }
-
-       public void acceptForEachSubscriber(Entity nodeJID, SubscriberVisitor 
subscriberVisitor) {
-               for(Entity sub : subscribers.values()) {
-                       subscriberVisitor.visit(nodeJID, sub);
-               }
-       }
+    /**
+     * Initialize the storage provider.
+     */
+    public CollectionnodeInMemoryStorageProvider() {
+        nodes = new HashMap<Entity, LeafNode>();
+    }
+
+    /**
+     * Search for a LeafNode via its JID.
+     */
+    public LeafNode findNode(Entity jid) {
+        return nodes.get(jid);
+    }
+
+    /**
+     * Check whether an LeafNode with the given JID is known.
+     */
+    public boolean containsNode(Entity jid) {
+        return nodes.containsKey(jid);
+    }
+
+    /**
+     * Add the given LeafNode with the given JID to the storage.
+     * An existing ode with the same JID will be replaced.
+     */
+    public void storeNode(Entity jid, LeafNode node) {
+        nodes.put(jid, node);
+    }
 }

Added: 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeInMemoryStorageProvider.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeInMemoryStorageProvider.java?rev=788961&view=auto
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeInMemoryStorageProvider.java
 (added)
+++ 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeInMemoryStorageProvider.java
 Sat Jun 27 11:44:12 2009
@@ -0,0 +1,127 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.vysper.xmpp.addressing.Entity;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.SubscriberVisitor;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
+
+/**
+ * This storage provider keeps all objects in memory and looses its content 
when
+ * removed from memory. This is the default storage provider for leaf nodes.
+ * 
+ * @author The Apache MINA Project (http://mina.apache.org)
+ */
+public class LeafNodeInMemoryStorageProvider implements 
LeafNodeStorageProvider {
+
+    // stores subscribers, access via subid
+    protected Map<String, Entity> subscribers;
+    // stores messages, access via itemid
+    protected Map<String, XMLElement> messages;
+
+    /**
+     * Initialize the storage maps.
+     */
+    public LeafNodeInMemoryStorageProvider() {
+        this.subscribers = new TreeMap<String, Entity>();
+        this.messages = new TreeMap<String, XMLElement>();
+    }
+
+    /**
+     * Add a subscriber with given subID.
+     */
+    public void addSubscriber(Entity nodeJID, String subscriptionID, Entity 
subscriber) {
+        subscribers.put(subscriptionID, subscriber);
+    }
+
+    /**
+     * Check if a subscriber is already known.
+     */
+    public boolean containsSubscriber(Entity nodeJID, Entity subscriber) {
+        return subscribers.containsValue(subscriber);
+    }
+
+    /**
+     * Check if a subscriptionId is already known.
+     */
+    public boolean containsSubscriber(Entity nodeJID, String subscriptionId) {
+        return subscribers.containsKey(subscriptionId);
+    }
+
+    /**
+     * Retrieve a subscriber via its subsriptionId.
+     */
+    public Entity getSubscriber(Entity nodeJID, String subscriptionId) {
+        return subscribers.get(subscriptionId);
+    }
+
+    /**
+     * Remove a subscriber via its subscriptionId.
+     */
+    public boolean removeSubscription(Entity nodeJID, String subscriptionId) {
+        return subscribers.remove(subscriptionId) != null;
+    }
+
+    /**
+     * Remove a subscriber via its JID. This removes all subscriptions of the 
JID.
+     */
+    public boolean removeSubscriber(Entity nodeJID, Entity subscriber) {
+        return subscribers.values().remove(subscriber);
+    }
+
+    /**
+     * Count how often a given subscriber is subscribed.
+     */
+    public int countSubscriptions(Entity nodeJID, Entity subscriber) {
+        int count = 0;
+        for(Entity sub : subscribers.values()) {
+            if(subscriber.equals(sub)) {
+                ++count;
+            }
+        }
+        return count;
+    }
+
+    /**
+     * Count how many subscriptions this node has.
+     */
+    public int countSubscriptions(Entity nodeJID) {
+        return subscribers.size();
+    }
+
+    /**
+     * Add a message to the storage.
+     */
+    public void addMessage(Entity nodeJID, String messageID, XMLElement item) {
+        messages.put(messageID, item);
+    }
+
+    /**
+     * Accept method (see visitor pattern) to visit all subscribers of this 
node.
+     */
+    public void acceptForEachSubscriber(Entity nodeJID, SubscriberVisitor 
subscriberVisitor) {
+        for(Entity sub : subscribers.values()) {
+            subscriberVisitor.visit(nodeJID, sub);
+        }
+    }
+}

Copied: 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeStorageProvider.java
 (from r788947, 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/LeafNodeStorageProvider.java)
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeStorageProvider.java?p2=mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeStorageProvider.java&p1=mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/LeafNodeStorageProvider.java&r1=788947&r2=788961&rev=788961&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/LeafNodeStorageProvider.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/storageprovider/LeafNodeStorageProvider.java
 Sat Jun 27 11:44:12 2009
@@ -17,11 +17,12 @@
  *  under the License.
  *
  */
-package org.apache.vysper.xmpp.modules.extension.xep0060_pubsub;
+package 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider;
 
 import org.apache.vysper.compliance.SpecCompliant;
 import org.apache.vysper.storage.StorageProvider;
 import org.apache.vysper.xmpp.addressing.Entity;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.SubscriberVisitor;
 import org.apache.vysper.xmpp.xmlfragment.XMLElement;
 
 /**

Modified: 
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java?rev=788961&r1=788960&r2=788961&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java
 (original)
+++ 
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java
 Sat Jun 27 11:44:12 2009
@@ -21,14 +21,17 @@
 
 import junit.framework.TestCase;
 
+import org.apache.vysper.storage.OpenStorageProviderRegistry;
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
 import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.handler.AbstractStanzaGenerator;
 import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.CollectionNode;
 import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.LeafNode;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.CollectionnodeInMemoryStorageProvider;
+import 
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.LeafNodeInMemoryStorageProvider;
 import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.server.SessionContext;
+import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
 import org.apache.vysper.xmpp.server.TestSessionContext;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.state.resourcebinding.ResourceState;
@@ -51,24 +54,32 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-
+        
         sessionContext = 
TestSessionContext.createWithStanzaReceiverRelayAuthenticated();
+        configureStorageProvider();
+
         clientBare = new EntityImpl("tester", "vysper.org", null);
         sessionContext.setInitiatingEntity(clientBare);
 
         String boundResourceId = sessionContext.bindResource();
         client = new EntityImpl(clientBare, boundResourceId);
         pubsub = EntityImpl.parse("pubsub.vysper.org/news");
-        root = new CollectionNode();
+        setResourceConnected(boundResourceId);
 
+        root = new CollectionNode();
         node = root.createNode(pubsub);
 
-        setResourceConnected(sessionContext, boundResourceId);
-
         handler = getHandler();
     }
 
-    private void setResourceConnected(SessionContext sessionContext, String 
boundResourceId) {
+    protected void configureStorageProvider() {
+        OpenStorageProviderRegistry storageProviderRegistry = new 
OpenStorageProviderRegistry();
+        storageProviderRegistry.add(new 
CollectionnodeInMemoryStorageProvider());
+        storageProviderRegistry.add(new LeafNodeInMemoryStorageProvider());
+        ((DefaultServerRuntimeContext) 
sessionContext.getServerRuntimeContext()).setStorageProviderRegistry(storageProviderRegistry);
+    }
+
+    private void setResourceConnected(String boundResourceId) {
         
sessionContext.getServerRuntimeContext().getResourceRegistry().setResourceState(boundResourceId,
 ResourceState.CONNECTED);
     }
 


Reply via email to