/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/message/trunk/message-api/api/src/java/org/sakaiproject/message/api/MessageService.java $
* $Id: MessageService.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.message.api;
import java.util.List;
import java.util.Map;
import org.sakaiproject.entity.api.EntityProducer;
import org.sakaiproject.entity.api.EntitySummary;
import org.sakaiproject.entity.api.Reference;
import org.sakaiproject.exception.IdInvalidException;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.exception.IdUsedException;
import org.sakaiproject.exception.InUseException;
import org.sakaiproject.exception.PermissionException;
import org.sakaiproject.time.api.Time;
/**
* <p>
* GenericMessageService is the base interface for the different specific Sakai communications service such as Chat, Announcements, etc.
* </p>
* <p>
* The service manages a set of message channels, each containing a set of messages.
* </p>
* <p>
* Channels and Messages can be worked with through the MessageChannel and Message APIs and their extensions.
* </p>
*/
public interface MessageService extends EntityProducer, EntitySummary
{
/** Security function / event for reading channel / message. */
public static final String SECURE_READ = "read";
/** Security function / event for adding channel / message. */
public static final String SECURE_ADD = "new";
/** Event for adding channel / message. */
public static final String SECURE_CREATE = "create";
/** Security function / event for removing one's own message. */
public static final String SECURE_REMOVE_OWN = "delete.own";
/** Security function / event for removing anyone's message or channel. */
public static final String SECURE_REMOVE_ANY = "delete.any";
/** Security function / event for updating one's own message or the channel. */
public static final String SECURE_UPDATE_OWN = "revise.own";
/** Security function / event for updating any message. */
public static final String SECURE_UPDATE_ANY = "revise.any";
/** Security function / event for accessing someone elses draft. */
public static final String SECURE_READ_DRAFT = "read.drafts";
/** Security function giving the user permission to all groups, if granted to at the channel or site level. */
public static final String SECURE_ALL_GROUPS = "all.groups";
/** The Reference type for a channel. */
public static final String REF_TYPE_CHANNEL = "channel";
/** The Reference type for a messgae. */
public static final String REF_TYPE_MESSAGE = "msg";
/**
* Return a list of all the defined channels.
*
* @return a list of MessageChannel (or extension) objects (may be empty).
*/
public List<MessageChannel> getChannels();
/**
* check permissions for getChannel().
*
* @param ref
* The channel reference.
* @return true if the user is allowed to getChannel(channelId), false if not.
*/
public boolean allowGetChannel(String ref);
/**
* Return a specific channel.
*
* @param ref
* The channel reference.
* @return the MessageChannel that has the specified name.
* @exception IdUnusedException
* If this name is not defined for any channel.
* @exception PermissionException
* If the user does not have any permissions to the channel.
*/
public MessageChannel getChannel(String ref) throws IdUnusedException, PermissionException;
/**
* Find the channel, in cache or info store - cache it if newly found.
*
* Warning: No check is made on channel permissions -- caller should filter for public messages
*
* @param ref
* The channel reference.
* @return The channel, if found.
*/
public MessageChannel getChannelPublic(String ref);
/**
* check permissions for addChannel().
*
* @param ref
* The channel reference.
* @return true if the user is allowed to addChannel(channelId), false if not.
*/
public boolean allowAddChannel(String ref);
/**
* Add a new channel. Must commitEdit() to make official, or cancelEdit() when done!
*
* @param ref
* The channel reference.
* @return The newly created channel, locked for update.
* @exception IdUsedException
* if the id is not unique.
* @exception IdInvalidException
* if the id is not made up of valid characters.
* @exception PermissionException
* if the user does not have permission to add a channel.
*/
public MessageChannelEdit addChannel(String ref) throws IdUsedException, IdInvalidException, PermissionException;
/**
* check permissions for editChannel()
*
* @param ref
* The channel reference.
* @return true if the user is allowed to update the channel, false if not.
*/
public boolean allowEditChannel(String ref);
/**
* Return a specific channel, as specified by channel id, locked for update. Must commitEdit() to make official, or cancelEdit() when done!
*
* @param ref
* The channel reference.
* @return the Channel that has the specified id.
* @exception IdUnusedException
* If this name is not a defined channel.
* @exception PermissionException
* If the user does not have any permissions to edit the channel.
* @exception InUseException
* if the channel is locked for edit by someone else.
*/
public MessageChannelEdit editChannel(String ref) throws IdUnusedException, PermissionException, InUseException;
/**
* Commit the changes made to a MessageChannelEdit object, and release the lock. The MessageChannelEdit is disabled, and not to be used after this call.
*
* @param user
* The MessageChannelEdit object to commit.
*/
public void commitChannel(MessageChannelEdit edit);
/**
* Cancel the changes made to a MessageChannelEdit object, and release the lock. The MessageChannelEdit is disabled, and not to be used after this call.
*
* @param user
* The MessageChannelEdit object to cancel.
*/
public void cancelChannel(MessageChannelEdit edit);
/**
* Check permissions for removeChannel().
*
* @param ref
* The channel reference.
* @return true if the user is allowed to removeChannel(), false if not.
*/
public boolean allowRemoveChannel(String ref);
/**
* Remove a channel - it must be locked from editChannel().
*
* @param channel
* The channel to remove.
* @exception PermissionException
* if the user does not have permission to remove a channel.
*/
public void removeChannel(MessageChannelEdit channel) throws PermissionException;
/**
* Access the internal reference which can be used to access the channel from within the system.
*
* @param context
* The context.
* @param id
* The channel id.
* @return The the internal reference which can be used to access the channel from within the system.
*/
public String channelReference(String context, String id);
/**
* Access the internal reference which can be used to access the message from within the system.
*
* @param context
* The context.
* @param channelId
* The channel id.
* @param id
* The message id.
* @return The the internal reference which can be used to access the message from within the system.
*/
public String messageReference(String context, String channelId, String id);
/**
* Access the internal reference which can be used to access the message from within the system.
*
* @param channelRef
* The channel reference.
* @param id
* The message id.
* @return The the internal reference which can be used to access the message from within the system.
*/
public String messageReference(String channelRef, String id);
/**
* Get a message, given a reference. This call avoids the need to have channel security, as long as the user has permissions to the message.
*
* @param ref
* The message reference
* @return The message.
* @exception IdUnusedException
* If this reference does not identify a message.
* @exception PermissionException
* If the user does not have any permissions to the message.
*/
public Message getMessage(Reference ref) throws IdUnusedException, PermissionException;
/**
* Cancel the changes made to a MessageEdit object, and release the lock. The MessageEdit is disabled, and not to be used after this call.
*
* @param user
* The MessageEdit object to cancel.
*/
public void cancelMessage(MessageEdit edit);
/**
* Access a list of messages in the channel, that are after the date, limited to just the n latest messages, ordered as specified, including drafts if specified. Channel read permission is required, unless pubViewOnly is selected - draft read on the
* channel is required to see drafts.
*
* @param afterDate
* if null, no date limit, else limited to only messages after this date.
* @param limitedToLatest
* if 0, no count limit, else limited to only the latest this number of messages.
* @param ascending
* if true, sort oldest first, else sort latest first.
* @param includeDrafts
* if true, include drafts (if the user has draft permission), else leave them out.
* @param pubViewOnly
* if true, include only messages marked pubview, else include any.
* @return A list of Message objects that meet the criteria; may be empty
* @exception PermissionException
* If the current user does not have channel read permission.
*/
public List<Message> getMessages(String channelRef, Time afterDate, int limitedToLatest, boolean ascending, boolean includeDrafts,
boolean pubViewOnly) throws PermissionException;
/**
* Access a list of channel ids that are defined related to the context.
*
* @param context
* The context in which to search
* @return A List (String) of channel id for channels withing the context.
*/
public List<String> getChannelIds(String context);
/**
* Get a summary of an Announcement Channel
*
* @param ref
* The channel reference.
* @param items
* Maximum number of items to return
* @param days
* Maximum number of days to peer back
* @return The Map containing the Summary
* @exception IdUsedException
* if the id is not unique.
* @exception IdInvalidException
* if the id is not made up of valid characters.
* @exception PermissionException
* if the user does not have permission to add a channel.
*/
public Map getSummary(String ref, int items, int days) throws IdUsedException, IdInvalidException, PermissionException;
} // MessageService