Menu dinámico en función de si el usuario está logeado o no.

This commit is contained in:
mgarcianun
2019-12-04 00:11:01 +01:00
parent d7d214f1e9
commit be46189d97
5 changed files with 159 additions and 50 deletions

View File

@@ -15,7 +15,7 @@
<from-outcome>AddPatient</from-outcome>
<to-view-id>/profile/AddPatient.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<navigation-case>
<from-outcome>AddFamilyDoctor</from-outcome>
<to-view-id>/profile/AddFamilyDoctor.xhtml</to-view-id>
</navigation-case>
@@ -51,12 +51,16 @@
<from-outcome>UpdatePatient</from-outcome>
<to-view-id>/profile/UpdatePatient.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>UpdateProfile</from-outcome>
<to-view-id>/profile/UpdateProfile.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>changecap</from-outcome>
<to-view-id>/profile/ChangePrimaryHealthCareCenter.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>MedicalTests</from-outcome>
<from-outcome>AddMedicalTest</from-outcome>
<to-view-id>/medicaltest/MedicalTests.xhtml</to-view-id>
</navigation-case>
<navigation-case>
@@ -64,8 +68,44 @@
<to-view-id>/visit/VisitView.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>ManageSpecialties</from-outcome>
<from-outcome>ManageCAPs</from-outcome>
<to-view-id>/systemAdmin/ManageSpecialties.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>ManageMedicalSpecialties</from-outcome>
<to-view-id>/systemAdmin/ManageSpecialties.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>AddUserAdmin</from-outcome>
<to-view-id>/systemAdmin/ManageSpecialties.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>ScheduleVisit</from-outcome>
<to-view-id>/visit/VisitView.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>QueryVisit</from-outcome>
<to-view-id>/visit/VisitView.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>MedicaltestManage</from-outcome>
<to-view-id>/mdicaltest/MedicalTests.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>QueryDoctorBySpecialty</from-outcome>
<to-view-id>/mdicaltest/MedicalTests.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>ListDoctorsbySpecialty</from-outcome>
<to-view-id>/mdicaltest/MedicalTests.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>AskQuestion</from-outcome>
<to-view-id>/mdicaltest/MedicalTests.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>AnswerQuestion</from-outcome>
<to-view-id>/mdicaltest/MedicalTests.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>

View File

@@ -12,14 +12,19 @@
</h:head>
<h:outputScript>
function handleLoginRequest(xhr, status, args) {
$('#loginSpin').slideUp();
if(args.validationFailed || !args.loggedIn) {
PF('dlgLogin').jq.effect("shake", {times:5}, 100);
}
else {
PF('dlgLogin').hide();
$('#loginLink').fadeOut();
}
}
function showSpinner() {
$('#loginSpin').slideDown();
}
</h:outputScript>
<h:body>
<div id="layout">
@@ -29,10 +34,11 @@
</div>
<hr />
<div id="menuDiv">
<h:form>
<h:form id="frmMenu">
<p:growl id="messages" sticky="true" showDetail="true" life="3000" />
<p:menubar>
<p:menubar model="#{menuView.model}">
<p:menuitem label="Home" icon="pi pi-home" outcome="home" />
<p:submenu label="Administración del sistema" icon="pi pi-briefcase">
<p:menuitem value="Gestionar especialidades" icon="pi pi-briefcase" action="#{menuView.goManageSpecialties}" />
@@ -81,14 +87,14 @@
<p:dialog header="Acceder al sistema" widgetVar="dlgLogin" resizable="false">
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="username" value="Username:" />
<p:inputText id="username" value="#{loginView.username}" required="true" label="username" />
<p:inputText id="username" value="#{loginView.username}" />
<h:outputLabel for="password" value="Password:" />
<p:password id="password" value="#{loginView.password}" required="true" label="password" />
<p:password id="password" value="#{loginView.password}" />
<f:facet name="footer">
<p:commandButton value="Login" update="messages" icon="pi pi-user" action="#{loginView.login}" oncomplete="handleLoginRequest(xhr, status, args)" />
<i class="pi pi-spin pi-spinner hide" style="font-size: 3em"></i>
<p:commandButton value="Login" update="messages" icon="pi pi-user" action="#{loginView.login}" onstart="showSpinner()" oncomplete="handleLoginRequest(xhr, status, args)" />
<i id="loginSpin" class="pi pi-spin pi-spinner hide" style="font-size: 3em"></i>
</f:facet>
</h:panelGrid>
</p:dialog>

