package cz.cvut.fel.restauracefel.smeny.smeny_gui; import cz.cvut.fel.restauracefel.hibernate.User; import cz.cvut.fel.restauracefel.library.service.ConfigParser; import cz.cvut.fel.restauracefel.library.view.CommonViewController; import cz.cvut.fel.restauracefel.smeny.SmenyController.SmenyController; 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.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JOptionPane; /** * Hlavní okno aplikace. * * @author Martin Kosek */ public class MainFrame extends JFrame { public static User loggedUser = null; public static String[] rights = null; private Container con = null; private ToolBar toolBar = new ToolBar(); public BackroundPane panel = null; private static StatusBar statusBar = new StatusBar(); private String title = null; protected static CreateShiftForm createShiftForm = null; protected static CreateTemplateForm createTemplateForm = null; protected static WorkShiftPlanForm workShiftPlanForm = null; protected static StatisticsForm statisticsForm = null; protected static OverviewLeaderShiftForm overViewShiftForm = null; protected static InformationForm informationForm = null; protected static OverviewEmployeeShiftForm overViewEmplForm = null; private SmenyViewController view = null; private CommonViewController commonViewController; public MainFrame( //User user, String[] prava ) { loggedUser = SmenyController.getInstance().user; rights = SmenyController.getInstance().prava; if (loggedUser == null) { System.exit(0); } String userName = loggedUser.getUsername(); this.title = "Restaurace FEL - Modul směn, přihlášený uživatel: " + userName; this.setTitle(title); initComponents(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); view = SmenyViewController.getInstance(); commonViewController = CommonViewController.getInstance(); } /** * Metoda inicializuje okno a jeho komponenty. Vola metodu pro vytvoreni * hlavniho menu. */ private void initComponents() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int w = (int) dim.getWidth(); int h = (int) dim.getHeight(); int y = (int) ((dim.getHeight() - h) / 2); int x = (int) ((dim.getWidth() - w) / 2); this.setBounds(x, y, w, h); this.setVisible(true); this.setMinimumSize(new Dimension(1280, 720)); //this.setSize(new Dimension(1280, 720)); con = this.getContentPane(); con.setLayout(new BorderLayout()); panel = new BackroundPane(); this.createToolBar(); setRights(); } /** * Metoda pro prirazeni listeneru jednotlivym tlacitkam v toolbaru */ private void createToolBar() { toolBar.close.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { closeAction(); } }); toolBar.addTypeWorkShift.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadForm(EnumChooseForm.ADD_TYPE_WORKSHIFT); } }); toolBar.addTemplate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadForm(EnumChooseForm.ADD_TEMPLATE); } }); toolBar.planOfShifts.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadForm(EnumChooseForm.PLAN_OF_SHIFTS); } }); //TODO - imlementovat statistiku - export dat toolBar.statistics.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadForm(EnumChooseForm.STATISTICS_FORM); } }); toolBar.overviewEmpShift.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadForm(EnumChooseForm.OVERVIEW_EMPLOYEE_SHIFT); } }); toolBar.overviewShift.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadForm(EnumChooseForm.OVERVIEW_LEADER_SHIFT); } }); toolBar.information.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadForm(EnumChooseForm.INFORMATION); } }); refreshWindowLayout(); } /** * Metoda obnovujici design. Pridava do JFrame jednotlive panely. */ public void refreshWindowLayout() { con.add(toolBar, BorderLayout.NORTH); con.add(panel, BorderLayout.CENTER); con.add(statusBar, BorderLayout.SOUTH); setVisible(true); } /** * Metoda pro prijeti nebo odmitnuti pristupu k danym funkcim * Pokud mnozina pristupovych prav neobsahuje odpovidajici retezec nastavi tlacitko pro danou funkci na disabled. */ public void setRights() { /* if (!contains("Tvorba nového účtu")) toolBar.createAccount.setEnabled(false); if (!contains("Přehled účtů")) toolBar.accountList.setEnabled(false); if (!contains("Tvorba nové objednávky")) toolBar.createOrder.setEnabled(false); if (!contains("Placení objednávek")) toolBar.payAccount.setEnabled(false); if (!contains("Přesun objednávek")) toolBar.moveMenuItems.setEnabled(false); if (!contains("Tvorba nového zákazníka")) toolBar.createCustomer.setEnabled(false); if (!contains("Tvorba nové slevy")) toolBar.createDiscount.setEnabled(false); if (!contains("Přiřazení slevy osobám a rolím")) toolBar.grantDiscount.setEnabled(false); if (!contains("Tvorba nové kategorie účtů")) toolBar.createAccountCategory.setEnabled(false); */ } /** * Metoda pro hledani retezce v poli nazvu pristupovych prav * * @param name hledany retezec */ public boolean contains(String name) { if (rights == null) { return false; } for (int i = 0; i < rights.length; i++) { if (rights[i].equals(name)) { return true; } } return false; } /** * Akce ukonci beh programu */ private void closeAction() { int x = JOptionPane.showConfirmDialog(null, "Opravdu ukončit modul směn?", "Konec", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (x == 0) { this.dispose(); } } /** * Metoda pro zobrazeni vybraneho formulare v hlavnim JFrame. * * @param form cislo zvoleneho formulare */ public void loadForm(EnumChooseForm form) { AbstractForm af = null; try { switch (form) { case ADD_TYPE_WORKSHIFT: if (!contains("Tvorba nového typu směny")) { if (!commonViewController.performBaseAdditionalLogin(this, "Tvorba nového typu směny")) { return; } } af = createShiftForm; if (af == null) { af = new CreateShiftForm(this, statusBar); } else { af.refresh(); } break; case ADD_TEMPLATE: if (!contains("Tvorba nového templatu")) { if (!commonViewController.performBaseAdditionalLogin(this, "Tvorba nového typu směny")) { return; } } af = createTemplateForm; if (af == null) { af = new CreateTemplateForm(this, statusBar); } else { af.refresh(); } break; case PLAN_OF_SHIFTS: if (!contains("Tvorba plánu směn")) { if (!commonViewController.performBaseAdditionalLogin(this, "Tvorba plánu směn")) { return; } } af = workShiftPlanForm; af = new WorkShiftPlanForm(this, statusBar); break; case STATISTICS_FORM: af = statisticsForm; af = new StatisticsForm(this, statusBar); break; case OVERVIEW_LEADER_SHIFT: if (!contains("Přehled směn - vedoucí")) { if (!commonViewController.performBaseAdditionalLogin(this, "Přehled směn - vedoucí")) { return; } } af = overViewShiftForm; if (af == null) { af = new OverviewLeaderShiftForm(this, statusBar); } else { af.refresh(); } break; case INFORMATION: af = informationForm; if (af == null) { af = new InformationForm(this, statusBar); } else { af.refresh(); } break; case OVERVIEW_EMPLOYEE_SHIFT: if (!contains("Přehled směn zaměstnanec")) { if (!commonViewController.performBaseAdditionalLogin(this, "Přehled směn zaměstnanec")) { return; } } af = overViewEmplForm; if (af == null) { af = new OverviewEmployeeShiftForm(this, statusBar); } else { af.refresh(); } break; default: return; } } catch (FileNotFoundException fnfe) { JOptionPane.showMessageDialog(null, "Konfigurační soubor \"" + ConfigParser.getConfigFile() + "\" nebyl nalezen.", "Chyba", JOptionPane.ERROR_MESSAGE); return; } catch (Exception ex) { ex.printStackTrace(); try { PrintWriter vystup = new PrintWriter(new FileWriter("log-chyb.txt")); StackTraceElement[] el = ex.getStackTrace(); for (StackTraceElement els : el) { vystup.println(els.toString()); } vystup.println(ex.getMessage()); vystup.close(); } catch (IOException ex1) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex1); } JOptionPane.showMessageDialog(null, "Nelze navázat spojení se serverem.", "Chyba komunikace", JOptionPane.ERROR_MESSAGE); return; } // panel.removeAll(); panel.getViewport().add(af); panel.repaint(); panel.validate(); refreshWindowLayout(); } /** * Klasicke Ano/Ne potvrzovací okno * @param text Popis * @param title * @return 0, pokud klikne na ano */ public int showConfirmDialogStandard(String text, String title) { return JOptionPane.showConfirmDialog(this, text, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); } public void showMessageDialogInformation(String message, String title) { JOptionPane.showMessageDialog(this, message, title, JOptionPane.INFORMATION_MESSAGE); } }