From 06e7d6239ecb4eed06b6c191ed505e31fd8a8ff1 Mon Sep 17 00:00:00 2001 From: Emil Ivov Date: Mon, 23 Apr 2007 18:55:22 +0000 Subject: [PATCH] updated according to last changes in multi chatting --- .../chat/conference/ConferenceChatPanel.java | 125 +++++++++--------- .../gui/main/chatroomslist/ChatRoomsList.java | 65 +++++---- .../main/chatroomslist/JoinChannelDialog.java | 94 +++++++------ 3 files changed, 156 insertions(+), 128 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ConferenceChatPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ConferenceChatPanel.java index 37e3ba0a3..326bdcbca 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ConferenceChatPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ConferenceChatPanel.java @@ -20,7 +20,7 @@ /** * The ConferenceChatPanel is the chat panel corresponding to a * multi user chat. - * + * * @author Yana Stamcheva */ public class ConferenceChatPanel @@ -31,14 +31,14 @@ public class ConferenceChatPanel ChatRoomParticipantStatusListener { private Logger logger = Logger.getLogger(ConferenceChatPanel.class); - + private ChatRoom chatRoom; - + private ChatWindowManager chatWindowManager; - + /** * Creates an instance of ConferenceChatPanel. - * + * * @param chatWindow the ChatWindow that contains this chat panel * @param chatRoom the ChatRoom object, which provides us the multi * user chat functionality @@ -46,27 +46,28 @@ public class ConferenceChatPanel public ConferenceChatPanel(ChatWindow chatWindow, ChatRoom chatRoom) { super(chatWindow); - + this.chatWindowManager = chatWindow.getMainFrame().getChatWindowManager(); - + this.chatRoom = chatRoom; - + List membersList = chatRoom.getMembers(); - + for (int i = 0; i < membersList.size(); i ++) { getChatContactListPanel().addContact((Contact)membersList.get(i)); } - + this.chatRoom.addMessageListener(this); this.chatRoom.addChatRoomPropertyChangeListener(this); this.chatRoom.addLocalUserStatusListener(this); - this.chatRoom.addParticipantStatusListener(this); +/** @todo uncomment when the listener is fully implemented */ +// this.chatRoom.addParticipantStatusListener(this); } - + /** * Implements the ChatPanel.getChatName method. - * + * * @return the name of the chat room. */ public String getChatName() @@ -76,7 +77,7 @@ public String getChatName() /** * Implements the ChatPanel.getChatIdentifier method. - * + * * @return the ChatRoom */ public Object getChatIdentifier() @@ -86,7 +87,7 @@ public Object getChatIdentifier() /** * Implements the ChatPanel.getChatStatus method. - * + * * @return the status of this chat room */ public PresenceStatus getChatStatus() @@ -96,28 +97,28 @@ public PresenceStatus getChatStatus() /** * Implements the ChatPanel.loadHistory method. - *
+ *
* Loads the history for this chat room. */ public void loadHistory() { - + } /** * Implements the ChatPanel.loadHistory(escapedMessageID) method. - *
+ *
* Loads the history for this chat room and escapes the last message * received. */ public void loadHistory(String escapedMessageID) { - // TODO Auto-generated method stub + // TODO Auto-generated method stub } /** * Implements the ChatPanel.loadPreviousFromHistory method. - *
+ *
* Loads the previous "page" in the history. */ public void loadPreviousFromHistory() @@ -127,7 +128,7 @@ public void loadPreviousFromHistory() /** * Implements the ChatPanel.loadNextFromHistory method. - *
+ *
* Loads the next "page" in the history. */ public void loadNextFromHistory() @@ -137,25 +138,25 @@ public void loadNextFromHistory() /** * Implements the ChatPanel.sendMessage method. - *
+ *
* Sends a message to the chat room. */ protected void sendMessage() - { + { } /** * Implements the ChatPanel.treatReceivedMessage method. - *
+ *
* Treats a received message from the given contact. */ public void treatReceivedMessage(Contact sourceContact) - { + { } /** * Implements the ChatPanel.sendTypingNotification method. - *
+ *
* Sends a typing notification. */ public int sendTypingNotification(int typingState) @@ -181,75 +182,75 @@ public Date getLastHistoryMsgTimestamp() /** * Implements the ChatRoomMessageListener.messageReceived method. - *
+ *
* Obtains the corresponding ChatPanel and proccess the message * there. */ public void messageReceived(ChatRoomMessageReceivedEvent evt) { ChatRoom sourceChatRoom = (ChatRoom) evt.getSource(); - + if(!sourceChatRoom.equals(chatRoom)) return; - + logger.trace("MESSAGE RECEIVED from contact: " + evt.getSourceContact().getAddress()); - + Contact sourceContact = evt.getSourceContact(); Date date = evt.getTimestamp(); Message message = evt.getSourceMessage(); - + ChatRoom chatRoom = (ChatRoom) evt.getSource(); ChatPanel chatPanel = chatWindowManager.getChatRoom(chatRoom); - + chatPanel.processMessage( sourceContact.getDisplayName(), date, - Constants.INCOMING_MESSAGE, message.getContent()); - + Constants.INCOMING_MESSAGE, message.getContent()); + chatWindowManager.openChat(chatPanel, false); - + GuiActivator.getAudioNotifier() .createAudio(Sounds.INCOMING_MESSAGE).play(); - + chatPanel.treatReceivedMessage(sourceContact); } /** * Implements the ChatRoomMessageListener.messageDelivered method. - *
+ *
* Shows the message in the conversation area and clears the write message * area. */ public void messageDelivered(ChatRoomMessageDeliveredEvent evt) { ChatRoom sourceChatRoom = (ChatRoom) evt.getSource(); - + if(!sourceChatRoom.equals(chatRoom)) return; - + logger.trace("MESSAGE DELIVERED to contact: " + evt.getDestinationContact().getAddress()); - + Message msg = evt.getSourceMessage(); - + ChatPanel chatPanel = null; - + if(chatWindowManager.isChatOpenedForChatRoom(sourceChatRoom)) chatPanel = chatWindowManager.getChatRoom(sourceChatRoom); - + if (chatPanel != null) { ProtocolProviderService protocolProvider = evt .getDestinationContact().getProtocolProvider(); - + logger.trace("MESSAGE DELIVERED: process message to chat for contact: " + evt.getDestinationContact().getAddress()); - + chatPanel.processMessage(getChatWindow().getMainFrame() .getAccount(protocolProvider), evt.getTimestamp(), Constants.OUTGOING_MESSAGE, msg.getContent()); - + chatPanel.refreshWriteArea(); } } @@ -257,23 +258,23 @@ public void messageDelivered(ChatRoomMessageDeliveredEvent evt) /** * Implements the ChatRoomMessageListener.messageDeliveryFailed * method. - *
+ *
* In the conversation area show an error message, explaining the problem. */ public void messageDeliveryFailed(ChatRoomMessageDeliveryFailedEvent evt) { ChatRoom sourceChatRoom = (ChatRoom) evt.getSource(); - + if(!sourceChatRoom.equals(chatRoom)) return; - + String errorMsg = null; - + Message sourceMessage = (Message) evt.getSource(); - + Contact sourceContact = evt.getDestinationContact(); - - if (evt.getErrorCode() + + if (evt.getErrorCode() == MessageDeliveryFailedEvent.OFFLINE_MESSAGES_NOT_SUPPORTED) { errorMsg = Messages.getI18NString( @@ -281,7 +282,7 @@ public void messageDeliveryFailed(ChatRoomMessageDeliveryFailedEvent evt) } else if (evt.getErrorCode() == MessageDeliveryFailedEvent.NETWORK_FAILURE) { - + errorMsg = Messages.getI18NString("msgNotDelivered").getText(); } else if (evt.getErrorCode() @@ -292,7 +293,7 @@ else if (evt.getErrorCode() } else if (evt.getErrorCode() == MessageDeliveryFailedEvent.INTERNAL_ERROR) { - + errorMsg = Messages.getI18NString( "msgDeliveryInternalError").getText(); } @@ -300,24 +301,24 @@ else if (evt.getErrorCode() errorMsg = Messages.getI18NString( "msgDeliveryFailedUnknownError").getText(); } - + ChatPanel chatPanel = chatWindowManager .getChatRoom(chatRoom); - + chatPanel.refreshWriteArea(); - + chatPanel.processMessage( sourceContact.getDisplayName(), new Date(System.currentTimeMillis()), Constants.OUTGOING_MESSAGE, sourceMessage.getContent()); - + chatPanel.processMessage( sourceContact.getDisplayName(), new Date(System.currentTimeMillis()), Constants.ERROR_MESSAGE, errorMsg); - + chatWindowManager.openChat(chatPanel, false); } @@ -327,11 +328,11 @@ public void chatRoomChanged(ChatRoomPropertyChangeEvent evt) public void localUserStatusChanged(ChatRoomLocalUserStatusChangeEvent evt) { - + } public void localUserStatusChanged(ChatRoomParticipantStatusChangeEvent evt) { - + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsList.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsList.java index 2e9c5d892..df494ae6b 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsList.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsList.java @@ -21,7 +21,7 @@ /** * The ChatRoomsList is the list containing all chat rooms. - * + * * @author Yana Stamcheva */ public class ChatRoomsList @@ -30,32 +30,32 @@ public class ChatRoomsList MouseListener { private Logger logger = Logger.getLogger(ChatRoomsList.class); - + private MainFrame mainFrame; - + private DefaultListModel listModel = new DefaultListModel(); - + /** * Creates an instance of the ChatRoomsList. - * + * * @param mainFrame The main application window. */ public ChatRoomsList(MainFrame mainFrame) { this.mainFrame = mainFrame; - + this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - + this.setModel(listModel); this.setCellRenderer(new ChatRoomsListCellRenderer()); this.addListSelectionListener(this); - + this.addMouseListener(this); } - + /** * Adds a chat server and all its existing chat rooms. - * + * * @param pps the ProtocolProviderService corresponding to the chat * server * @param multiUserChatOperationSet the OperationSetMultiUserChat @@ -65,24 +65,30 @@ public void addChatServer(ProtocolProviderService pps, OperationSetMultiUserChat multiUserChatOperationSet) { listModel.addElement(pps); - + try - { + { List existingChatRooms = multiUserChatOperationSet.getExistingChatRooms(); - + if(existingChatRooms == null) return; - + Iterator i = existingChatRooms.iterator(); - + while(i.hasNext()) { ChatRoom chatRoom = (ChatRoom) i.next(); - + listModel.addElement(chatRoom); } - + + } + catch (OperationNotSupportedException ex) + { + logger.error( + "Failed to obtain existing chat rooms for the following server: " + + pps.getAccountID().getService(), ex); } catch (OperationFailedException ex) { @@ -90,21 +96,22 @@ public void addChatServer(ProtocolProviderService pps, "Failed to obtain existing chat rooms for the following server: " + pps.getAccountID().getService(), ex); } + } - + /** * Adds a chat room to this list. - * + * * @param chatRoom the ChatRoom to add */ public void addChatRoom(ChatRoom chatRoom) { - listModel.addElement(chatRoom); + listModel.addElement(chatRoom); } - + /** - * + * * @param pps * @return */ @@ -119,16 +126,16 @@ public boolean isChatServerClosed(ProtocolProviderService pps) public void valueChanged(ListSelectionEvent e) { Object o = this.getSelectedValue(); - + if(o instanceof ChatRoom) - { + { ChatRoom chatRoom = (ChatRoom) o; ChatWindowManager chatWindowManager = mainFrame.getChatWindowManager(); - + ChatPanel chatPanel = chatWindowManager.getChatRoom(chatRoom); - + chatWindowManager.openChat(chatPanel, true); - } + } } public void mouseClicked(MouseEvent e) @@ -156,7 +163,7 @@ public void mousePressed(MouseEvent e) { ProtocolProviderService pps = (ProtocolProviderService) selectedValue; - + if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) { ChatRoomServerRightButtonMenu rightButtonMenu @@ -168,7 +175,7 @@ public void mousePressed(MouseEvent e) + mainFrame.getX() + 5, e.getY() + mainFrame.getY() + 105); - rightButtonMenu.setVisible(true); + rightButtonMenu.setVisible(true); } } } diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/JoinChannelDialog.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/JoinChannelDialog.java index 33a23264a..154bbd96a 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/JoinChannelDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/JoinChannelDialog.java @@ -1,3 +1,9 @@ +/* + * 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.impl.gui.main.chatroomslist; import java.awt.*; @@ -9,104 +15,118 @@ import net.java.sip.communicator.impl.gui.i18n.*; import net.java.sip.communicator.impl.gui.main.*; import net.java.sip.communicator.service.protocol.*; +import net.java.sip.communicator.util.*; public class JoinChannelDialog extends SIPCommDialog implements ActionListener { + private static final Logger logger + = Logger.getLogger(JoinChannelDialog.class); + private JPanel mainPanel = new JPanel(new BorderLayout(5, 5)); - + private JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - + private JPanel centerPanel = new JPanel(new BorderLayout(5, 5)); - + private JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - + private JButton channelListButton = new JButton(Messages.getI18NString("showChannelsList").getText()); - + private JLabel channelLabel = new JLabel(Messages.getI18NString("joinChatRoom").getText() + ":"); - + private JTextField channelTextField = new JTextField(); - + private JButton okButton = new JButton(Messages.getI18NString("ok").getText()); - + private JButton cancelButton = new JButton(Messages.getI18NString("cancel").getText()); - + private MainFrame mainFrame; - + private ProtocolProviderService protocolProvider; - + public JoinChannelDialog (MainFrame mainFrame, ProtocolProviderService protocolProvider) { super(mainFrame); - + this.setSize(400, 300); - + this.mainFrame = mainFrame; - + this.protocolProvider = protocolProvider; - + this.getContentPane().add(mainPanel, BorderLayout.CENTER); - + this.getContentPane().add(buttonsPanel, BorderLayout.SOUTH); - + buttonsPanel.add(okButton); - + buttonsPanel.add(cancelButton); - + mainPanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); - + mainPanel.add(centerPanel, BorderLayout.NORTH); - + mainPanel.add(southPanel, BorderLayout.CENTER); - + centerPanel.add(channelLabel, BorderLayout.WEST); - + centerPanel.add(channelTextField, BorderLayout.CENTER); - + southPanel.add(channelListButton); - + channelTextField.setText("#"); - + okButton.setName("ok"); cancelButton.setName("cancel"); channelListButton.setName("channelList"); - + okButton.addActionListener(this); cancelButton.addActionListener(this); channelListButton.addActionListener(this); } - + protected void close(boolean isEscaped) - { + { } public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); String buttonName = button.getName(); - + if(buttonName.equals("ok")) { OperationSetMultiUserChat multiChatOpSet = (OperationSetMultiUserChat) protocolProvider.getOperationSet( OperationSetMultiUserChat.class); - + String chatRoomName = channelTextField.getText(); - - ChatRoom chatRoom = multiChatOpSet.findRoom(chatRoomName); - + + ChatRoom chatRoom = null; + try + { + chatRoom = multiChatOpSet.findRoom(chatRoomName); + } + catch (Exception ex) + { + /** @todo handle exceptions being thrown here. */ + logger.error("Failed to find room " + chatRoomName + , ex); + } + if(chatRoom != null) { try { chatRoom.join(); - + mainFrame.getChatRoomsListPanel().getChatRoomsList() .addChatRoom(chatRoom); } @@ -132,11 +152,11 @@ public void actionPerformed(ActionEvent e) } else if(buttonName.equals("cancel")) { - this.dispose(); + this.dispose(); } else if(buttonName.equals("channelList")) { - + } } }