/*
* 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 org.apache.vysper.storage.StorageProvider;
import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.ItemVisitor;
import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.MemberAffiliationVisitor;
import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.PubSubAffiliation;
import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.SubscriberVisitor;
import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.LastOwnerResignedException;
import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.LeafNode;
/**
* This interface defines all methods a StorageProvider has to offer to be suitable
* for a LeafNode in the pubsub-module.
*
* @author The Apache MINA Project (http://mina.apache.org)
*/
public interface LeafNodeStorageProvider extends StorageProvider {
/**
* Add a subscriber to the LeafNode.
* @param nodeName the node JID to which the subscriber should be added.
* @param subscriptionID the ID for the subscription (multiple subscription ber subscriber).
* @param subscriber the JID of the subscriber.
*/
public void addSubscriber(String nodeName, String subscriptionID, Entity subscriber);
/**
* Checks if the node specified by nodeName has a subscriber with the given JID.
* @param nodeName the node to check.
* @param subscriber the JID of the subscriber.
* @return true if this JID is subscribed to the node.
*/
public boolean containsSubscriber(String nodeName, Entity subscriber);
/**
* Checks if the node specified by nodeName has a subscriber with the given subscription ID.
* @param nodeName the node to check.
* @param subscriptionId the subscription ID to check.
* @return true if there is a subscription with the given subscription ID.
*/
public boolean containsSubscriber(String nodeName, String subscriptionId);
/**
* Fetches the subscriber for a given subscription ID.
* @param nodeName the JID of the node.
* @param subscriptionId the subscription ID we search for.
* @return the JID of the subscriber with this subscription ID
*/
public Entity getSubscriber(String nodeName, String subscriptionId);
/**
* Removes a subscription based on the subscription ID.
* @param nodeName the node from which we remove the subscription.
* @param subscriptionId the ID of the subscription to remove.
* @return true if the subscription has been removed, false otherwise.
*/
public boolean removeSubscription(String nodeName, String subscriptionId);
/**
* Removes a subscription based on the JID of the subscriber.
* @param nodeName the node from which we remove the subscription.
* @param subscriber the JID to remove.
* @return true if the subscription has been removed, false otherwise.
*/
public boolean removeSubscriber(String nodeName, Entity subscriber);
/**
* Count how many subscription a given JID has to a node
* @param nodeName the node to check
* @param subscriber the subscriber JID to check
* @return the number of subscriptions.
*/
public int countSubscriptions(String nodeName, Entity subscriber);
/**
* Count how many subscriptions a given node has.
* @param nodeName the JID of the node to check.
* @return the number of subscriptions (should return the number of subscription IDs, not subscribed JIDs).
*/
public int countSubscriptions(String nodeName);
/**
* Store a published message to a node.
* @param publisher who sent the message
* @param nodeName the node to which we want to store the message.
* @param messageID the message ID for later retrieval.
* @param item the payload of the message.
*/
public void addMessage(Entity publisher, String nodeName, String messageID, XMLElement item);
/**
* Call the SubscriberVisitor for each subscription of the given node.
* @param nodeName the node we want to iterate.
* @param subscriberVisitor the SubscriberVisitor to call
*/
public void acceptForEachSubscriber(String nodeName, SubscriberVisitor subscriberVisitor);
/**
* Call to do some preliminary tasks after the module has been configured.
*/
public void initialize();
/**
* Visits each item ever published to the node.
*
* @param nodeName
* @param iv the Visitor.
*/
public void acceptForEachItem(String nodeName, ItemVisitor iv);
/**
* When a new LeafNode is created, initialize will be called with it as a parameter.
* @param leafNode
*/
public void initialize(LeafNode leafNode);
/**
* Remove the specified node from the storage.
*/
public void delete(String name);
/**
* Add the entity to the owner list of the given node.
* @param owner
*/
public void setAffiliation(String nodeName, Entity owner, PubSubAffiliation affiliation)
throws LastOwnerResignedException;
/**
* Returns the affiliation of the entity to the node identified by nodeName.
*/
public PubSubAffiliation getAffiliation(String nodeName, Entity entity);
/**
* Visits each member-affiliation of the given node.
*/
void acceptForEachMemberAffiliation(String name, MemberAffiliationVisitor mav);
}