PageRenderTime 50ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/ParrotIM/src/view/options/ManageAccount.java

http://parrot-im.googlecode.com/
Java | 424 lines | 319 code | 64 blank | 41 comment | 41 complexity | d3ef7def269516b64f1007e47a03eefd MD5 | raw file
  1. /* FeaturesPanel.java
  2. *
  3. * Programmed By:
  4. * Chenny Huang
  5. * Vera Lukman
  6. *
  7. * Change Log:
  8. * 2009-June-20, CH
  9. * Initial write.
  10. * 2009-June-29, VL
  11. * Reorganized code.
  12. *
  13. * Known Issues:
  14. * adding/removing might not work
  15. *
  16. * Copyright (C) 2009 Pirate Captains
  17. *
  18. * License: GNU General Public License version 2.
  19. * Full license can be found in ParrotIM/LICENSE.txt.
  20. */
  21. package view.options;
  22. import java.awt.BorderLayout;
  23. import java.awt.Dimension;
  24. import java.awt.event.ActionEvent;
  25. import java.awt.event.ActionListener;
  26. import java.awt.event.FocusAdapter;
  27. import java.awt.event.FocusEvent;
  28. import java.awt.event.ItemEvent;
  29. import java.awt.event.ItemListener;
  30. import java.awt.event.KeyEvent;
  31. import java.awt.event.KeyListener;
  32. import java.awt.event.MouseEvent;
  33. import java.util.Observable;
  34. import java.util.Observer;
  35. import java.util.Vector;
  36. import javax.swing.BorderFactory;
  37. import javax.swing.BoxLayout;
  38. import javax.swing.ImageIcon;
  39. import javax.swing.JButton;
  40. import javax.swing.JComboBox;
  41. import javax.swing.JLabel;
  42. import javax.swing.JList;
  43. import javax.swing.JOptionPane;
  44. import javax.swing.JPanel;
  45. import javax.swing.JPasswordField;
  46. import javax.swing.JScrollPane;
  47. import javax.swing.JTextField;
  48. import javax.swing.ListSelectionModel;
  49. import javax.swing.ScrollPaneConstants;
  50. import javax.swing.event.ListSelectionEvent;
  51. import javax.swing.event.ListSelectionListener;
  52. import model.Model;
  53. import model.dataType.AccountData;
  54. import model.dataType.ProfileData;
  55. import model.enumerations.ServerType;
  56. import model.enumerations.UpdatedType;
  57. import view.buddylist.BuddyList;
  58. import view.styles.GPanel;
  59. import controller.MainController;
  60. public class ManageAccount extends GPanel implements Observer {
  61. private BuddyList buddyFrame;
  62. private ProfileData profile;
  63. private JList accList;
  64. private JTextField UNField;
  65. private JPasswordField pwdField;
  66. private JComboBox server;
  67. private JButton addButton;
  68. private JPanel rightPanel, jabberServerPanel, jabberServerLabelPanel;
  69. private JPanel usernamePanel, setupPanel, passwordPanel;
  70. private JLabel jabberServerLabel, UNLabel, pwdLabel;
  71. protected JPanel serverPanel;
  72. protected JTextField jabberServer;
  73. protected JButton removeButton;
  74. private Model model;
  75. private MainController chatClient;
  76. public ManageAccount(ProfileData profile, BuddyList buddyFrame,
  77. Model model, MainController controller) {
  78. this.buddyFrame = buddyFrame;
  79. this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
  80. this.profile = profile;
  81. this.profile.addObserver(this);
  82. this.setGradientColors(model.primaryColor, model.secondaryColor);
  83. this.model = model;
  84. this.chatClient = controller;
  85. // set main panel
  86. setLayout(new BorderLayout());
  87. // manage account panel
  88. leftPanelMAN();
  89. rightPanelMAN();
  90. if (model != null) {
  91. model.addObserver(this);
  92. }
  93. }
  94. private void leftPanelMAN() {
  95. // saved account list
  96. accList = new JList(new Vector<AccountData>(profile.getAccountData())) {
  97. public String getToolTipText(MouseEvent e) {
  98. int index = locationToIndex(e.getPoint());
  99. if (-1 < index) {
  100. String item =
  101. "<html>Account Type: "
  102. + profile.getAccountData().get(index)
  103. .getServer().toString()
  104. + "<br>UserID: "
  105. + profile.getAccountData().get(index)
  106. .getUserID();
  107. return item;
  108. } else {
  109. return null;
  110. }
  111. }
  112. };
  113. accList.addListSelectionListener(new accListSelectionListener());
  114. accList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
  115. JScrollPane listScroller = new JScrollPane(accList);
  116. if (buddyFrame != null) {
  117. listScroller.setPreferredSize(new Dimension(180, 200));
  118. } else {
  119. listScroller.setPreferredSize(new Dimension(180, 185));
  120. }
  121. listScroller
  122. .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  123. // add button
  124. addButton =
  125. new JButton("Add", new ImageIcon(this.getClass().getResource(
  126. "/images/mainwindow/add.png")));
  127. addButton.setEnabled(false);
  128. addButton.addActionListener(new addActionListener());
  129. addButton.addKeyListener(new AddRemoveButtonKeyListener(true));
  130. // remove button
  131. removeButton =
  132. new JButton("Remove", new ImageIcon(this.getClass()
  133. .getResource("/images/mainwindow/remove.png")));
  134. removeButton.setEnabled(false);
  135. removeButton.addActionListener(new removeActionListener());
  136. removeButton.addKeyListener(new AddRemoveButtonKeyListener(false));
  137. // add-remove button panel
  138. JPanel addremovePanel = new JPanel();
  139. addremovePanel.setOpaque(false);
  140. addremovePanel.add(addButton);
  141. addremovePanel.add(removeButton);
  142. JPanel leftPanel = new JPanel();
  143. leftPanel.setLayout(new BorderLayout());
  144. leftPanel.setOpaque(false);
  145. leftPanel.add(listScroller, BorderLayout.NORTH);
  146. leftPanel.add(addremovePanel, BorderLayout.SOUTH);
  147. // add to account manager pop up main panel
  148. this.add(leftPanel, BorderLayout.WEST);
  149. }
  150. public JPanel getRightPanel() {
  151. return rightPanel;
  152. }
  153. private void rightPanelMAN() {
  154. ProfileKeyListener keyListener = new ProfileKeyListener();
  155. // select server
  156. server = new JComboBox(ServerType.getServerList());
  157. server.setPreferredSize(new Dimension(180, 30));
  158. server.addItemListener(new serverListener());
  159. // server name for jabber
  160. // textfield
  161. jabberServer = new JTextField();
  162. jabberServer.addKeyListener(keyListener);
  163. jabberServer.setToolTipText("specify jabber server");
  164. jabberServerPanel = new JPanel();
  165. jabberServerPanel.setLayout(new BorderLayout());
  166. jabberServerPanel.setBackground(model.tertiaryColor);
  167. jabberServerPanel.add(jabberServer, BorderLayout.NORTH);
  168. // label
  169. jabberServerLabel = new JLabel("Jabber server: ");
  170. jabberServerLabel.setForeground(model.primaryTextColor);
  171. jabberServerLabelPanel = new JPanel();
  172. jabberServerLabelPanel.setLayout(new BorderLayout());
  173. jabberServerLabelPanel.setBackground(model.tertiaryColor);
  174. jabberServerLabelPanel.add(jabberServerLabel, BorderLayout.NORTH);
  175. serverPanel = new JPanel();
  176. serverPanel.setLayout(new BorderLayout());
  177. serverPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));
  178. serverPanel.setBackground(model.tertiaryColor);
  179. serverPanel.add(jabberServerLabelPanel, BorderLayout.WEST);
  180. serverPanel.add(jabberServerPanel, BorderLayout.CENTER);
  181. // set username
  182. usernamePanel = new JPanel();
  183. usernamePanel.setBackground(model.tertiaryColor);
  184. UNField = new JTextField();
  185. UNField.addKeyListener(keyListener);
  186. UNField.setPreferredSize(new Dimension(160, 20));
  187. UNLabel = new JLabel("Username: ");
  188. UNLabel.setBackground(model.tertiaryColor);
  189. UNLabel.setForeground(model.primaryTextColor);
  190. usernamePanel.add(UNLabel);
  191. usernamePanel.add(UNField);
  192. usernamePanel.setBorder(BorderFactory.createEmptyBorder(20, 0, 0, 0));
  193. // set password
  194. passwordPanel = new JPanel();
  195. passwordPanel.setBackground(model.tertiaryColor);
  196. pwdField = new JPasswordField();
  197. pwdField.addKeyListener(keyListener);
  198. pwdField.setPreferredSize(new Dimension(160, 20));
  199. pwdLabel = new JLabel("Password: ");
  200. pwdLabel.setBackground(model.tertiaryColor);
  201. pwdLabel.setForeground(model.primaryTextColor);
  202. passwordPanel.add(pwdLabel);
  203. passwordPanel.add(pwdField);
  204. // account setup Panel
  205. setupPanel = new JPanel();
  206. setupPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
  207. setupPanel.setBackground(model.tertiaryColor);
  208. setupPanel.setLayout(new BoxLayout(setupPanel, BoxLayout.Y_AXIS));
  209. setupPanel.add(server);
  210. setupPanel.add(serverPanel);
  211. setupPanel.add(usernamePanel);
  212. setupPanel.add(passwordPanel);
  213. // setting right panel
  214. rightPanel = new JPanel();
  215. rightPanel.setLayout(new BorderLayout());
  216. rightPanel.setOpaque(false);
  217. rightPanel.setPreferredSize(new Dimension(270, 400));
  218. rightPanel.add(setupPanel, BorderLayout.NORTH);
  219. // add to account manager pop up main panel
  220. add(rightPanel, BorderLayout.EAST);
  221. }
  222. public void addAccount(){
  223. if (UNField.getText().length() != 0
  224. && pwdField.getPassword().length != 0) {
  225. // FOR BETA: we only support one account per server
  226. if (profile.getAccountFromServer((ServerType) server
  227. .getSelectedItem()) != null) {
  228. // AccountData is not null: account of the selected
  229. // serverType is stored
  230. String resultMessage =
  231. "We are only supporting one account per server. \n"
  232. + "Sorry for the inconvenience.";
  233. JOptionPane.showMessageDialog(null, resultMessage,
  234. "Information", JOptionPane.INFORMATION_MESSAGE);
  235. } else {
  236. // AccountData is null: account of the selected
  237. // serverType is not yet stored
  238. AccountData account;
  239. if ((ServerType) server.getSelectedItem() == ServerType.JABBER) {
  240. account =
  241. Model.createAccount(UNField.getText(), String
  242. .copyValueOf(pwdField.getPassword()),
  243. (ServerType) server.getSelectedItem(),
  244. jabberServer.getText());
  245. } else {
  246. account =
  247. Model.createAccount(UNField.getText(), String
  248. .copyValueOf(pwdField.getPassword()),
  249. (ServerType) server.getSelectedItem());
  250. }
  251. profile.addAccount(account);
  252. if (buddyFrame != null) {
  253. buddyFrame.addAccountJMenu(account);
  254. }
  255. }
  256. UNField.setText("");
  257. pwdField.setText("");
  258. addButton.setEnabled(false);
  259. }
  260. }
  261. private void removeAccount(){
  262. int selected = accList.getSelectedIndex();
  263. AccountData selectedAccount =
  264. (AccountData) accList.getSelectedValue();
  265. if (selected >= 0) {
  266. if (buddyFrame != null) {
  267. BuddyList.removeAccountJMenu(selectedAccount);
  268. chatClient.disconnect(selectedAccount);
  269. }
  270. profile.removeAccount(selectedAccount);
  271. removeButton.setEnabled(false);
  272. }
  273. }
  274. private class serverListener implements ItemListener {
  275. public void itemStateChanged(ItemEvent e) {
  276. if (server.getSelectedIndex() == 0) {
  277. serverPanel.setVisible(true);
  278. } else {
  279. serverPanel.setVisible(false);
  280. }
  281. }
  282. }
  283. private class addActionListener implements ActionListener {
  284. public void actionPerformed(ActionEvent arg0) {
  285. addAccount();
  286. }
  287. }
  288. private class removeActionListener implements ActionListener {
  289. public void actionPerformed(ActionEvent evt) {
  290. removeAccount();
  291. }
  292. }
  293. private class accListSelectionListener implements ListSelectionListener {
  294. public void valueChanged(ListSelectionEvent e) {
  295. if (accList.getSelectedIndex() > -1) {
  296. removeButton.setEnabled(true);
  297. }
  298. }
  299. }
  300. private class ProfileKeyListener implements KeyListener {
  301. public void keyPressed(KeyEvent e) {
  302. }
  303. public void keyReleased(KeyEvent e) {
  304. if (UNField.getText().length() > 0
  305. && pwdField.getPassword().length > 0) {
  306. if (server.getSelectedIndex() > 0) {
  307. addButton.setEnabled(true);
  308. } else {
  309. if (jabberServer.getText().length() > 0) {
  310. addButton.setEnabled(true);
  311. } else {
  312. addButton.setEnabled(false);
  313. }
  314. }
  315. } else {
  316. addButton.setEnabled(false);
  317. }
  318. }
  319. public void keyTyped(KeyEvent e) {
  320. }
  321. }
  322. private class AddRemoveButtonKeyListener implements KeyListener {
  323. private boolean isAddButton;
  324. public AddRemoveButtonKeyListener(boolean isAddButton) {
  325. this.isAddButton = isAddButton;
  326. }
  327. public void keyPressed(KeyEvent e) {
  328. }
  329. public void keyReleased(KeyEvent e) {
  330. if (isAddButton && e.getKeyChar() == KeyEvent.VK_ENTER) {
  331. addAccount();
  332. } else {
  333. if (e.getKeyChar() == KeyEvent.VK_ENTER) {
  334. removeAccount();
  335. }
  336. }
  337. }
  338. public void keyTyped(KeyEvent e) {
  339. }
  340. }
  341. public void update(Observable o, Object arg) {
  342. if (arg == UpdatedType.COLOR) {
  343. jabberServerPanel.setBackground(model.tertiaryColor);
  344. jabberServerLabelPanel.setBackground(model.tertiaryColor);
  345. jabberServerLabel.setForeground(model.primaryTextColor);
  346. serverPanel.setBackground(model.tertiaryColor);
  347. UNLabel.setBackground(model.tertiaryColor);
  348. UNLabel.setForeground(model.primaryTextColor);
  349. pwdLabel.setBackground(model.tertiaryColor);
  350. pwdLabel.setForeground(model.primaryTextColor);
  351. usernamePanel.setBackground(model.tertiaryColor);
  352. passwordPanel.setBackground(model.tertiaryColor);
  353. setupPanel.setBackground(model.tertiaryColor);
  354. setGradientColors(model.primaryColor, model.secondaryColor);
  355. this.updateUI();
  356. }
  357. accList.setListData(new Vector<AccountData>(profile.getAccountData()));
  358. return;
  359. }
  360. }