package cz.cvut.fel.restauracefel.manager.manager_gui; import cz.cvut.fel.restauracefel.manager.ManagerController.MenuMenuItemResult; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileNotFoundException; import java.rmi.NotBoundException; import java.rmi.RemoteException; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import cz.cvut.fel.restauracefel.manager_service.ResultTableModel; import cz.cvut.fel.restauracefel.library.service.Validator; /** * Trida reprezentujici JDialog pro evidenci polozek menu v ramci nektereho * menu. * * @author Jarda */ public class MenuMenuItemDialog extends AbstractDialog { private JScrollPane paneMenuItem = null; private JScrollPane paneTable = null; private JTable table = null; private MenuMenuItemForm menuMenuItemForm = null; private int row = -1; private int menuId; private ManagerViewController view; /** * Konstruktor tridy MenuMenuItemDialog. * * @param parent instance tridy JFrame jenz vytvorila tento formular * @param modal urcuje, zda bude okno modalni * @param menuId ID menu, pro ktere se maji evidovat polozky * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ public MenuMenuItemDialog(JFrame parent, boolean modal, int menuId) { super(parent, modal); super.setTitle("Přiřazení položek menu"); this.menuId = menuId; view = ManagerViewController.getInstance(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int y = (int) ((dim.getHeight() - 550) / 2); int x = (int) ((dim.getWidth() - 450) / 2); setBounds(x, y, 450, 550); initComponents(); menuMenuItemForm.getMenuLabel().setText(view.getMenuNameById(menuId)); initTable(); refresh(); } /** * Metoda inicializuje komponenty na JDialogu. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ @Override protected void initComponents() { paneMenuItem = new JScrollPane(); paneTable = new JScrollPane(); table = new JTable(); menuMenuItemForm = new MenuMenuItemForm(); paneMenuItem.getViewport().add(menuMenuItemForm); paneTable.getViewport().add(table); Container con = getContentPane(); con.setLayout(new BorderLayout()); con.add(paneMenuItem, BorderLayout.NORTH); con.add(paneTable, BorderLayout.CENTER); menuMenuItemForm.getInsertButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { insertAction(); } }); menuMenuItemForm.getDeleteButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { deleteAction(); } }); } /** * Metoda pro vytvoreni noveho zaznamu o prirazeni dane polozky k danemu menu. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ private void insertAction() { String name = (String)menuMenuItemForm.getMenuItemComboBox().getSelectedItem(); if(view.insertMenuMenuItem(menuId, name) == MenuMenuItemResult.Succesful){ menuMenuItemForm.clearFields(); refresh(); } } /** * Metoda provadi smazani vybrane vazby mezi polozkou menu a menu. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ private void deleteAction() { row = table.getSelectedRow(); String menuItemName = String.valueOf(table.getModel().getValueAt(row, 2)); view.deleteMenuMenuItem(menuId, menuItemName); refresh(); } /** * Metoda inicializujici tabulku na danem JDialogu. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ protected void initTable() { table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); table.setRowSelectionAllowed(true); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { row = table.getSelectedRow(); if (row == -1) { menuMenuItemForm.clearFields(); menuMenuItemForm.getInsertButton().setEnabled(true); menuMenuItemForm.getDeleteButton().setEnabled(false); menuMenuItemForm.getInsertButton().setText("Vložit položku menu"); menuMenuItemForm.getInsertButton().setToolTipText("Vložit položku do menu."); } else { menuMenuItemForm.getMenuItemComboBox().setSelectedItem((String) table.getModel().getValueAt(row, 1)); menuMenuItemForm.getDeleteButton().setEnabled(true); menuMenuItemForm.getInsertButton().setEnabled(false); } } }); //refresh(); } /** * Metoda provadi aktualizaci vsech comboBoxu a aktualizaci tabulky. * Zaroven prenastavuje statusBar. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ protected void refresh() { setComboBoxModel(view.getMenuItemNames(), menuMenuItemForm.getMenuItemComboBox()); refreshTable(); } /** * Metoda aktualizujici zaznamy v dane tabulce na tomto JDialogu. * * @throws java.io.FileNotFoundException * @throws java.rmi.NotBoundException * @throws java.rmi.RemoteException */ protected void refreshTable() { ResultTableModel rtm = new ResultTableModel(); Object[][] menuMenus = view.getMenuItemsByMenuId(menuId); rtm.setColumnData(ResultTableModel.namesMenuMenuItem); rtm.setTableData(menuMenus); table.setModel(rtm); } }