package cz.cvut.fel.restauracefel.manager.manager_gui;
import cz.cvut.fel.restauracefel.manager.ManagerController.MenuResult;
import java.io.File;
import java.io.FileNotFoundException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import cz.cvut.fel.restauracefel.library.service.ConfigParser;
import cz.cvut.fel.restauracefel.manager_service.ResultTableModel;
import cz.cvut.fel.restauracefel.manager_service.ServiceFacade;
import cz.cvut.fel.restauracefel.library.service.Validator;
/**
* Trida reprezentujici GUI pro okno, kde se vytvareji menu.
*
* @author Jarda
*/
public class MenuForm extends AbstractForm {
private JTable table = null;
private JFrame parent = null;
private StatusBar statusBar = null;
private int row = -1;
private ManagerViewController view;
private static SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");
/**
* Konstruktor tridy MenuForm.
*
* @param parent instance tridy JFrame jenz vytvorila tento formular
* @param bar statusBar, do ktereho budou vypisovany popisky
* @throws java.io.FileNotFoundException
* @throws java.rmi.RemoteException
* @throws java.rmi.NotBoundException
*/
public MenuForm(JFrame parent, StatusBar bar) {
view = ManagerViewController.getInstance();
this.parent = parent;
this.statusBar = bar;
initComponents();
initTable();
refresh();
clearFields();
}
/**
* Metoda provadi aktualizaci vsech comboBoxu a aktualizaci tabulky.
* Zaroven prenastavuje statusBar.
*
* @throws java.rmi.RemoteException
* @throws java.rmi.NotBoundException
* @throws java.io.FileNotFoundException
*/
@Override
public void refresh() {
setComboBoxModel(view.getUsernames(), jComboBoxUser);
refreshTable();
statusBar.setMessage("Tento formulář slouží k editaci a úpravě záznamů o menu.");
}
/**
* Metoda inicializujici tabulku.
*/
@Override
protected void initTable() {
table = new JTable();
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) {
clearFields();
jButtonDelete.setEnabled(false);
jButtonMenuItems.setEnabled(false);
jButtonInsert.setText("Vložit záznam");
jButtonInsert.setToolTipText("Vložit nový záznam menu");
jButtonPrint.setEnabled(false);
statusBar.setMessage("Založit nové menu.");
} else {
jTextFieldName.setText((String) table.getModel().getValueAt(row, 1));
jTextFieldDate.setText((String) table.getModel().getValueAt(row, 2));
jComboBoxUser.setSelectedItem((String) table.getModel().getValueAt(row, 3));
jButtonDelete.setEnabled(true);
jButtonMenuItems.setEnabled(true);
jButtonPrint.setEnabled(true);
jButtonInsert.setText("Aktualizovat záznam");
jButtonInsert.setToolTipText("Aktualizovat vybraný záznam menu");
statusBar.setMessage("Menu ID: "+table.getModel().getValueAt(row, 0)+", \""+table.getModel().getValueAt(row, 1)+"\"");
}
}
});
//refreshTable();
}
/**
* Metoda aktualizuje tabulku.
*
* @throws java.rmi.RemoteException
* @throws java.rmi.NotBoundException
* @throws java.io.FileNotFoundException
*/
@Override
protected void refreshTable() {
ResultTableModel rtm = new ResultTableModel();
rtm.setColumnData(ResultTableModel.namesMenu);
Object[][] menus = view.getMenus();
rtm.setTableData(menus);
table.setModel(rtm);
}
/**
* Metoda navraci tabulku (instanci tridy JTable).
*
* @return instance tridy JTable
*/
public JTable getTable() {
return table;
}
/**
* Metoda cisti vstupni pole na tomto formulari.
*/
@Override
protected void clearFields() {
Validator.clearTextField(jTextFieldName);
Validator.clearDateField(jTextFieldDate);
Validator.clearComboBox(jComboBoxUser);
jButtonDelete.setEnabled(false);
jButtonMenuItems.setEnabled(false);
jButtonPrint.setEnabled(false);
table.clearSelection();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jLabelName = new javax.swing.JLabel();
jLabelDate = new javax.swing.JLabel();
jLabelUser = new javax.swing.JLabel();
jTextFieldName = new javax.swing.JTextField();
jTextFieldDate = new javax.swing.JTextField();
jComboBoxUser = new javax.swing.JComboBox();
jButtonInsert = new javax.swing.JButton();
jButtonDelete = new javax.swing.JButton();
jButtonClear = new javax.swing.JButton();
jButtonMenuItems = new javax.swing.JButton();
jButtonPrint = new javax.swing.JButton();
jLabelName.setText("Název menu");
jLabelDate.setText("Datum vytvoření menu");
jLabelUser.setText("Vytvořil");
jComboBoxUser.setToolTipText("Uživatel, který vytvořil toto menu.");
jButtonInsert.setText("Vytvořit záznam");
jButtonInsert.setToolTipText("Vložit nový záznam Menu");
jButtonInsert.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonInsertActionPerformed(evt);
}
});
jButtonDelete.setText("Smazat záznam");
jButtonDelete.setToolTipText("Smazat vybraný záznam Menu");
jButtonDelete.setEnabled(false);
jButtonDelete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonDeleteActionPerformed(evt);
}
});
jButtonClear.setText("Vyčistit formulář");
jButtonClear.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonClearActionPerformed(evt);
}
});
jButtonMenuItems.setText("Nastavit položky menu");
jButtonMenuItems.setToolTipText("Přiřadit označenému menu položky menu.");
jButtonMenuItems.setEnabled(false);
jButtonMenuItems.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonMenuItemsActionPerformed(evt);
}
});
jButtonPrint.setText("Vytisknout menu");
jButtonPrint.setToolTipText("Tisk označeného menu.");
jButtonPrint.setEnabled(false);
jButtonPrint.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonPrintActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jButtonPrint)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabelDate)
.addComponent(jLabelName)
.addComponent(jLabelUser))
.addGap(25, 25, 25)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jComboBoxUser, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextFieldDate)
.addComponent(jTextFieldName, javax.swing.GroupLayout.PREFERRED_SIZE, 189, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(88, 88, 88)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jButtonInsert, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonClear, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonDelete, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(56, 56, 56)
.addComponent(jButtonMenuItems)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabelName)
.addComponent(jTextFieldName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButtonInsert))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabelDate)
.addComponent(jTextFieldDate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButtonClear))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabelUser)
.addComponent(jComboBoxUser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButtonDelete))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonMenuItems)
.addComponent(jButtonPrint))
.addContainerGap(19, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void jButtonInsertActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonInsertActionPerformed
String name = jTextFieldName.getText();
Date date = Validator.isValidDate(jTextFieldDate.getText());
String username = (String) jComboBoxUser.getSelectedItem();
int menuId = -1;
if(row != -1){
menuId = (Integer)table.getModel().getValueAt(row, 0);
}
if(view.insertMenu(name, date, username, menuId) == MenuResult.Succesful){
refreshTable();
clearFields();
}
}//GEN-LAST:event_jButtonInsertActionPerformed
private void jButtonDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDeleteActionPerformed
row = table.getSelectedRow();
int menuId = (Integer) table.getModel().getValueAt(row, 0);
view.deleteMenu(menuId);
refreshTable();
}//GEN-LAST:event_jButtonDeleteActionPerformed
private void jButtonClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonClearActionPerformed
clearFields();
}//GEN-LAST:event_jButtonClearActionPerformed
private void jButtonMenuItemsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonMenuItemsActionPerformed
int menuId = (Integer)table.getModel().getValueAt(row, 0);
MenuMenuItemDialog mmd = new MenuMenuItemDialog(parent, true, menuId);
mmd.setVisible(true);
}//GEN-LAST:event_jButtonMenuItemsActionPerformed
private void jButtonPrintActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonPrintActionPerformed
String title = (String) table.getModel().getValueAt(row, 1);
int menuId = (Integer) table.getModel().getValueAt(row, 0);
view.printMenu(title, menuId);
}//GEN-LAST:event_jButtonPrintActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButtonClear;
private javax.swing.JButton jButtonDelete;
private javax.swing.JButton jButtonInsert;
private javax.swing.JButton jButtonMenuItems;
private javax.swing.JButton jButtonPrint;
private javax.swing.JComboBox jComboBoxUser;
private javax.swing.JLabel jLabelDate;
private javax.swing.JLabel jLabelName;
private javax.swing.JLabel jLabelUser;
private javax.swing.JTextField jTextFieldDate;
private javax.swing.JTextField jTextFieldName;
// End of variables declaration//GEN-END:variables
}