package cz.cvut.fel.restauracefel.storage.sklad_gui; import cz.cvut.fel.restauracefel.hibernate.Material; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.FileNotFoundException; import java.rmi.NotBoundException; import java.rmi.RemoteException; import javax.swing.JComboBox; import javax.swing.JPanel; import cz.cvut.fel.restauracefel.sklad_service.ServiceFacade; /** * Abstraktni trida, ze ktere dedi klientske JPanel tridy. * * @author Jarda */ public abstract class AbstractForm extends JPanel { /** * Konstruktor tridy AbstractForm. */ public AbstractForm() { } /** * Metoda pro nastaveni datoveho modelu pro urceny JComboBox. String retezce * obsazene v poli namse budou nastaveny jako polozky JComboBoxu. * * @param names retezce, ktere budou nastaveny jako polozky daneho JComboBoxu * @param box JComboBox, pro ktery budou nastaveny polozky */ protected void setComboBoxModel(String names[], JComboBox box){ box.removeAllItems(); if (names == null || names.length == 0) { return; } for (int i = 0; i < names.length; i++) { box.addItem(names[i]); } box.setSelectedIndex(0); } /** * Metoda urcena pro nastaveni comboBoxu obsahujicich udaje o druhu materialu * (materialTypeBox), materialu (materialBox) a druhu jednotky (unitTypeBox). * Metoda nastavuje pro materialTypeBox a materialBox listenery. Ty zajistuji * selekci pripustnych hodnot v ostatnich comboBoxech. * * @param materialTypeBox obsahuje zaznamy o druzich materialu * @param materialBox obsahuje zaznamy o materialech * @param unitBox obsahuje zaznamy o jednotkach */ protected void setComboBoxesListeners(final JComboBox materialTypeBox, final JComboBox materialBox, final JComboBox unitBox) { materialTypeBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { try { setMaterialModel(materialTypeBox, materialBox); } catch (Exception ex){} } }); materialBox.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e) { try { setUnitTypeModel(materialBox, unitBox); } catch (Exception ex){} } }); } /** * Metoda nastavujici polozky comboBoxu material. Polozky jsou nastaveny dle * aktualne vybrane polozky comboBoxu materialType. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ private void setMaterialModel(JComboBox materialTypeBox, JComboBox materialBox) throws RemoteException, NotBoundException, FileNotFoundException { if (materialTypeBox.getSelectedIndex() == -1) { materialBox.setSelectedItem(null); return; } int materialTypeId = ServiceFacade.getInstance().getMaterialTypeByName((String) materialTypeBox.getSelectedItem()).getMaterialTypeId(); setComboBoxModel(ServiceFacade.getInstance().getMaterialNamesByMaterialType(materialTypeId), materialBox); } /** * Metoda nastavujici polozky comboBoxu unitType. Polozky jsou nastaveny dle * aktualne vybrane polozky comboBoxu material. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ private void setUnitTypeModel(JComboBox materialBox, JComboBox unitBox) throws RemoteException, NotBoundException, FileNotFoundException { if (materialBox.getSelectedIndex() == -1) { unitBox.removeAllItems(); return; } Material mat = ServiceFacade.getInstance().getMaterialByName((String) materialBox.getSelectedItem()); int typeId = mat.getUnitType().getTypeId(); setComboBoxModel(ServiceFacade.getInstance().getUnitTypeAbbrsByTypeId(typeId), unitBox); unitBox.setSelectedItem(mat.getUnitType().getAbbreviation()); } //ABSTRAKTNI METODY /** * Metoda provadi aktualizaci vsech comboBoxu a aktualizaci tabulky. * Zaroven prenastavuje statusBar. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ protected abstract void refresh() throws FileNotFoundException, NotBoundException, RemoteException; /** * Metoda kontrolujici spravnost vyplnenych udaju. * * @return Vraci index urcujici vstupni komponentu, ktera obsahuje * neplatny vstup. */ protected abstract int isValidInput(); /** * Metoda inicializujici tabulku. */ protected abstract void initTable(); /** * Metoda aktualizuje tabulku. * * @throws java.rmi.RemoteException * @throws java.rmi.NotBoundException * @throws java.io.FileNotFoundException */ protected abstract void refreshTable() throws FileNotFoundException, NotBoundException, RemoteException; /** * Metoda cisti vsechny vstupni formulare, formular pro datum nastavuje na * aktualni datum a u comboBoxu nastavuje aktualni vybranou polozku na * prvni polozku daneho comboBoxu. */ protected abstract void clearFields(); }