PageRenderTime 48ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/fin_val/src/production/artem/finance/gui/BankCatalog.java

http://finval.googlecode.com/
Java | 500 lines | 360 code | 60 blank | 80 comment | 30 complexity | 3439f47d9f25d17b4c8b71fe89a614fb MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, IPL-1.0, Apache-2.0, LGPL-2.1, LGPL-2.0, BSD-3-Clause
  1. package artem.finance.gui;
  2. import javax.swing.JPanel;
  3. import java.awt.Dimension;
  4. import java.awt.Rectangle;
  5. import javax.swing.JButton;
  6. import javax.swing.JInternalFrame;
  7. import javax.swing.JOptionPane;
  8. import javax.swing.JTextField;
  9. import javax.swing.JScrollPane;
  10. import javax.swing.JTable;
  11. import javax.swing.ListSelectionModel;
  12. import javax.swing.event.ListSelectionEvent;
  13. import javax.swing.event.ListSelectionListener;
  14. import javax.swing.table.DefaultTableColumnModel;
  15. import javax.swing.table.TableColumn;
  16. import java.rmi.RemoteException;
  17. import java.util.ArrayList;
  18. import java.util.List;
  19. import java.util.Properties;
  20. import javax.swing.JLabel;
  21. import org.apache.commons.lang.StringUtils;
  22. import artem.finance.gui.db.BeansFactory;
  23. import artem.finance.server.persist.Bank;
  24. import artem.finance.server.persist.beans.BankBean;
  25. /**
  26. *
  27. * @author IB
  28. *
  29. */
  30. public class BankCatalog extends JInternalFrame {
  31. private static final long serialVersionUID = 1L;
  32. private JPanel jContentPane = null;
  33. private JButton addButton = null;
  34. private JTextField bankNameTextField = null;
  35. private JTextField bankFullNameTextField = null;
  36. private JButton delButton = null;
  37. private JScrollPane jScrollPane = null;
  38. private JTable jTable = null;
  39. private JButton cancelButton = null;
  40. private JLabel bankLabel = null;
  41. private JLabel bankFullNameLabel = null;
  42. private JButton editButton = null;
  43. private BeansFactory factory;
  44. private Bank selectedBank;
  45. private Properties properties;
  46. /**
  47. * This is the default constructor for BankCatalog class.
  48. */
  49. public BankCatalog(Properties properties)
  50. {
  51. super("",
  52. false, //resizable
  53. true, //closable
  54. false, //maximizable
  55. true);//iconifiable
  56. this.properties = properties;
  57. this.factory = BeansFactory.getInstance();
  58. initialize();
  59. }
  60. public Properties getLanguageLabelsProperties()
  61. {
  62. return properties;
  63. }
  64. /**
  65. * This method initializes this
  66. *
  67. * @return void
  68. */
  69. private void initialize()
  70. {
  71. this.setSize(490, 535);
  72. this.setContentPane(getJContentPane());
  73. this.setTitle(properties.getProperty("banks"));
  74. }
  75. /**
  76. * This method initializes jContentPane
  77. *
  78. * @return javax.swing.JPanel
  79. */
  80. private JPanel getJContentPane()
  81. {
  82. if (jContentPane == null)
  83. {
  84. bankFullNameLabel = new JLabel();
  85. bankFullNameLabel.setBounds(new Rectangle(195, 499, 150, 16));
  86. bankFullNameLabel.setText(properties.getProperty("bankFullName"));
  87. bankLabel = new JLabel();
  88. bankLabel.setBounds(new Rectangle(15, 499, 38, 16));
  89. bankLabel.setText(properties.getProperty("bank"));
  90. jContentPane = new JPanel();
  91. jContentPane.setLayout(null);
  92. jContentPane.setSize(new Dimension(690, 230));
  93. jContentPane.add(getAddButton(), null);
  94. jContentPane.add(getBankNameTextField(), null);
  95. jContentPane.add(getBankFullNameTextField(), null);
  96. jContentPane.add(getDelButton(), null);
  97. jContentPane.add(getJScrollPane(), null);
  98. jContentPane.setOpaque(true);
  99. jContentPane.add(getCancelButton(), null);
  100. jContentPane.add(bankLabel, null);
  101. jContentPane.add(bankFullNameLabel, null);
  102. jContentPane.add(getEditButton(), null);
  103. }
  104. return jContentPane;
  105. }
  106. /**
  107. * This method initializes addButton
  108. *
  109. * @return javax.swing.JButton
  110. */
  111. private JButton getAddButton()
  112. {
  113. if (addButton == null)
  114. {
  115. addButton = new JButton();
  116. addButton.setBounds(new Rectangle(15, 466, 140, 26));
  117. addButton.setText(properties.getProperty("add"));
  118. addButton.setEnabled(false);
  119. addButton.setVisible(false);
  120. addButton.addActionListener(new java.awt.event.ActionListener()
  121. {
  122. public void actionPerformed(java.awt.event.ActionEvent e)
  123. {
  124. final String bankName = bankNameTextField.getText();
  125. final String bankFullName = bankFullNameTextField.getText();
  126. //add new field or change current field in the table
  127. if( bankName == null || StringUtils.EMPTY.equals( bankName ) ){
  128. JOptionPane.showMessageDialog(getJTable(), properties.getProperty("bankNameMissing"));
  129. return;
  130. }
  131. if( bankFullName == null || StringUtils.EMPTY.equals( bankFullName ) ){
  132. JOptionPane.showMessageDialog(getJTable(), properties.getProperty("bankFullNameMissing"));
  133. return;
  134. }
  135. if(selectedBank == null )
  136. {
  137. try
  138. {
  139. selectedBank = new Bank();
  140. selectedBank.setName( bankName );
  141. selectedBank.setFulname( bankFullName );
  142. factory.getBankServiceSLSB().save(new BankBean(selectedBank));
  143. JOptionPane.showMessageDialog(getJTable(), selectedBank.getFulname()+" "+properties.getProperty("savedSuccessfully"));
  144. cleanTextFields();
  145. //update jTable
  146. getDatabaseTableModel().setData(getDataFromDb());
  147. getDatabaseTableModel().fireTableRowsInserted(getJTable().getRowCount()-1, getJTable().getRowCount()-1);
  148. getJTable().repaint();
  149. //Select the inserted row
  150. getJTable().getSelectionModel().setLeadSelectionIndex(getJTable().getRowCount());
  151. selectedBank = null;
  152. }catch(Exception ex)
  153. {
  154. JOptionPane.showMessageDialog(getJTable(), properties.getProperty("bank")+" "+properties.getProperty("notSaved")+ex.getMessage());
  155. selectedBank = null;
  156. }
  157. }else
  158. {
  159. try
  160. {
  161. selectedBank.setName( bankName );
  162. selectedBank.setFulname( bankFullName );
  163. factory.getBankServiceSLSB().saveOrUpdate( new BankBean(selectedBank) );
  164. JOptionPane.showMessageDialog(getJTable(), selectedBank.getFulname()+" "+properties.getProperty("updatedSuccessfully"));
  165. cleanTextFields();
  166. //update jTable
  167. getDatabaseTableModel().setData(getDataFromDb());
  168. int selected = getJTable().getSelectionModel().getLeadSelectionIndex();
  169. getDatabaseTableModel().fireTableRowsUpdated(selected, selected);//.fireTableRowsInserted(getJTable().getRowCount()-1, getJTable().getRowCount());
  170. getJTable().repaint();
  171. selectedBank = null;
  172. }catch(Exception ex)
  173. {
  174. JOptionPane.showMessageDialog(getJTable(), properties.getProperty("bank")+" "+properties.getProperty("notUpdated")+ex.getMessage());
  175. selectedBank = null;
  176. }
  177. }
  178. }
  179. });
  180. }
  181. return addButton;
  182. }
  183. private void cleanTextFields()
  184. {
  185. bankNameTextField.setText( StringUtils.EMPTY );
  186. bankFullNameTextField.setText( StringUtils.EMPTY );
  187. }
  188. /**
  189. * This method initializes bankNameTextField
  190. *
  191. * @return javax.swing.JTextField
  192. */
  193. private JTextField getBankNameTextField()
  194. {
  195. if (bankNameTextField == null)
  196. {
  197. bankNameTextField = new JTextField();
  198. bankNameTextField.setBounds(new Rectangle(15, 524, 165, 20));
  199. }
  200. return bankNameTextField;
  201. }
  202. /**
  203. * This method initializes bankFullNameTextField
  204. *
  205. * @return javax.swing.JTextField
  206. */
  207. private JTextField getBankFullNameTextField()
  208. {
  209. if (bankFullNameTextField == null)
  210. {
  211. bankFullNameTextField = new JTextField();
  212. bankFullNameTextField.setBounds(new Rectangle(196, 525, 275, 20));
  213. }
  214. return bankFullNameTextField;
  215. }
  216. /**
  217. * This method initializes updButton
  218. *
  219. * @return javax.swing.JButton
  220. */
  221. private JButton getDelButton()
  222. {
  223. if (delButton == null)
  224. {
  225. delButton = new JButton();
  226. delButton.setBounds(new Rectangle(165, 466, 140, 26));
  227. delButton.setText(properties.getProperty("delete"));
  228. delButton.setEnabled(false);
  229. delButton.setVisible(false);
  230. delButton.addActionListener(new java.awt.event.ActionListener()
  231. {
  232. public void actionPerformed(java.awt.event.ActionEvent e)
  233. {
  234. //delete selected field
  235. getBankNameTextField().setText( StringUtils.EMPTY );
  236. getBankFullNameTextField().setText( StringUtils.EMPTY );
  237. if (selectedBank == null)
  238. {
  239. JOptionPane.showMessageDialog(getJTable(), properties.getProperty("bankNotSelectedToDelete"));
  240. } else
  241. {
  242. try
  243. {
  244. factory.getBankServiceSLSB().delete(new BankBean(selectedBank));
  245. JOptionPane.showMessageDialog(getJTable(),selectedBank.getFulname() + " "+ properties.getProperty("deleted"));
  246. selectedBank = null;
  247. // update jTable
  248. getDatabaseTableModel().setData(getDataFromDb());
  249. int selectedRow = getJTable().getSelectionModel().getLeadSelectionIndex();
  250. getDatabaseTableModel().fireTableRowsDeleted(selectedRow, selectedRow);
  251. //getJTable().repaint();
  252. } catch (Exception ex)
  253. {
  254. JOptionPane.showMessageDialog(getJTable(), selectedBank.getFulname()+ " "+ properties.getProperty("notDeleted"));
  255. }
  256. }
  257. }
  258. });
  259. }
  260. return delButton;
  261. }
  262. /**
  263. * This method initializes jScrollPane
  264. *
  265. * @return javax.swing.JScrollPane
  266. */
  267. private JScrollPane getJScrollPane()
  268. {
  269. if (jScrollPane == null)
  270. {
  271. jScrollPane = new JScrollPane();
  272. jScrollPane.setBounds(new Rectangle(13, 15, 455, 446));
  273. jScrollPane.setViewportView(getJTable());
  274. }
  275. return jScrollPane;
  276. }
  277. private List<Object> getDataFromDb()
  278. {
  279. List<Object> data = new ArrayList<Object>();
  280. try
  281. {
  282. List<BankBean> banks = factory.getBankServiceSLSB().findAll();
  283. for(int i = 0; i< banks.size(); i++)
  284. {
  285. BankBean bank = banks.get(i);
  286. List<Object> raw = new ArrayList<Object>();
  287. raw.add(bank.getBank().getId());
  288. raw.add(bank.getBank().getName());
  289. raw.add(bank.getBank().getFulname());
  290. data.add(raw);
  291. }
  292. } catch (RemoteException e) {
  293. JOptionPane.showMessageDialog(getJTable(), "Can not get all banks from database."/*properties.getProperty("canNotGetAllBanksFromDB")*/);
  294. e.printStackTrace();
  295. }
  296. return data;
  297. }
  298. /**
  299. * Used for lazy data loading to the table. Fills the data only after first frame shoving
  300. */
  301. public void fillBanksTable()
  302. {
  303. getDatabaseTableModel().setData(getDataFromDb());
  304. getDatabaseTableModel().fireTableDataChanged();
  305. }
  306. /**
  307. * This method initializes jTable
  308. *
  309. * @return javax.swing.JTable
  310. */
  311. private JTable getJTable()
  312. {
  313. if (jTable == null)
  314. {
  315. DatabaseTableModel tableModel = new DatabaseTableModel(true);
  316. final List<String> names = new ArrayList<String>();
  317. names.add("");
  318. names.add(properties.getProperty("bank"));
  319. names.add(properties.getProperty("bankFullName"));
  320. tableModel.setColumnNames(names);
  321. final List<Class> types = new ArrayList<Class>(3);
  322. types.add(Long.class);
  323. types.add(String.class);
  324. types.add(String.class);
  325. //types.add(JRadioButton.class);
  326. tableModel.setColumnTypes(types);
  327. //Gets all the banks during loading!
  328. //tableModel.setData(getDataFromDb());
  329. jTable = new JTable(tableModel);
  330. DefaultTableColumnModel columns = (DefaultTableColumnModel) jTable.getColumnModel();
  331. TableColumn tc = columns.getColumn(0);
  332. tc.setPreferredWidth(0);
  333. tc = columns.getColumn(1);
  334. tc.setPreferredWidth(315);
  335. tc = columns.getColumn(2);
  336. tc.setPreferredWidth(815);
  337. jTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
  338. jTable.setBounds(new Rectangle(15, 15, 455, 420));
  339. jTable.setFillsViewportHeight(true);
  340. //User can select only one row.
  341. jTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  342. jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
  343. public void valueChanged(ListSelectionEvent e)
  344. {
  345. int selectedRow = getJTable().getSelectionModel().getLeadSelectionIndex();
  346. Long id = (Long)getJTable().getModel().getValueAt(selectedRow, 0);
  347. String name = (String)getJTable().getModel().getValueAt(selectedRow, 1);
  348. String fulname = (String)getJTable().getModel().getValueAt(selectedRow, 2);
  349. selectedBank = new Bank();
  350. selectedBank.setId(id);
  351. selectedBank.setName(name);
  352. selectedBank.setFulname(fulname);
  353. getBankNameTextField().setText( name );
  354. getBankFullNameTextField().setText( fulname );
  355. }
  356. });
  357. }
  358. return jTable;
  359. }
  360. private DatabaseTableModel getDatabaseTableModel()
  361. {
  362. DatabaseTableModel model = (DatabaseTableModel)jTable.getModel();
  363. return model;
  364. }
  365. /**
  366. * This method initializes cancelButton
  367. *
  368. * @return javax.swing.JButton
  369. */
  370. private JButton getCancelButton()
  371. {
  372. if (cancelButton == null)
  373. {
  374. cancelButton = new JButton();
  375. cancelButton.setBounds(new Rectangle(315, 466, 145, 26));
  376. cancelButton.setText(properties.getProperty("cancel"));
  377. cancelButton.setEnabled(false);
  378. cancelButton.setVisible(false);
  379. cancelButton.addActionListener(new java.awt.event.ActionListener()
  380. {
  381. public void actionPerformed(java.awt.event.ActionEvent e)
  382. {
  383. //active
  384. editButton.setEnabled(true);
  385. editButton.setVisible(true);
  386. //not active
  387. addButton.setVisible(false);
  388. addButton.setEnabled(false);
  389. addButton.setText(properties.getProperty("add"));
  390. delButton.setVisible(false);
  391. delButton.setEnabled(false);
  392. cancelButton.setVisible(false);
  393. cancelButton.setEnabled(false);
  394. //change frame size
  395. setSize(490, 535);
  396. //clear textfields
  397. bankNameTextField.setText(null);
  398. bankFullNameTextField.setText(null);
  399. //Clear highlighting the selected row in the table
  400. int leadSelectionInd = getJTable().getSelectionModel().getLeadSelectionIndex();
  401. getJTable().getSelectionModel().removeSelectionInterval(leadSelectionInd, leadSelectionInd);
  402. }
  403. });
  404. }
  405. return cancelButton;
  406. }
  407. /**
  408. * This method initializes editButton1
  409. *
  410. * @return javax.swing.JButton
  411. */
  412. private JButton getEditButton()
  413. {
  414. if (editButton == null)
  415. {
  416. editButton = new JButton();
  417. editButton.setBounds(new Rectangle(15, 466, 140, 26));
  418. editButton.setText(properties.getProperty("edit"));
  419. editButton.addActionListener(new java.awt.event.ActionListener()
  420. {
  421. public void actionPerformed(java.awt.event.ActionEvent e)
  422. {
  423. //not active
  424. editButton.setEnabled(false);
  425. editButton.setVisible(false);
  426. //active
  427. addButton.setVisible(true);
  428. addButton.setEnabled(true);
  429. delButton.setVisible(true);
  430. delButton.setEnabled(true);
  431. cancelButton.setVisible(true);
  432. cancelButton.setEnabled(true);
  433. //change frame size
  434. setSize(490, 585);
  435. }
  436. });
  437. }
  438. return editButton;
  439. }
  440. }