package com.floreantpos.bo.ui.explorer; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.JButton; import javax.swing.JScrollPane; import javax.swing.JTable; import org.hibernate.exception.ConstraintViolationException; import com.floreantpos.main.Application; import com.floreantpos.model.User; import com.floreantpos.model.dao.UserDAO; import com.floreantpos.swing.MessageDialog; import com.floreantpos.swing.TransparentPanel; import com.floreantpos.ui.PosTableRenderer; import com.floreantpos.ui.dialog.BeanEditorDialog; import com.floreantpos.ui.dialog.ConfirmDeleteDialog; import com.floreantpos.ui.forms.UserForm; public class UserExplorer extends TransparentPanel { private JTable table; private UserTableModel tableModel; public UserExplorer() { List<User> users = UserDAO.getInstance().findAll(); tableModel = new UserTableModel(users); table = new JTable(tableModel); table.setDefaultRenderer(Object.class, new PosTableRenderer()); setLayout(new BorderLayout(5,5)); add(new JScrollPane(table)); JButton addButton = new JButton("Add"); addButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { Integer userWithMaxId = UserDAO.getInstance().findUserWithMaxId(); UserForm editor = new UserForm(); if(userWithMaxId != null) { editor.setId(new Integer(userWithMaxId.intValue() + 1)); } BeanEditorDialog dialog = new BeanEditorDialog(editor, Application.getInstance().getBackOfficeWindow(), true); dialog.open(); if (dialog.isCanceled()) return; User user = (User) editor.getBean(); tableModel.addItem(user); } catch (Exception x) { x.printStackTrace(); MessageDialog.showError("An error has occured, please restart the application", x); } } }); JButton copyButton = new JButton("Copy"); copyButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { int index = table.getSelectedRow(); if (index < 0) return; User user = (User) tableModel.getRowData(index); User user2 = new User(); user2.setUserId(user.getUserId()); user2.setNewUserType(user.getNewUserType()); user2.setFirstName(user.getFirstName()); user2.setLastName(user.getLastName()); user2.setPassword(user.getPassword()); user2.setSsn(user.getSsn()); UserForm editor = new UserForm(); editor.setEditMode(false); editor.setBean(user2); BeanEditorDialog dialog = new BeanEditorDialog(editor, Application.getInstance().getBackOfficeWindow(), true); dialog.open(); if (dialog.isCanceled()) return; User newUser = (User) editor.getBean(); tableModel.addItem(newUser); } catch (Exception x) { MessageDialog.showError("An error has occured, please restart the application", x); } } }); JButton editButton = new JButton("Edit"); editButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { int index = table.getSelectedRow(); if (index < 0) return; User user = (User) tableModel.getRowData(index); UserForm editor = new UserForm(); editor.setEditMode(true); editor.setBean(user); BeanEditorDialog dialog = new BeanEditorDialog(editor, Application.getInstance().getBackOfficeWindow(), true); dialog.open(); if (dialog.isCanceled()) return; tableModel.updateItem(index); } catch (Throwable x) { MessageDialog.showError("An error has occured, please restart the application", x); } } }); JButton deleteButton = new JButton("Delete"); deleteButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int index = table.getSelectedRow(); if (index < 0) return; User user = (User) tableModel.getRowData(index); if(user == null) { return; } try { if (ConfirmDeleteDialog.showMessage(UserExplorer.this, "Sure Want to Delete?", "Delete") == ConfirmDeleteDialog.YES) { UserDAO.getInstance().delete(user); tableModel.deleteItem(index); } } catch(ConstraintViolationException x) { String message = "User " + user.getFirstName() + " " + user.getLastName() + " (" + user.getNewUserType() + ") cannot be deleted because it is being used."; MessageDialog.showError(message, x); } catch (Exception x) { MessageDialog.showError("An error has occured, you may need restart the application", x); } } }); TransparentPanel panel = new TransparentPanel(); panel.add(addButton); panel.add(copyButton); panel.add(editButton); panel.add(deleteButton); add(panel, BorderLayout.SOUTH); } class UserTableModel extends ListTableModel { UserTableModel(List list){ super(new String[] {"ID", "First Name", "Last Name", "Type"}, list); } public Object getValueAt(int rowIndex, int columnIndex) { User user = (User) rows.get(rowIndex); switch(columnIndex) { case 0: return String.valueOf(user.getUserId()); case 1: return user.getFirstName(); case 2: return user.getLastName(); case 3: return user.getNewUserType(); } return null; } } }