001 package org.deepamehta.plugins.subscriptions.service;
002
003 import de.deepamehta.core.DeepaMehtaObject;
004 import de.deepamehta.core.RelatedTopic;
005 import de.deepamehta.core.service.ClientState;
006 import de.deepamehta.core.service.PluginService;
007 import de.deepamehta.core.service.ResultList;
008 import java.util.ArrayList;
009
010 public interface SubscriptionService extends PluginService {
011
012 /**
013 * Create a subscription edge for useraccount to item.
014 *
015 * @param accountId topic-id of user account
016 * @param itemId topic-id of user account
017 */
018 public void subscribe(long accountId, long itemId, ClientState clientState);
019
020 /**
021 * Remove subscription (edge) for given user account and item.
022 *
023 * @param userAccount topic-id of user account
024 * @param item topic-id of subscribed item
025 */
026 public void unsubscribe(long accountId, long itemId);
027
028 /**
029 * Creates new notifications for all users with a direct or indirect (tags) subscription to the given item.
030 * Notifications are created if the (given) item is either of TopicType "User Account" or of any other TopicType
031 * which has the TopicType=Tag as a child-type. In the latter case, all subscribers of the _Tag_ are notified.
032 *
033 * @param title title of the notification
034 * @param message text part of the notification
035 * @param actionAccountId topic-id of user account performing the action which leads to the notification of all others
036 * @param item item users can have subscribed (either "User Account" or any TopicType with "Tags" as child)
037 */
038 public void createNotifications(String title, String message, long actionAccountId, DeepaMehtaObject item);
039
040 /** Gets all subscribed topics for the logged-in user. */
041 public ResultList<RelatedTopic> getSubscriptions();
042
043 /** Gets all notifications for the logged-in user. */
044 public ResultList<RelatedTopic> getAllNotifications();
045
046 /** Gets all unread notifications for the logged-in user. */
047 public ArrayList<RelatedTopic> getAllUnseenNotifications();
048
049 }