/*
* Copyright (C) 2005-2011 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see .
*/
package org.alfresco.service.cmr.subscriptions;
import org.alfresco.query.PagingRequest;
import org.alfresco.repo.management.subsystems.ActivateableBean;
import org.alfresco.service.Auditable;
import org.alfresco.service.NotAuditable;
import org.alfresco.service.cmr.repository.NodeRef;
/**
* Subscription Service.
*
* @author Florian Mueller
* @since 4.0
*/
public interface SubscriptionService extends ActivateableBean
{
// --- subscription ---
/**
* Returns the nodes a user has subscribed to.
*
* @param userId
* the id of the user
* @param type
* the type of the nodes
* @param pagingRequest
* paging details
*
* @throws PrivateSubscriptionListException
* if the subscription list is private and the calling user is
* not allowed to see it
*/
@NotAuditable
PagingSubscriptionResults getSubscriptions(String userId, SubscriptionItemTypeEnum type, PagingRequest pagingRequest);
/**
* Returns how many nodes the given user has subscribed to.
*
* @param userId
* the id of the user
* @param type
* the type of the nodes
*/
@NotAuditable
int getSubscriptionCount(String userId, SubscriptionItemTypeEnum type);
/**
* Subscribes to a node.
*
* @param userId
* id of the user
* @param node
* the node
*/
@Auditable(parameters = { "userId", "node" })
void subscribe(String userId, NodeRef node);
/**
* Unsubscribes from a node.
*
* @param userId
* id of the user
* @param node
* the node
*/
@Auditable(parameters = { "userId", "node" })
void unsubscribe(String userId, NodeRef node);
/**
* Returns if the user has subscribed to the given node.
*
* @param userId
* id of the user
* @param node
* the node
*/
@NotAuditable
boolean hasSubscribed(String userId, NodeRef node);
// --- follow ---
/**
* Returns a list of users that the given user follows.
*
* @param userId
* id of the user
* @param pagingRequest
* paging details
* @throws PrivateSubscriptionListException
* if the subscription list is private and the calling user is
* not allowed to see it
*/
@NotAuditable
PagingFollowingResults getFollowing(String userId, PagingRequest pagingRequest);
/**
* Returns a list of users that follow the given user.
*
* @param userId
* id of the user
* @param pagingRequest
* paging details
*/
@NotAuditable
PagingFollowingResults getFollowers(String userId, PagingRequest pagingRequest);
/**
* Returns how many users the given user follows.
*
* @param userId
* the id of the user
* @param type
* the type of the nodes
*/
@NotAuditable
int getFollowingCount(String userId);
/**
* Returns how many users follow the given user.
*
* @param userId
* the id of the user
* @param type
* the type of the nodes
*/
@NotAuditable
int getFollowersCount(String userId);
/**
* Follows a user.
*
* @param userId
* the id of the user
* @param userToFollow
* the id of the user to follow
*/
@Auditable(parameters = { "userId", "userToFollow" })
void follow(String userId, String userToFollow);
/**
* Unfollows a user.
*
* @param userId
* the id of the user
* @param userToUnfollow
* the id of the user to unfollow
*/
@Auditable(parameters = { "userId", "userToUnfollow" })
void unfollow(String userId, String userToUnfollow);
/**
* Returns if the user follows to the given other user.
*
* @param userId
* id of the user
* @param userToFollow
* the id of the other user
*/
@NotAuditable
boolean follows(String userId, String userToFollow);
// --- privacy settings ---
/**
* Sets or unsets the subscription list of the given user to private.
*
* @param userId
* the id of the user
* @param isPrivate
* true
- set list private,
* false - set list public
*
*/
@Auditable(parameters = { "userId", "isPrivate" })
void setSubscriptionListPrivate(String userId, boolean isPrivate);
/**
* Returns if the subscription list of the given user is set to private.
*
* @param userId
* the id of the user
*/
@NotAuditable
boolean isSubscriptionListPrivate(String userId);
/**
* Returns if subscription are enabled for this system.
*/
@NotAuditable
boolean isActive();
}