View File

@@ -42,21 +42,7 @@ public class PrimaryHealthCareCenterTO implements Serializable {
public void setLocation(String description) {
this.location = description;
}
@Override
public boolean equals(Object other) {
return (other instanceof PrimaryHealthCareCenterTO) && (name != null)
? name.equals(((PrimaryHealthCareCenterTO) other).getName())
: (other == this);
}
@Override
public int hashCode() {
return (name != null)
? (this.getClass().hashCode() + name.hashCode())
: super.hashCode();
}
@Override
public String toString() {
return String.format("%s[name=%s]", getClass().getSimpleName(), getName());

View File

@@ -1,5 +1,6 @@
package managedbean.common;
import java.awt.MenuItem;
import java.io.Serializable;
import javax.annotation.PostConstruct;
@@ -10,49 +11,115 @@ import javax.inject.Named;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSeparator;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;
import org.primefaces.model.menu.Submenu;
/**
*
* @author Marcos García Núñez (mgarcianun@uoc.edu)
*
*/
@Named("menuView")
@RequestScoped
public class MenuMBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private MenuModel model;
@PostConstruct
public void init() {
model = new DefaultMenuModel();
DefaultMenuItem item;
DefaultSubMenu subMenu;
// First submenu
DefaultSubMenu firstSubmenu = new DefaultSubMenu("Dynamic submenu");
DefaultMenuItem item = new DefaultMenuItem("External", "", "www.google.com");
// item.setUrl("www.google.com");
firstSubmenu.getElements().add(item);
model.addElement(createMenuItem("Home", "pi pi-home", "home", null));
model.getElements().add(firstSubmenu);
if (SessionUtils.isLogedIn() == true) {
// Second submenu
DefaultSubMenu secondSubmenu = new DefaultSubMenu("Dynamic Actions");
// Administracion Sistema
// TODO: mostrar este menú solo si el usuario es administrador
if (1 == 1) {
subMenu = new DefaultSubMenu("Administración del sistema", "pi pi-settings");
subMenu.addElement(createMenuItem("Esp. médicas", "pi pi-calendar", "ManageMedicalSpecialties", null));
subMenu.addElement(createMenuItem("Centros At. Primaria", "pi pi-briefcase", "ManageCAPs", null));
subMenu.addElement(new DefaultSeparator());
subMenu.addElement(createMenuItem("Añadir usuario Admin", "pi pi-calendar", "AddUserAdmin", null));
model.addElement(subMenu);
}
item = new DefaultMenuItem("Save", "pi pi-save");
item.setCommand("#{menuView.save}");
item.setUpdate("messages");
secondSubmenu.getElements().add(item);
// Visitas
// TODO: mostrar este menú solo si el usuario es paciente
if (1 == 1) {
subMenu = new DefaultSubMenu("Visitas", "pi pi-calendar");
subMenu.addElement(createMenuItem("Agendar", "pi pi-calendar", "ScheduleVisit", null));
subMenu.addElement(createMenuItem("Consultar", "pi pi-briefcase", "QueryVisit", null));
model.addElement(subMenu);
}
item = new DefaultMenuItem("Delete", "pi pi-times");
item.setCommand("#{menuView.delete}");
item.setAjax(false);
secondSubmenu.getElements().add(item);
// Pruebas médicas
// TODO: mostrar este menú solo si el usuario es medico // etc...
if (1 == 1) {
item = new DefaultMenuItem("Redirect", "pi pi-search");
item.setCommand("#{menuView.redirect}");
secondSubmenu.getElements().add(item);
subMenu = new DefaultSubMenu("Pruebas Medicas", "pi pi-clone");
subMenu.addElement(createMenuItem("Añadir", "pi pi-clone", "AddMedicalTest", null));
subMenu.addElement(createMenuItem("Gestionar", "pi pi-briefcase", "MedicaltestManage", null));
subMenu.addElement(new DefaultSeparator());
subMenu.addElement(createMenuItem("Consultar médicos pro esp.", "pi pi-search", "QueryDoctorBySpecialty", null));
subMenu.addElement(new DefaultSeparator());
subMenu.addElement(createMenuItem("Listar médicos", "pi pi-list", "ListDoctorsbySpecialty", null));
model.addElement(subMenu);
}
model.getElements().add(secondSubmenu);
// Preguntas
// TODO: mostrar este menú solo si el usuario es paciente o medico
if (1 == 1) {
subMenu = new DefaultSubMenu("Preguntas", "pi pi-clone");
// TODO: Si es paciente puede preguntar
if (true == true)
subMenu.addElement(createMenuItem("Añadir pregunta", "pi pi-clone", "AskQuestion", null));
// TODO: Si es medico de familia puede responder
if (true == true)
subMenu.addElement(createMenuItem("Responder pregunta", "pi pi-question", "AnswerQuestion", null));
model.addElement(subMenu);
}
}
// Perfil
subMenu = new DefaultSubMenu("Gestionar perfil", "pi pi-id-card");
if (SessionUtils.isLogedIn() == false) {
subMenu.addElement(createMenuItem("Registro de usuario", "pi pi-id-card", "RegisterUser", null));
subMenu.addElement(createMenuItem("Registro de paciente", "pi pi-id-card", "AddPatient", null));
subMenu.addElement(createMenuItem("Registro de médico", "pi pi-id-card", "AddFamilyDoctor", null));
subMenu.addElement(createMenuItem("Registro de especialista", "pi pi-id-card", "AddFamilyDoctor", null));
subMenu.addElement(createMenuItem("Registro de médico", "pi pi-id-card", "AddSpecialistDoctor", null));
subMenu.addElement(new DefaultSeparator());
} else {
subMenu.addElement(createMenuItem("Actualizar mi perfil", "pi pi-search", "UpdateProfile", null));
subMenu.addElement(new DefaultSeparator());
// TODO: mostrar este menú solo si el usuario es paciente
if (true == true) {
subMenu.addElement(createMenuItem("Cambiar médico de familia", "pi pi-search", "ChangeFamilyDoctor", null));
subMenu.addElement(new DefaultSeparator());
}
// TODO: mostrar este menú solo si el usuario es médico de familia
if (true == true)
subMenu.addElement(createMenuItem("Cambiar centro de atención", "pi pi-search", "changecap", null));
}
model.addElement(subMenu);
}
private DefaultMenuItem createMenuItem(String name, String icon, String outcome, String command) {
DefaultMenuItem item = new DefaultMenuItem(name, icon);
if (outcome != null)
item.setOutcome(outcome);
if (command != null)
item.setCommand(command);
return item;
}
public MenuModel getModel() {

View File

@@ -3,7 +3,6 @@ package managedbean.systemAdmin;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpSession;
@@ -35,16 +34,25 @@ public class LoginMBean {
this.password = password;
}
public void login() {
public String login() {
FacesMessage message = null;
boolean loggedIn = false;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (username != null && username.equals("admin") && password != null && password.equals("admin")) {
loggedIn = true;
HttpSession session = SessionUtils.getSession();
session.setAttribute("username", username);
session.setAttribute("userid", "1");
message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bienvenido", username);
return ("home");
} else {
loggedIn = false;
message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Loggin Error", "El usuario o la contraseña son incorrectos");
@@ -52,6 +60,8 @@ public class LoginMBean {
FacesContext.getCurrentInstance().addMessage(null, message);
PrimeFaces.current().ajax().addCallbackParam("loggedIn", loggedIn);
return "";
}
// logout event, invalidate session