package org.limewire.ui.swing.friends.chat; import java.util.Map; import javax.swing.JComponent; import org.limewire.ui.swing.components.Disposable; import org.limewire.friend.api.feature.Feature; import org.limewire.friend.api.feature.FeatureEvent; import org.limewire.friend.api.ChatState; import org.limewire.friend.api.FriendEvent; /** * Interface for chat window ui object. Intended to be a way * to get information about and control what happens to the * chat window, other than by way of keyboard input and * received instant messages. *<p> * Make sure that methods here are called * from within the EDT. * */ interface Conversation extends Disposable { /** * Updates the display of all the messages. */ public void displayMessages(); /** * @return the {@link ChatFriend} associated with this conversation */ public ChatFriend getChatFriend(); /** * @return a read-only map of file ID to file offer message. * It is a snapshot of all the file offer messages * */ public Map<String, MessageFileOffer> getFileOfferMessages(); /** * Called to indicate a new feature addition/removal. * * @param feature the feature being updated * @param action whether the feature is added or removed. */ public void featureUpdate(Feature feature, FeatureEvent.Type action); /** * Add a new {@link Message} to this conversation. * * @param message being added */ public void newChatMessage(Message message); /** * Called to indicate a new chat state in this conversation. * * @param chatState being added. */ public void newChatState(ChatState chatState); /** * Update availability of friend associated with this conversation. * * @param update type of update. */ public void friendAvailableUpdate(FriendEvent.Type update); /** * Return as a swing JComponent. * * @return JComponent */ public JComponent asComponent(); // TODO: create a way to get/search for any message(s) }