package cz.cvut.fel.restauracefel.manager.manager_gui;
import cz.cvut.fel.restauracefel.manager.ManagerController.MenuItemResult;
import java.io.FileNotFoundException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import javax.swing.JFrame;
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 GUI pro okno, kde se vytvareji polozky menu.
*
* @author Jarda
*/
public class MenuItemForm extends AbstractForm {
private RecipeDialog recipeDialog = null;
private MenuItemTypeDialog menuItemTypeDialog = null;
private JTable table = null;
private JFrame parent = null;
private StatusBar statusBar = null;
private int row = -1;
private ManagerViewController view;
/**
* Konstruktor tridy MenuItemForm.
*/
public MenuItemForm(JFrame parent, StatusBar bar) {
view = ManagerViewController.getInstance();
this.parent = parent;
this.statusBar = bar;
initComponents();
initTable();
refreshSettings();
refresh();
clearFields();
}
/**
* Metoda aktualizuje formular dle udaju ulozenych v config. souboru.
*
* @throws java.io.FileNotFoundException
*/
public void refreshSettings() {
String money = " v " + view.getMoneyFromConfig();
jLabelMoney.setText(money);
}
/**
* 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.getMenuItemTypeNames(), jComboBoxType);
refreshTable();
statusBar.setMessage("Tento formulář slouží k práci s položkami 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);
jButtonRecipe.setEnabled(false);
jButtonInsert.setText("Vytvořit položku");
statusBar.setMessage("Vytvořit novou položku menu.");
} else {
jComboBoxType.setSelectedItem((String)table.getModel().getValueAt(row, 1));
jTextFieldName.setText((String) table.getModel().getValueAt(row, 2));
jTextFieldQuantity.setText((String) table.getModel().getValueAt(row, 3));
jTextFieldPrice.setText(String.valueOf(table.getModel().getValueAt(row, 4)));
jComboBoxAvailable.setSelectedItem((String)table.getModel().getValueAt(row, 5));
jButtonDelete.setEnabled(true);
jButtonRecipe.setEnabled(true);
jButtonInsert.setText("Aktualizovat položku");
statusBar.setMessage("Položka menu ID: " +table.getValueAt(row, 0)+", \""+table.getValueAt(row, 2)+"\"");
}
}
});
}
/**
* Metoda aktualizuje tabulku.
*
*/
@Override
protected void refreshTable() {
ResultTableModel rtm = new ResultTableModel();
Object[][] menuItems = view.getMenuItems();
rtm.setColumnData(ResultTableModel.namesMenuItem);
rtm.setTableData(menuItems);
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.clearTextField(jTextFieldPrice);
Validator.clearTextField(jTextFieldQuantity);
Validator.clearComboBox(jComboBoxAvailable);
Validator.clearComboBox(jComboBoxType);
jButtonDelete.setEnabled(false);
jButtonRecipe.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();
jLabelPrice = new javax.swing.JLabel();
jLabelAvailable = new javax.swing.JLabel();
jTextFieldName = new javax.swing.JTextField();
jTextFieldPrice = new javax.swing.JTextField();
jComboBoxAvailable = new javax.swing.JComboBox();
jLabelMoney = new javax.swing.JLabel();
jButtonInsert = new javax.swing.JButton();
jButtonDelete = new javax.swing.JButton();
jButtonClear = new javax.swing.JButton();
jButtonRecipe = new javax.swing.JButton();
jLabelQuantity = new javax.swing.JLabel();
jTextFieldQuantity = new javax.swing.JTextField();
jLabelType = new javax.swing.JLabel();
jComboBoxType = new javax.swing.JComboBox();
jButtonKategory = new javax.swing.JButton();
jLabelName.setText("Název položky menu");
jLabelPrice.setText("Cena položky menu");
jLabelAvailable.setText("Dostupnost");
jComboBoxAvailable.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Dostupná", "Nedostupná" }));
jLabelMoney.setText("měna");
jButtonInsert.setText("Vytvořit položku");
jButtonInsert.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonInsertActionPerformed(evt);
}
});
jButtonDelete.setText("Smazat položku");
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);
}
});
jButtonRecipe.setText("Receptura");
jButtonRecipe.setEnabled(false);
jButtonRecipe.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonRecipeActionPerformed(evt);
}
});
jLabelQuantity.setText("Množství");
jLabelType.setText("Kategorie");
jButtonKategory.setText("Kategorie");
jButtonKategory.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonKategoryActionPerformed(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.LEADING)
.addComponent(jLabelName)
.addComponent(jLabelPrice)
.addComponent(jLabelQuantity)
.addComponent(jLabelAvailable)
.addComponent(jLabelType))
.addGap(4, 4, 4)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jComboBoxType, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextFieldName, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jComboBoxAvailable, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextFieldQuantity, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextFieldPrice, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabelMoney)))
.addGap(1, 1, 1)
.addComponent(jButtonKategory, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jButtonRecipe, 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(jButtonInsert, javax.swing.GroupLayout.PREFERRED_SIZE, 117, Short.MAX_VALUE)
.addComponent(jButtonDelete, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(24, 24, 24))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabelType)
.addComponent(jComboBoxType, 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(jLabelName)
.addComponent(jTextFieldName, 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(jLabelPrice)
.addComponent(jTextFieldPrice, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabelMoney)
.addComponent(jButtonDelete))
.addGap(14, 14, 14)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabelQuantity)
.addComponent(jTextFieldQuantity, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabelAvailable)
.addComponent(jComboBoxAvailable, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonRecipe)
.addComponent(jButtonKategory)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void jButtonInsertActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonInsertActionPerformed
String name = jTextFieldName.getText();
String price = jTextFieldPrice.getText();
String quantity = jTextFieldQuantity.getText();
String menuItemType = (String) jComboBoxType.getSelectedItem();
int avaible = 0;
int menuItemId = -1;
if(jComboBoxAvailable.getSelectedIndex() == 0){
avaible = 1;
}
if(row != -1){
menuItemId = (Integer) table.getModel().getValueAt(row, 0);
}
if(view.insertMenuItem(name, price, quantity, menuItemType, avaible, menuItemId) == MenuItemResult.Succesful){
refreshTable();
clearFields();
}
}//GEN-LAST:event_jButtonInsertActionPerformed
private void jButtonClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonClearActionPerformed
clearFields();
}//GEN-LAST:event_jButtonClearActionPerformed
private void jButtonRecipeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRecipeActionPerformed
Integer menuItemId = (Integer)table.getModel().getValueAt(row, 0);
recipeDialog = new RecipeDialog(parent, true, menuItemId);
recipeDialog.setVisible(true);
}//GEN-LAST:event_jButtonRecipeActionPerformed
private void jButtonDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDeleteActionPerformed
row = table.getSelectedRow();
int menuItemId = (Integer)table.getModel().getValueAt(row, 0);
view.deleteMenuItem(menuItemId);
refreshTable();
}//GEN-LAST:event_jButtonDeleteActionPerformed
private void jButtonKategoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonKategoryActionPerformed
menuItemTypeDialog = new MenuItemTypeDialog(parent, true);
menuItemTypeDialog.setVisible(true);
refresh();
}//GEN-LAST:event_jButtonKategoryActionPerformed
// 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 jButtonKategory;
private javax.swing.JButton jButtonRecipe;
private javax.swing.JComboBox jComboBoxAvailable;
private javax.swing.JComboBox jComboBoxType;
private javax.swing.JLabel jLabelAvailable;
private javax.swing.JLabel jLabelMoney;
private javax.swing.JLabel jLabelName;
private javax.swing.JLabel jLabelPrice;
private javax.swing.JLabel jLabelQuantity;
private javax.swing.JLabel jLabelType;
private javax.swing.JTextField jTextFieldName;
private javax.swing.JTextField jTextFieldPrice;
private javax.swing.JTextField jTextFieldQuantity;
// End of variables declaration//GEN-END:variables
}