/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cz.cvut.fel.restauracefel.restauracefel.Controller;
import cz.cvut.fel.restauracefel.library.model.CommonModelController;
import cz.cvut.fel.restauracefel.library.Enums.EnumLoginResult;
import cz.cvut.fel.restauracefel.library.controller.CommonController;
import cz.cvut.fel.restauracefel.restauracefel.gui.ViewController;
import cz.cvut.fel.restauracefel.library.interfaces.IModuleInteface;
import cz.cvut.fel.restauracefel.manager.ManagerController.ManagerController;
import cz.cvut.fel.restauracefel.pokladna.PokladnaController.PokladnaController;
import cz.cvut.fel.restauracefel.smeny.SmenyController.SmenyController;
import cz.cvut.fel.restauracefel.storage.storageController.StorageController;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.UIManager;
import org.jvnet.substance.skin.SubstanceOfficeSilver2007LookAndFeel;
/**
*
* @author Lukáš Viezán
*/
public class Controller implements IModuleInteface {
private static final Controller instance = new Controller();
private CommonModelController model;
private ViewController view;
private final CommonController commonController;
/**
* Privátní konstruktor třídy Controller, součást návrhového vzoru singlethon
*/
private Controller() {
model = CommonModelController.getInstance();
view = ViewController.getInstance();
commonController = CommonController.getInstance();
}
/**
* Součást návrhového vzoru singlethon
* @return Vrací instanci třídy Controller společnou pro celou aplikaci
*/
public static Controller getInstance() {
return instance;
}
/**
* Spustí aplikaci a zobrazí základní přihlašovací okno
*/
public void run() {
// Nastavení defaultního vzhledu JFrame podle knihovny LookAndFeelDecorated
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(new SubstanceOfficeSilver2007LookAndFeel());
UIManager.put("ScrollBar.width", 32);
} catch (Exception e) {
System.out.println("Substance Raven Graphite failed to initialize");
}
// Vytvoření a zobrazení hlavního přihlašovacího okna
view.run();
}
});
}
/**
* Otestuje přihlašovací údaje zadané uživatelem
* @param username - Zadané uživatelské jméno typu String
* @param password - Zadané uživatelské heslo typu String
* @return Vrací výsledek přihlašování v datovém typu EnumLoginResult umístěném ve FELLibrary
*/
public EnumLoginResult login(String username, String password, String requestedRight) {
EnumLoginResult result = commonController.login(username, password, requestedRight);
if (result == EnumLoginResult.LoginSuccesful && requestedRight == null) {
view.showUserGate(model.getLoggedUser().getUsername());
}
return result;
}
/**
* Odhlásí aktuálně přuhlášeného uživatele
*/
public void logout() {
model.setLoggedUser(null);
}
/**
* Zobrazí modul pokladny, pokud již není zobrazen
*/
public void showPokladna() {
if (!PokladnaController.getInstance().isActive()) {
PokladnaController.getInstance().run(model.getLoggedUser(), model.getRights());
}
}
/**
* Zobrazí modul manager na obrazovku, pokud již není zobrazen
*/
public void showManager() {
if (!ManagerController.getInstance().isActive()) {
ManagerController.getInstance().run(model.getLoggedUser(), model.getRights());
}
}
/**
* Zobrazí modul storage na obrazovku, pokud již není zobrazen
*/
public void showStorage() {
if (!StorageController.getInstance().isActive()) {
StorageController.getInstance().run(model.getLoggedUser(), model.getRights());
}
}
/**
* Zobrazí modul smeny, pokud již není zobrazen
*/
public void showSmeny() {
if (!SmenyController.getInstance().isActive()) {
SmenyController.getInstance().run(model.getLoggedUser(), model.getRights());
}
}
/**
*
* @return Vrací instanci vrstvy Model
*/
public CommonModelController getModel() {
return model;
}
/**
* Metoda pro zjištění, zda aktuálně přihlášený uživatel má potřebné oprávnění
* @param right požadované oprávnění od uživatele
* @return
*/
public boolean hasRights(String right) {
return model.hasRights(right);
}
@Override
public boolean isActive() {
return true;
}
}