chatroom.java
来自「开源项目openfire的完整源程序」· Java 代码 · 共 1,006 行 · 第 1/3 页
JAVA
1,006 行
public void addToTranscript(Message message, boolean updateDate) {
// Create message to persist.
final Message newMessage = new Message();
newMessage.setTo(message.getTo());
newMessage.setFrom(message.getFrom());
newMessage.setBody(message.getBody());
newMessage.setProperty("date", new Date());
transcript.add(newMessage);
// Add current date if this is the current agent
if (updateDate && transcriptWindow.getLastUpdated() != null) {
// Set new label date
notificationLabel.setIcon(SparkRes.getImageIcon(SparkRes.SMALL_ABOUT_IMAGE));
notificationLabel.setText(Res.getString("message.last.message.received", SparkManager.DATE_SECOND_FORMATTER.format(transcriptWindow.getLastUpdated())));
}
scrollToBottom();
}
/**
* Adds a new message to the transcript history.
*
* @param to who the message is to.
* @param from who the message was from.
* @param body the body of the message.
* @param date when the message was received.
*/
public void addToTranscript(String to, String from, String body, Date date) {
final Message newMessage = new Message();
newMessage.setTo(to);
newMessage.setFrom(from);
newMessage.setBody(body);
newMessage.setProperty("date", date);
transcript.add(newMessage);
}
/**
* Scrolls the chat window to the bottom.
*/
public void scrollToBottom() {
if (mousePressed) {
return;
}
int lengthOfChat = transcriptWindow.getDocument().getLength();
transcriptWindow.setCaretPosition(lengthOfChat);
try {
JScrollBar scrollBar = textScroller.getVerticalScrollBar();
scrollBar.setValue(scrollBar.getMaximum());
}
catch (Exception e) {
Log.error(e);
}
}
/**
* Checks to see if the Send button should be enabled.
*
* @param e - the documentevent to react to.
*/
protected void checkForText(DocumentEvent e) {
final int length = e.getDocument().getLength();
if (length > 0) {
chatAreaButton.getButton().setEnabled(true);
}
else {
chatAreaButton.getButton().setEnabled(false);
}
verticalSplit.setDividerLocation(-1);
}
/**
* Requests valid focus to the SendField.
*/
public void positionCursor() {
getChatInputEditor().setCaretPosition(getChatInputEditor().getCaretPosition());
chatAreaButton.getChatInputArea().requestFocusInWindow();
}
/**
* Disable the chat room. This is called when a chat has been either transfered over or
* the customer has left the chat room.
*/
public abstract void leaveChatRoom();
/**
* Process incoming packets.
*
* @param packet - the packet to process
*/
public void processPacket(Packet packet) {
}
/**
* Returns the SendField component.
*
* @return the SendField ChatSendField.
*/
public ChatInputEditor getChatInputEditor() {
return chatAreaButton.getChatInputArea();
}
/**
* Returns the chatWindow components.
*
* @return the ChatWindow component.
*/
public TranscriptWindow getTranscriptWindow() {
return transcriptWindow;
}
/**
* Checks to see if enter was pressed and validates room.
*
* @param e the KeyEvent
*/
private void checkForEnter(KeyEvent e) {
final KeyStroke keyStroke = KeyStroke.getKeyStroke(e.getKeyCode(), e.getModifiers());
if (!keyStroke.equals(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.SHIFT_DOWN_MASK)) &&
e.getKeyChar() == KeyEvent.VK_ENTER) {
e.consume();
sendMessage();
getChatInputEditor().setText("");
getChatInputEditor().setCaretPosition(0);
}
else if (keyStroke.equals(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.SHIFT_DOWN_MASK))) {
final Document document = getChatInputEditor().getDocument();
try {
document.insertString(getChatInputEditor().getCaretPosition(), "\n", null);
getChatInputEditor().requestFocusInWindow();
chatAreaButton.getButton().setEnabled(true);
}
catch (BadLocationException badLoc) {
Log.error("Error when checking for enter:", badLoc);
}
}
}
/**
* Add a {@link MessageListener} to the current ChatRoom.
*
* @param listener - the MessageListener to add to the current ChatRoom.
*/
public void addMessageListener(MessageListener listener) {
messageListeners.add(listener);
}
/**
* Remove the specified {@link MessageListener } from the current ChatRoom.
*
* @param listener - the MessageListener to remove from the current ChatRoom.
*/
public void removeMessageListener(MessageListener listener) {
messageListeners.remove(listener);
}
/**
* Notifies all message listeners that
*
* @param message the message received.
*/
private void fireMessageReceived(Message message) {
for (MessageListener messageListener : messageListeners) {
messageListener.messageReceived(this, message);
}
}
/**
* Notifies all <code>MessageListener</code> that a message has been sent.
*
* @param message the message sent.
*/
protected void fireMessageSent(Message message) {
for (MessageListener messageListener : messageListeners) {
messageListener.messageSent(this, message);
}
}
/**
* Returns a map of the current Chat Transcript which is a list of all
* ChatResponses and their order. You should retrieve this map to get
* any current chat transcript state.
*
* @return - the map of current chat responses.
*/
public List<Message> getTranscripts() {
return transcript;
}
/**
* Disables the ChatRoom toolbar.
*/
public void disableToolbar() {
final int count = editorBar.getComponentCount();
for (int i = 0; i < count; i++) {
final Object o = editorBar.getComponent(i);
if (o instanceof RolloverButton) {
final RolloverButton rb = (RolloverButton)o;
rb.setEnabled(false);
}
}
}
/**
* Enable the ChatRoom toolbar.
*/
public void enableToolbar() {
final int count = editorBar.getComponentCount();
for (int i = 0; i < count; i++) {
final Object o = editorBar.getComponent(i);
if (o instanceof RolloverButton) {
final RolloverButton rb = (RolloverButton)o;
rb.setEnabled(true);
}
}
}
/**
* Checks to see if the Send Button should be enabled depending on the
* current update in SendField.
*
* @param event the DocumentEvent from the sendField.
*/
public void removeUpdate(DocumentEvent event) {
checkForText(event);
}
/**
* Checks to see if the Send button should be enabled.
*
* @param docEvent the document event.
*/
public void changedUpdate(DocumentEvent docEvent) {
// Do nothing.
}
/**
* Return the splitpane used in this chat room.
*
* @return the splitpane used in this chat room.
*/
public JSplitPane getSplitPane() {
return splitPane;
}
/**
* Returns the ChatPanel that contains the ChatWindow and SendField.
*
* @return the ChatPanel.
*/
public JPanel getChatPanel() {
return chatPanel;
}
/**
* Close the ChatRoom.
*/
public void closeChatRoom() {
fireClosingListeners();
getTranscriptWindow().removeContextMenuListener(this);
getTranscriptWindow().removeMouseListener(transcriptWindowMouseListener);
getChatInputEditor().removeKeyListener(chatEditorKeyListener);
textScroller.getViewport().remove(transcriptWindow);
// Remove Connection Listener
SparkManager.getConnection().removeConnectionListener(this);
getTranscriptWindow().setTransferHandler(null);
getChatInputEditor().setTransferHandler(null);
transferHandler = null;
packetIDList.clear();
messageListeners.clear();
fileDropListeners.clear();
getChatInputEditor().close();
getChatInputEditor().getActionMap().remove("closeTheRoom");
chatAreaButton.getButton().removeActionListener(this);
bottomPanel.remove(chatAreaButton);
}
/**
* Get the <code>Icon</code> to be used in the tab holding
* this ChatRoom.
*
* @return - <code>Icon</code> to use
*/
public abstract Icon getTabIcon();
/**
* Get the roomname to use for this ChatRoom.
*
* @return - the Roomname of this ChatRoom.
*/
public abstract String getRoomname();
/**
* Get the title to use in the tab holding this ChatRoom.
*
* @return - the title to use.
*/
public abstract String getTabTitle();
/**
* Returns the title of this room to use. The title
* will be used in the title bar of the ChatRoom.
*
* @return - the title of this ChatRoom.
*/
public abstract String getRoomTitle();
/**
* Returns the <code>Message.Type</code> specific to this
* chat room.
* GroupChat is Message.Type.GROUP_CHAT
* Normal Chat is Message.TYPE.NORMAL
*
* @return the ChatRooms Message.TYPE
*/
public abstract Message.Type getChatType();
/**
* Returns whether or not this ChatRoom is active. Note: carrying
* a conversation rather than being disabled, as it would be
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?