PageRenderTime 43ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/src/net/java/sip/communicator/impl/gui/main/presence/message/NewStatusMessageDialog.java

https://bitbucket.org/LANJr4D/sc-android
Java | 232 lines | 147 code | 53 blank | 32 comment | 9 complexity | 268f3827d571842b1e71d2817714503b MD5 | raw file
Possible License(s): LGPL-2.1
  1. /*
  2. * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
  3. *
  4. * Distributable under LGPL license.
  5. * See terms of license at gnu.org.
  6. */
  7. package net.java.sip.communicator.impl.gui.main.presence.message;
  8. import java.awt.*;
  9. import java.awt.event.*;
  10. import javax.swing.*;
  11. import net.java.sip.communicator.impl.gui.i18n.*;
  12. import net.java.sip.communicator.impl.gui.utils.*;
  13. import net.java.sip.communicator.service.protocol.*;
  14. import net.java.sip.communicator.util.*;
  15. /**
  16. * The <tt>NewStatusMessageDialog</tt> is the dialog containing the form for
  17. * changing the status message.
  18. *
  19. * @author Yana Stamcheva
  20. */
  21. public class NewStatusMessageDialog
  22. extends JDialog
  23. implements ActionListener
  24. {
  25. private Logger logger = Logger.getLogger(NewStatusMessageDialog.class);
  26. private JPanel messagePanel = new JPanel(new BorderLayout());
  27. private JLabel messageLabel = new JLabel(
  28. Messages.getI18NString("newStatusMessage").getText());
  29. private JTextField messageTextField = new JTextField();
  30. private JPanel dataPanel = new JPanel(new BorderLayout(5, 5));
  31. private JTextArea infoArea = new JTextArea(
  32. Messages.getI18NString("statusMessageInfo").getText());
  33. private JLabel infoTitleLabel = new JLabel(
  34. Messages.getI18NString("newStatusMessage").getText());
  35. private JLabel iconLabel = new JLabel(new ImageIcon(
  36. ImageLoader.getImage(ImageLoader.RENAME_DIALOG_ICON)));
  37. private JPanel labelsPanel = new JPanel(new GridLayout(0, 1));
  38. private JPanel rightPanel = new JPanel(new BorderLayout());
  39. private JButton okButton
  40. = new JButton(Messages.getI18NString("ok").getText());
  41. private JButton cancelButton
  42. = new JButton(Messages.getI18NString("cancel").getText());
  43. private JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
  44. private JPanel mainPanel = new JPanel(new BorderLayout());
  45. private ProtocolProviderService protocolProvider;
  46. /**
  47. * Creates an instance of <tt>NewStatusMessageDialog</tt>.
  48. *
  49. * @param protocolProvider the <tt>ProtocolProviderService</tt>.
  50. */
  51. public NewStatusMessageDialog (ProtocolProviderService protocolProvider)
  52. {
  53. this.protocolProvider = protocolProvider;
  54. this.setSize(new Dimension(520, 270));
  55. this.init();
  56. }
  57. /**
  58. * Initializes the <tt>NewStatusMessageDialog</tt> by adding the buttons,
  59. * fields, etc.
  60. */
  61. private void init()
  62. {
  63. this.setTitle(Messages.getI18NString("newStatusMessage").getText());
  64. this.getRootPane().setDefaultButton(okButton);
  65. this.setPreferredSize(new Dimension(500, 200));
  66. this.iconLabel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 10));
  67. this.infoArea.setEditable(false);
  68. this.infoArea.setLineWrap(true);
  69. this.infoArea.setWrapStyleWord(true);
  70. this.dataPanel.add(messageLabel, BorderLayout.WEST);
  71. this.dataPanel.add(messageTextField, BorderLayout.CENTER);
  72. this.infoTitleLabel.setHorizontalAlignment(JLabel.CENTER);
  73. this.infoTitleLabel.setFont(
  74. infoTitleLabel.getFont().deriveFont(Font.BOLD, 18.0f));
  75. this.labelsPanel.add(infoTitleLabel);
  76. this.labelsPanel.add(infoArea);
  77. this.labelsPanel.add(dataPanel);
  78. this.rightPanel.add(labelsPanel, BorderLayout.NORTH);
  79. this.messagePanel.add(iconLabel, BorderLayout.WEST);
  80. this.messagePanel.add(rightPanel, BorderLayout.CENTER);
  81. this.okButton.setName("ok");
  82. this.cancelButton.setName("cancel");
  83. this.okButton.setMnemonic(
  84. Messages.getI18NString("ok").getMnemonic());
  85. this.cancelButton.setMnemonic(
  86. Messages.getI18NString("cancel").getMnemonic());
  87. this.okButton.addActionListener(this);
  88. this.cancelButton.addActionListener(this);
  89. this.buttonsPanel.add(okButton);
  90. this.buttonsPanel.add(cancelButton);
  91. this.mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10));
  92. this.mainPanel.add(messagePanel, BorderLayout.NORTH);
  93. this.mainPanel.add(buttonsPanel, BorderLayout.SOUTH);
  94. this.getContentPane().add(mainPanel);
  95. }
  96. /**
  97. * Handles the <tt>ActionEvent</tt>. In order to change the status message
  98. * with the new one calls the <tt>PublishStatusMessageThread</tt>.
  99. */
  100. public void actionPerformed(ActionEvent e)
  101. {
  102. JButton button = (JButton)e.getSource();
  103. String name = button.getName();
  104. if (name.equals("ok"))
  105. {
  106. new PublishStatusMessageThread(messageTextField.getText()).start();
  107. }
  108. this.dispose();
  109. }
  110. /**
  111. * Requests the focus in the text field contained in this
  112. * dialog.
  113. */
  114. public void requestFocusInFiled()
  115. {
  116. this.messageTextField.requestFocus();
  117. }
  118. /**
  119. * This class allow to use a thread to change the presence status message.
  120. */
  121. private class PublishStatusMessageThread extends Thread
  122. {
  123. private String message;
  124. private PresenceStatus currentStatus;
  125. private OperationSetPresence presenceOpSet;
  126. public PublishStatusMessageThread(String message)
  127. {
  128. this.message = message;
  129. presenceOpSet
  130. = (OperationSetPersistentPresence) protocolProvider
  131. .getOperationSet(OperationSetPresence.class);
  132. this.currentStatus = presenceOpSet.getPresenceStatus();
  133. }
  134. public void run()
  135. {
  136. try
  137. {
  138. presenceOpSet.publishPresenceStatus(currentStatus, message);
  139. }
  140. catch (IllegalArgumentException e1)
  141. {
  142. logger.error("Error - changing status", e1);
  143. }
  144. catch (IllegalStateException e1)
  145. {
  146. logger.error("Error - changing status", e1);
  147. }
  148. catch (OperationFailedException e1)
  149. {
  150. if (e1.getErrorCode()
  151. == OperationFailedException.GENERAL_ERROR)
  152. {
  153. logger.error(
  154. "General error occured while "
  155. + "publishing presence status.",
  156. e1);
  157. }
  158. else if (e1.getErrorCode()
  159. == OperationFailedException
  160. .NETWORK_FAILURE)
  161. {
  162. logger.error(
  163. "Network failure occured while "
  164. + "publishing presence status.",
  165. e1);
  166. }
  167. else if (e1.getErrorCode()
  168. == OperationFailedException
  169. .PROVIDER_NOT_REGISTERED)
  170. {
  171. logger.error(
  172. "Protocol provider must be"
  173. + "registered in order to change status.",
  174. e1);
  175. }
  176. }
  177. }
  178. }
  179. }