/* * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. * * Distributable under LGPL license. * See terms of license at gnu.org. */ package net.java.sip.communicator.service.protocol; import java.util.*; import net.java.sip.communicator.service.protocol.event.*; /** * Represents a chat channel/room/rendez-vous point/ where multiple chat users * could rally and communicate in a many-to-many fashion. * * @author Emil Ivov * @author Yana Stamcheva */ public interface ChatRoom { /** * Returns the name of this <tt>ChatRoom</tt>. * * @return a <tt>String</tt> containing the name of this <tt>ChatRoom</tt>. */ public String getName(); /** * Returns the identifier of this <tt>ChatRoom</tt>. The identifier of the * chat room would have the following syntax: * [chatRoomName]@[chatRoomServer]@[accountID] * * @return a <tt>String</tt> containing the identifier of this * <tt>ChatRoom</tt>. */ public String getIdentifier(); /** * Joins this chat room with the nickname of the local user so that the * user would start receiving events and messages for it. * * @throws OperationFailedException with the corresponding code if an error * occurs while joining the room. */ public void join() throws OperationFailedException; /** * Joins this chat room so that the user would start receiving events and * messages for it. The method uses the nickname of the local user and the * specified password in order to enter the chatroom. * * @param password the password to use when authenticating on the chatroom. * @throws OperationFailedException with the corresponding code if an error * occurs while joining the room. */ public void join(byte[] password) throws OperationFailedException; /** * Joins this chat room with the specified nickname so that the user would * start receiving events and messages for it. If the chatroom already * contains a user with this nickname, the method would throw an * OperationFailedException with code IDENTIFICATION_CONFLICT. * * @param nickname the nickname to use. * @throws OperationFailedException with the corresponding code if an error * occurs while joining the room. */ public void joinAs(String nickname) throws OperationFailedException; /** * Joins this chat room with the specified nickname and password so that the * user would start receiving events and messages for it. If the chatroom * already contains a user with this nickname, the method would throw an * OperationFailedException with code IDENTIFICATION_CONFLICT. * * @param nickname the nickname to use. * @param password a password necessary to authenticate when joining the * room. * @throws OperationFailedException with the corresponding code if an error * occurs while joining the room. */ public void joinAs(String nickname, byte[] password) throws OperationFailedException; /** * Returns true if the local user is currently in the multi user chat * (after calling one of the {@link #join()} methods). * * @return true if currently we're currently in this chat room and false * otherwise. */ public boolean isJoined(); /** * Leave this chat room. Once this method is called, the user won't be * listed as a member of the chat room any more and no further chat events * will be delivered. Depending on the underlying protocol and * implementation leave() might cause the room to be destroyed if it has * been created by the local user. */ public void leave(); /** * Returns the last known room subject/theme or <tt>null</tt> if the user * hasn't joined the room or the room does not have a subject yet. * <p> * To be notified every time the room's subject change you should add a * <tt>ChatRoomChangelistener</tt> to this room. * {@link #addPropertyChangeListener(ChatRoomPropertyChangeListener)} * <p> * To change the room's subject use {@link #setSubject(String)}. * * @return the room subject or <tt>null</tt> if the user hasn't joined the * room or the room does not have a subject yet. */ public String getSubject(); /** * Sets the subject of this chat room. If the user does not have the right * to change the room subject, or the protocol does not support this, or * the operation fails for some other reason, the method throws an * <tt>OperationFailedException</tt> with the corresponding code. * * @param subject the new subject that we'd like this room to have * @throws OperationFailedException if the user doesn't have the right to * change this property. */ public void setSubject(String subject) throws OperationFailedException; /** * Returns the local user's nickname in the context of this chat room or * <tt>null</tt> if not currently joined. * * @return the nickname currently being used by the local user in the * context of the local chat room. */ public String getUserNickname(); /** * Changes the the local user's nickname in the context of this chatroom. * * @param nickname the new nickname within the room. * * @throws OperationFailedException if the new nickname already exist in * this room */ public void setUserNickname(String nickname) throws OperationFailedException; /** * Adds a listener that will be notified of changes in our participation in * the room such as us being kicked, join, left... * * @param listener a member participation listener. */ public void addMemberPresenceListener( ChatRoomMemberPresenceListener listener); /** * Removes a listener that was being notified of changes in the * participation of other chat room participants such as users being kicked, * join, left. * * @param listener a member participation listener. */ public void removeMemberPresenceListener( ChatRoomMemberPresenceListener listener); /** * Adds a listener that will be notified of changes in our role in the room * such as us being granded operator. * * @param listener a local user role listener. */ public void addLocalUserRoleListener(ChatRoomLocalUserRoleListener listener); /** * Removes a listener that was being notified of changes in our role in this * chat room such as us being granded operator. * * @param listener a local user role listener. */ public void removelocalUserRoleListener( ChatRoomLocalUserRoleListener listener); /** * Adds a listener that will be notified of changes of a member role in the * room such as being granded operator. * * @param listener a member role listener. */ public void addMemberRoleListener(ChatRoomMemberRoleListener listener); /** * Removes a listener that was being notified of changes of a member role in * this chat room such as us being granded operator. * * @param listener a member role listener. */ public void removeMemberRoleListener(ChatRoomMemberRoleListener listener); /** * Adds a listener that will be notified of changes in the property of the * room such as the subject being change or the room state being changed. * * @param listener a property change listener. */ public void addPropertyChangeListener( ChatRoomPropertyChangeListener listener); /** * Removes a listener that was being notified of changes in the property of * the chat room such as the subject being change or the room state being * changed. * * @param listener a property change listener. */ public void removePropertyChangeListener( ChatRoomPropertyChangeListener listener); /** * Adds a listener that will be notified of changes in the property of a * room member such as the nickname being changed. * * @param listener a room member property change listener. */ public void addMemberPropertyChangeListener( ChatRoomMemberPropertyChangeListener listener); /** * Removes a listener that was being notified of changes in the property of * a chat room member such as the nickname being changed. * * @param listener a room member property change listener. */ public void removeMemberPropertyChangeListener( ChatRoomMemberPropertyChangeListener listener); /** * Invites another user to this room. * <p> * If the room is password-protected, the invitee will receive a password to * use to join the room. If the room is members-only, the the invitee may * be added to the member list. * * @param userAddress the address of the user to invite to the room.(one * may also invite users not on their contact list). * @param reason a reason, subject, or welcome message that would tell the * the user why they are being invited. */ public void invite(String userAddress, String reason); /** * Returns a <tt>List</tt> of <tt>ChatRoomMember</tt>s corresponding to all * members currently participating in this room. * * @return a <tt>List</tt> of <tt>ChatRoomMember</tt> instances * corresponding to all room members. * @throws OperationFailedException if we fail retrieving the list of room * participants. */ public List getMembers(); /** * Returns the number of participants that are currently in this chat room. * @return int the number of <tt>Contact</tt>s, currently participating in * this room. */ public int getMembersCount(); /** * Registers <tt>listener</tt> so that it would receive events every time a * new message is received on this chat room. * @param listener a <tt>MessageListener</tt> that would be notified every * time a new message is received on this chat room. */ public void addMessageListener(ChatRoomMessageListener listener); /** * Removes <tt>listener</tt> so that it won't receive any further message * events from this room. * @param listener the <tt>MessageListener</tt> to remove from this room */ public void removeMessageListener(ChatRoomMessageListener listener); /** * Create a Message instance for sending arbitrary MIME-encoding content. * * @param content content value * @param contentType the MIME-type for <tt>content</tt> * @param contentEncoding encoding used for <tt>content</tt> * @param subject a <tt>String</tt> subject or <tt>null</tt> for now subject. * @return the newly created message. */ public Message createMessage(byte[] content, String contentType, String contentEncoding, String subject); /** * Create a Message instance for sending a simple text messages with default * (text/plain) content type and encoding. * * @param messageText the string content of the message. * @return Message the newly created message */ public Message createMessage(String messageText); /** * Sends the <tt>message</tt> to this chat room. * * @param message the <tt>Message</tt> to send. * @throws OperationFailedException if sending the message fails for some * reason. */ public void sendMessage(Message message) throws OperationFailedException; /** * Returns a reference to the provider that created this room. * * @return a reference to the <tt>ProtocolProviderService</tt> instance * that created this room. */ public ProtocolProviderService getParentProvider(); /** * Returns an Iterator over a set of ban masks for this chat room. The ban * mask defines a group of users that will be banned. The ban list is a list * of all such ban masks defined for this chat room. * * @return an Iterator over a set of ban masks for this chat room * @throws OperationFailedException if an error occured while performing the * request to the server or you don't have enough privileges to get this * information */ public Iterator getBanList() throws OperationFailedException; /** * Bans a user from the room. An administrator or owner of the room can ban * users from a room. A banned user will no longer be able to join the room * unless the ban has been removed. If the banned user was present in the * room then he/she will be removed from the room and notified that he/she * was banned along with the reason (if provided) and the user who initiated * the ban. * * @param chatRoomMember the <tt>ChatRoomMember</tt> to be banned. * @param reason the reason why the user was banned. * @throws OperationFailedException if an error occurs while banning a user. * In particular, an error can occur if a moderator or a user with an * affiliation of "owner" or "admin" was tried to be banned or if the user * that is banning have not enough permissions to ban. */ public void banParticipant(ChatRoomMember chatRoomMember, String reason) throws OperationFailedException; /** * Kicks a visitor or participant from the room. * * @param chatRoomMember the <tt>ChatRoomMember</tt> to kick from the room * @param reason the reason why the participant is being kicked from the * room * @throws OperationFailedException if an error occurs while kicking the * participant. In particular, an error can occur if a moderator or a user * with an affiliation of "owner" or "administrator" was intended to be * kicked; or if the participant that intended to kick another participant * does not have kicking privileges; */ public void kickParticipant(ChatRoomMember chatRoomMember, String reason) throws OperationFailedException; /** * Returns the <tt>ChatRoomConfigurationForm</tt> containing all * configuration properties for this chat room. If the user doesn't have * permissions to see and change chat room configuration an * <tt>OperationFailedException</tt> is thrown. * * @return the <tt>ChatRoomConfigurationForm</tt> containing all * configuration properties for this chat room * @throws OperationFailedException if the user doesn't have * permissions to see and change chat room configuration */ public ChatRoomConfigurationForm getConfigurationForm() throws OperationFailedException; /** * Returns <code>true</code> if this chat room is a system room and * <code>false</code> otherwise. * * @return <code>true</code> if this chat room is a system room and * <code>false</code> otherwise. */ public boolean isSystem(); /** * Determines whether this chat room should be stored in the configuration * file or not. If the chat room is persistent it still will be shown after a * restart in the chat room list. A non-persistent chat room will be only in * the chat room list until the the program is running. * * @return true if this chat room is persistent, false otherwise */ public boolean isPersistent(); }