mx.com.tutosoftware.medicalconsulting.repository

Ahora creamos el repositorio donde vamos a explotar nuestros datos de mongodb creamos el paquete mx.com.tutosoftware.medicalconsulting.repository y en este paquete creamos una Interface ProfesionalRepository que extienda de PagingAndSortingRepository
  package mx.com.tutosoftware.medicalconsulting.repository;

import java.util.List;

import org.springframework.data.repository.PagingAndSortingRepository;

import mx.com.tutosoftware.medicalconsulting.domain.Profesional;

public interface ProfesionalRepository extends PagingAndSortingRepository<Profesional,String> {
	
	List<Profesional> findByMail(String mail);
    public void agregarProfesional(Profesional p);
    List<Profesional> mostrarProfesionales();
    public void actualizarProfesional(Profesional p);
    public void eliminarProfesional(Profesional p);

}
  
  
  
En este mismo paquete creamos la Interface PacienteRepository tambien que extienda o herede de PagingAndSortingRepository
             
 package mx.com.tutosoftware.medicalconsulting.repository;

import java.util.List;

import org.springframework.data.repository.PagingAndSortingRepository;

import mx.com.tutosoftware.medicalconsulting.domain.Paciente;

public interface PacienteRepository extends PagingAndSortingRepository<Paciente,String> {
	
    List<Paciente> findByMail(String mail);
    public void agregarPaciente(Paciente p);
    List<Paciente> mostrarPacientes();
    public void actualizarPaciente(Paciente p);
    public void eliminarPaciente(Paciente p);

}             
              
  
Creamos la Interface TurnoRepositorytambien que extienda o herede de PagingAndSortingRepository
 
  package mx.com.tutosoftware.medicalconsulting.repository;

import java.util.List;

import org.springframework.data.repository.PagingAndSortingRepository;

import mx.com.tutosoftware.medicalconsulting.domain.Turno;



public interface TurnoRepository extends PagingAndSortingRepository<Turno,String> {
	
	public void agregarTurno(Turno t);
	List<Turno> mostrarTurnos(String dni);
	public List<Turno> mostrarTurnoFechaMayorHoyDni (String dni);

}
  
  
  
  
  
  
  
Creamos la Interface CitaRepositorytambien que extienda o herede de PagingAndSortingRepository
 
 package mx.com.tutosoftware.medicalconsulting.repository;

import java.util.Date;
import java.util.List;

import org.springframework.data.repository.PagingAndSortingRepository;

import mx.com.tutosoftware.medicalconsulting.domain.Cita;



public interface CitaRepository extends PagingAndSortingRepository<Cita,String> {
	
	
	public void agregarCita(Cita c);
	public List<Cita> busquedaCitaHorarioDni(Date horarioInicio,Date horarioFinal,String dni);
	public void actualizarCita(Cita c);
	public List<Cita> mostrarCitasAgendadas(String dni,String nombrePaciente);
	public List<Cita> mostrarCitasAgendadas(String nombrePaciente);
	public List<Cita> busquedaCitas(Date horarioInicio,Date horarioFinal,String dni);
}
  
  
  
  
Lo que sigue es crear las implementaciones agregamos el paquete mx.com.tutosoftware.medicalconsulting.repository.impl aqui creamos la clase ProfesionalRepositoryImpl y implemente la interface ProfesionalRepository
  
  package mx.com.tutosoftware.medicalconsulting.repository.impl;

import java.util.List;
import java.util.Optional;

import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import mx.com.tutosoftware.medicalconsulting.domain.Profesional;
import mx.com.tutosoftware.medicalconsulting.repository.ProfesionalRepository;

public class ProfesionalRepositoryImpl implements ProfesionalRepository {
	
	@Autowired
	private MongoTemplate mongoTemplate;

	@Override
	public Iterable<Profesional> findAll(Sort sort) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Page<Profesional> findAll(Pageable pageable) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <S extends Profesional> S save(S entity) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <S extends Profesional> Iterable<S> saveAll(Iterable<S> entities) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Optional<Profesional> findById(String id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean existsById(String id) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Iterable<Profesional> findAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Iterable<Profesional> findAllById(Iterable<String> ids) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long count() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void deleteById(String id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void delete(Profesional entity) {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteAll(Iterable<? extends Profesional> entities) {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteAll() {
		// TODO Auto-generated method stub

	}

	@Override
	public List<Profesional> findByMail(String mail) {
		// TODO Auto-generated method stub
       Query query = new Query();
		
		Criteria c = Criteria.where("mail").is(mail);
		query.addCriteria(c);
		
		return mongoTemplate.find(query, Profesional.class);
	}

	@Override
	public void agregarProfesional(Profesional p) {
		// TODO Auto-generated method stub
		mongoTemplate.save(p,"profesional");

	}

	@Override
	public List<Profesional> mostrarProfesionales() {
		// TODO Auto-generated method stub
		return mongoTemplate.findAll(Profesional.class);
	}

	@Override
	public void actualizarProfesional(Profesional p) {
		// TODO Auto-generated method stub
		Query query = new Query(Criteria.where("dni").is(p.getDni()));
		Document doc = new Document();
		mongoTemplate.getConverter().write(p,doc);
		Update update = Update.fromDocument(doc);
		mongoTemplate.upsert(query, update, "profesional");

	}

	@Override
	public void eliminarProfesional(Profesional p) {
		// TODO Auto-generated method stub
        Query query = new Query();
		query.addCriteria(Criteria.where("dni").is(p.getDni()));
		mongoTemplate.remove(query,"profesional");

	}

}
  
  
  
  
   
Creamos la clase PacienteRepositoryImpl que implamente de PacienteRepository
  package mx.com.tutosoftware.medicalconsulting.repository.impl;

import java.util.List;
import java.util.Optional;

import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import mx.com.tutosoftware.medicalconsulting.domain.Paciente;
import mx.com.tutosoftware.medicalconsulting.repository.PacienteRepository;

public class PacienteRepositoryImpl implements PacienteRepository {
	
	
	@Autowired
	private MongoTemplate mongoTemplate;
	

	@Override
	public Iterable<Paciente> findAll(Sort sort) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Page<Paciente> findAll(Pageable pageable) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <S extends Paciente> S save(S entity) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <S extends Paciente> Iterable<S> saveAll(Iterable<S> entities) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Optional<Paciente> findById(String id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean existsById(String id) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Iterable<Paciente> findAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Iterable<Paciente> findAllById(Iterable<String> ids) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long count() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void deleteById(String id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void delete(Paciente entity) {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteAll(Iterable<? extends Paciente> entities) {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteAll() {
		// TODO Auto-generated method stub

	}

	@Override
	public List<Paciente> findByMail(String mail) {
		// TODO Auto-generated method stub
		 Query query = new Query();
		 Criteria c = Criteria.where("mail").is(mail);
		 query.addCriteria(c);
			
		return mongoTemplate.find(query, Paciente.class);
		
	}

	@Override
	public void agregarPaciente(Paciente p) {
		// TODO Auto-generated method stub
		mongoTemplate.save(p,"paciente");

	}

	@Override
	public List<Paciente> mostrarPacientes() {
		// TODO Auto-generated method stub
		return mongoTemplate.findAll(Paciente.class);
	}

	@Override
	public void actualizarPaciente(Paciente p) {
		// TODO Auto-generated method stub
		Query query = new Query(Criteria.where("dni").is(p.getDni()));
		Document doc = new Document();
		mongoTemplate.getConverter().write(p,doc);
		Update update = Update.fromDocument(doc);
		mongoTemplate.upsert(query, update, "paciente");

	}

	@Override
	public void eliminarPaciente(Paciente p) {
		// TODO Auto-generated method stub
        Query query = new Query();
		query.addCriteria(Criteria.where("dni").is(p.getDni()));
		mongoTemplate.remove(query,"paciente");

	}

}
  
  
  
   
Creamos la clase TurnoRepositoryImpl que implamente de TurnoRepository
  package mx.com.tutosoftware.medicalconsulting.repository.impl;


import java.util.Date;
import java.util.List;
import java.util.Optional;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

import mx.com.tutosoftware.medicalconsulting.domain.Turno;
import mx.com.tutosoftware.medicalconsulting.repository.TurnoRepository;




public class TurnoRepositoryImpl implements TurnoRepository {
	
	@Autowired
	private MongoTemplate mongoTemplate;

	@Override
	public Iterable<Turno> findAll(Sort sort) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Page<Turno> findAll(Pageable pageable) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <S extends Turno> S save(S entity) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <S extends Turno> Iterable<S> saveAll(Iterable<S> entities) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Optional<Turno> findById(String id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean existsById(String id) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Iterable<Turno> findAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Iterable<Turno> findAllById(Iterable<String> ids) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long count() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void deleteById(String id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void delete(Turno entity) {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteAll(Iterable<? extends Turno> entities) {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteAll() {
		// TODO Auto-generated method stub

	}

	@Override
	public void agregarTurno(Turno t) {
		// TODO Auto-generated method stub
		
		mongoTemplate.save(t,"turno");

	}
	
	public List<Turno> mostrarTurnos(String dni){
		
		 Query query = new Query();
			
			Criteria c = Criteria.where("dni").is(dni);
			query.addCriteria(c);
			
			return mongoTemplate.find(query,Turno.class);
		
		
		
	}
	@Override
	public List<Turno> mostrarTurnoFechaMayorHoyDni(String dni){
		Date fechaHoy = new Date();
		
		
		System.out.println("La Fecha de hoy es:"+fechaHoy);
		
		final Query query=new Query();
		
		query.addCriteria(Criteria.where("horarioInicio").gt(fechaHoy).and("dni").is(dni));
	
		return mongoTemplate.find(query,Turno.class);
	}

}
  
  
   
Creamos la clase CitaRepositoryImpl que implamente de CitaRepository
 
  package mx.com.tutosoftware.medicalconsulting.repository.impl;

import java.util.Date;
import java.util.List;
import java.util.Optional;

import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import mx.com.tutosoftware.medicalconsulting.domain.Cita;
import mx.com.tutosoftware.medicalconsulting.repository.CitaRepository;



public class CitaRepositoryImpl implements CitaRepository {
	
	
	@Autowired
	private MongoTemplate mongoTemplate;

	@Override
	public Iterable<Cita> findAll(Sort sort) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Page<Cita> findAll(Pageable pageable) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <S extends Cita> S save(S entity) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <S extends Cita> Iterable<S> saveAll(Iterable<S> entities) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Optional<Cita> findById(String id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean existsById(String id) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Iterable<Cita> findAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Iterable<Cita> findAllById(Iterable<String> ids) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long count() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void deleteById(String id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void delete(Cita entity) {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteAll(Iterable<? extends Cita> entities) {
		// TODO Auto-generated method stub

	}

	@Override
	public void deleteAll() {
		// TODO Auto-generated method stub

	}

	@Override
	public void agregarCita(Cita c) {
		// TODO Auto-generated method stub
		
		mongoTemplate.save(c,"cita");

	}
	
	@Override
	public List<Cita> busquedaCitaHorarioDni(Date horarioInicio,Date horarioFinal,String dni){
		
		final Query query=new Query();
		
	
		query.addCriteria(Criteria.where("horario").gte(horarioInicio).lte(horarioFinal).and("dni").is(dni).and("status").is("Disponible"));
	
		return mongoTemplate.find(query,Cita.class);
		
		
		
	}
	
	@Override
	public void actualizarCita(Cita c) {
		
		
		Query query = new Query(Criteria.where("dni").is(c.getDni()).and("horario").is(c.getHorario()));
		Document doc = new Document();
		mongoTemplate.getConverter().write(c,doc);
		Update update = Update.fromDocument(doc);
		mongoTemplate.upsert(query, update, "cita");
		
	}
	
	public List<Cita> mostrarCitasAgendadas(String dni,String nombrePaciente){
       Date fechaHoy = new Date();
		
		
		System.out.println("La Fecha de hoy es:"+fechaHoy);
		
		final Query query=new Query();
		
		query.addCriteria(Criteria.where("horario").gt(fechaHoy).and("dni").is(dni).and("nombrePaciente").is(nombrePaciente));
	
		return mongoTemplate.find(query,Cita.class);
	}
	
	
	public List<Cita> mostrarCitasAgendadas(String nombrePaciente){
		
    Date fechaHoy = new Date();
		
		
		System.out.println("La Fecha de hoy es:"+fechaHoy);
		
		final Query query=new Query();
		
		query.addCriteria(Criteria.where("horario").gt(fechaHoy).and("nombrePaciente").is(nombrePaciente));
	
		return mongoTemplate.find(query,Cita.class);
		
	}
	
	public List<Cita> busquedaCitas(Date horarioInicio,Date horarioFinal,String dni){
		
		final Query query=new Query();
		
		
		query.addCriteria(Criteria.where("horario").gte(horarioInicio).lte(horarioFinal).and("dni").is(dni));
	
		return mongoTemplate.find(query,Cita.class);
		
	}
	

}
  
  
   

Servicios

Creamos los servicios que vamos a mandar invocar.Creamos el paquete mx.com.tutosoftware.medicalconsulting.service creamos la clase ProfesionalService
              
  package mx.com.tutosoftware.medicalconsulting.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import mx.com.tutosoftware.medicalconsulting.domain.Profesional;
import mx.com.tutosoftware.medicalconsulting.repository.ProfesionalRepository;


@Service
public class ProfesionalService {
	
	@Autowired
	ProfesionalRepository  profesionalRepository;
	
	
	public List<Profesional> obtenerProfesional(String mail) {
		
		
		
		return profesionalRepository.findByMail(mail);
		
	}
	
	
	public void agregarProfesional(Profesional p) {
		System.out.println("Este es servicio save");
		
		profesionalRepository.agregarProfesional(p);
		
	}
	
	
	public List<Profesional> mostrarProfesionales(){
		return profesionalRepository.mostrarProfesionales();
	}
	
	
	public void actualizarProfesional(Profesional p) {
		profesionalRepository.actualizarProfesional(p);
	}
	
	public void eliminarProfesional(Profesional p) {
		profesionalRepository.eliminarProfesional(p);
	}

}
            
   
  
Creamos la clase PacienteService
  package mx.com.tutosoftware.medicalconsulting.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import mx.com.tutosoftware.medicalconsulting.domain.Paciente;
import mx.com.tutosoftware.medicalconsulting.repository.PacienteRepository;



@Service
public class PacienteService {
	
	@Autowired
	PacienteRepository pacienteRepository;
	
	
	public List<Paciente> obtenerPaciente(String email){
		
		return pacienteRepository.findByMail(email);
	}
	
	
	public void agregarPaciente(Paciente p) {
		
		pacienteRepository.agregarPaciente(p);
	}
	
	public List<Paciente> mostrarPacientes(){
		return pacienteRepository.mostrarPacientes();
	}
	
	
	public void actualizarPaciente(Paciente p) {
		pacienteRepository.actualizarPaciente(p);
	}
	
	
	public void eliminarPaciente(Paciente p) {
		pacienteRepository.eliminarPaciente(p);
	}

}
  
  
Creamos la clase TurnoService
  package mx.com.tutosoftware.medicalconsulting.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import mx.com.tutosoftware.medicalconsulting.domain.Turno;
import mx.com.tutosoftware.medicalconsulting.repository.TurnoRepository;



@Service
public class TurnoService {
	
	@Autowired
	TurnoRepository turnoRepository;
	
	
	public void agregarTurno(Turno t) {
		
		turnoRepository.agregarTurno(t);
		
	}
	
	public List<Turno> mostrarTurno(String dni){
		
		return turnoRepository.mostrarTurnos(dni);
	}
	
	public List<Turno> mostrarTurnoFechaMayorHoyDni(String dni){
		return turnoRepository.mostrarTurnoFechaMayorHoyDni(dni);
	}

}
  
  
  
  
Creamos la clase CitaService
  package mx.com.tutosoftware.medicalconsulting.service;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import mx.com.tutosoftware.medicalconsulting.domain.Cita;
import mx.com.tutosoftware.medicalconsulting.repository.CitaRepository;


@Service
public class CitaService {
	
	@Autowired
    CitaRepository citaRepository;
	
	
	public void agregarCita(Cita c) {
		
		citaRepository.agregarCita(c);
		
	}
	
	
	public List<Cita> busquedaCitaHorarioDni(Date horarioInicio,Date horarioFinal,String dni){
		return citaRepository.busquedaCitaHorarioDni(horarioInicio, horarioFinal, dni);
	}
	
	
	public void actualizarCita(Cita c) {
		citaRepository.actualizarCita(c);
	}
	
	
	public List<Cita> mostrarCitasAgendadas(String dni,String nombrePaciente){
		return citaRepository.mostrarCitasAgendadas(dni,nombrePaciente);
	}
	
	public List<Cita> mostrarCitasAgendadas(String nombrePaciente){
		return citaRepository.mostrarCitasAgendadas(nombrePaciente);
	}
	
	public List<Cita> busquedaCitas(Date horarioInicio,Date horarioFinal,String dni){
		
		return citaRepository.busquedaCitas(horarioInicio, horarioFinal, dni);
		
	}
	
	
}
  
Ahora creamos el paquete mx.com.tutosoftware.medicalconsulting.util En este paquete cremos la clase SessionUtils
  package mx.com.tutosoftware.medicalconsulting.util;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class SessionUtils {
	
	public static HttpSession getSession() {
		return (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
	}

	public static HttpServletRequest getRequest() {
		return (HttpServletRequest) FacesContext.getCurrentInstance()
				.getExternalContext().getRequest();
	}

	public static String getUserName() {
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
		return session.getAttribute("username").toString();
	}

	public static String getUserId() {
		HttpSession session = getSession();
		if (session != null)
			return (String) session.getAttribute("userid");
		else
			return null;
	}

}
  
A continuación creamos el paquete mx.com.tutosoftware.medicalconsulting.filter y creamos la clase AuthorizationFilter implenta de la Interfaz Filter
      
 import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebFilter(filterName = "AuthFilter", urlPatterns = { "*.xhtml" })
public class AuthorizationFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		try {

			HttpServletRequest reqt = (HttpServletRequest) request;
			HttpServletResponse resp = (HttpServletResponse) response;
			HttpSession ses = reqt.getSession(false);

			String reqURI = reqt.getRequestURI();
			if (reqURI.indexOf("/index.xhtml") >= 0
					|| (ses != null && ses.getAttribute("username") != null)
					|| reqURI.indexOf("/public/") >= 0
					|| reqURI.contains("javax.faces.resource"))
				chain.doFilter(request, response);
			else
				resp.sendRedirect(reqt.getContextPath() + "/faces/index.xhtml");
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

}          
           
           
           
    

Beans

Creamos un paquete llamado mx.com.tutosoftware.medicalconsulting.bean donde vamos a colocar las clases de Bean o controllers para la vistas.Creamos la clase llamada DashboardView
  
  package mx.com.tutosoftware.medicalconsulting.bean;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;

import org.primefaces.event.CloseEvent;
import org.primefaces.event.DashboardReorderEvent;
import org.primefaces.event.ToggleEvent;
import org.primefaces.model.DashboardColumn;
import org.primefaces.model.DashboardModel;
import org.primefaces.model.DefaultDashboardColumn;
import org.primefaces.model.DefaultDashboardModel;


@ManagedBean
@ViewScoped
public class DashboardView implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
private DashboardModel model;
	
	@PostConstruct
    public void init() {
        model = new DefaultDashboardModel();
        DashboardColumn column1 = new DefaultDashboardColumn();
        DashboardColumn column2 = new DefaultDashboardColumn();
        
         
        column1.addWidget("medico");
       
         
        column2.addWidget("paciente");
        
         
       
 
        model.addColumn(column1);
        model.addColumn(column2);
       
    }
     
    public void handleReorder(DashboardReorderEvent event) {
        FacesMessage message = new FacesMessage();
        message.setSeverity(FacesMessage.SEVERITY_INFO);
        message.setSummary("Reordered: " + event.getWidgetId());
        message.setDetail("Item index: " + event.getItemIndex() + ", Column index: " + event.getColumnIndex() + ", Sender index: " + event.getSenderColumnIndex());
         
        addMessage(message);
    }
     
    public void handleClose(CloseEvent event) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Panel Closed", "Closed panel id:'" + event.getComponent().getId() + "'");
         
        addMessage(message);
    }
     
    public void handleToggle(ToggleEvent event) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, event.getComponent().getId() + " toggled", "Status:" + event.getVisibility().name());
         
        addMessage(message);
    }
     
    private void addMessage(FacesMessage message) {
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
     
    public DashboardModel getModel() {
        return model;
    }

}
  
  
   
Creamos la clase Login
 
 package mx.com.tutosoftware.medicalconsulting.bean;

import java.io.Serializable;
import java.util.List;

//import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import mx.com.tutosoftware.medicalconsulting.domain.Paciente;
import mx.com.tutosoftware.medicalconsulting.domain.Profesional;
import mx.com.tutosoftware.medicalconsulting.service.PacienteService;
import mx.com.tutosoftware.medicalconsulting.service.ProfesionalService;
import mx.com.tutosoftware.medicalconsulting.util.SessionUtils;





@ManagedBean
@SessionScoped
public class Login implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String usuarioMedico;
	private String passwordMedico;
	private String usuarioPaciente;
	private String passwordPaciente;
	private List<Profesional> medico;
	private List<Paciente> pacientes;
	private Profesional profesional;
	private Paciente paciente;
	private String user;
	private String userPaciente;
	
	
	@ManagedProperty(value = "#{profesionalService}")
	ProfesionalService profesionalServicio;
	
	@ManagedProperty(value = "#{pacienteService}")
	PacienteService pacienteServicio;
	
	
	
	public String getUsuarioMedico() {
		return usuarioMedico;
	}
	public void setUsuarioMedico(String usuarioMedico) {
		this.usuarioMedico = usuarioMedico;
	}
	public String getPasswordMedico() {
		return passwordMedico;
	}
	public void setPasswordMedico(String passwordMedico) {
		this.passwordMedico = passwordMedico;
	}
	public String getUsuarioPaciente() {
		return usuarioPaciente;
	}
	public void setUsuarioPaciente(String usuarioPaciente) {
		this.usuarioPaciente = usuarioPaciente;
	}
	public String getPasswordPaciente() {
		return passwordPaciente;
	}
	public void setPasswordPaciente(String passwordPaciente) {
		this.passwordPaciente = passwordPaciente;
	}
	
	
	public ProfesionalService getProfesionalServicio() {
		return profesionalServicio;
	}
	public void setProfesionalServicio(ProfesionalService profesionalServicio) {
		this.profesionalServicio = profesionalServicio;
	}
	
	
	public List<Profesional> getMedico() {
		return medico;
	}
	public void setMedico(List<Profesional> medico) {
		this.medico = medico;
	}
	public Profesional getProfesional() {
		return profesional;
	}
	public void setProfesional(Profesional profesional) {
		this.profesional = profesional;
	}
	public String getUser() {
		return user;
	}
	public void setUser(String user) {
		this.user = user;
	}
	public List<Paciente> getPacientes() {
		return pacientes;
	}
	public void setPacientes(List<Paciente> pacientes) {
		this.pacientes = pacientes;
	}
	public Paciente getPaciente() {
		return paciente;
	}
	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}
	public PacienteService getPacienteServicio() {
		return pacienteServicio;
	}
	public void setPacienteServicio(PacienteService pacienteServicio) {
		this.pacienteServicio = pacienteServicio;
	}
	public String getUserPaciente() {
		return userPaciente;
	}
	public void setUserPaciente(String userPaciente) {
		this.userPaciente = userPaciente;
	}
	public String loginMedico() {
		
		System.out.println("Este es el valor de Medico: "+usuarioMedico);
		
		medico = profesionalServicio.obtenerProfesional(usuarioMedico);
		
		if(medico == null) {
			FacesMessage msg = new FacesMessage("Password o usuario incorrecto",null);  
	        FacesContext.getCurrentInstance().addMessage(null, msg);
			return "index";
		}
		if(medico.get(0).getPassword().equals(passwordMedico)) {
			
			profesional = medico.get(0);
			HttpSession session = SessionUtils.getSession();
			user=medico.get(0).getNombre()+" "+medico.get(0).getApellidoPaterno()+" "+medico.get(0).getApellidoMaterno();
			session.setAttribute("username",user);
			
			return "adminMedico";
		}else {
			FacesMessage msg = new FacesMessage("Password o usuario incorrecto",null);  
	        FacesContext.getCurrentInstance().addMessage(null, msg);  
			return "index";
			
		}
		
	}
	
	
	public String loginPaciente() {
		
    pacientes = pacienteServicio.obtenerPaciente(usuarioPaciente);
		
		if(pacientes == null) {
			FacesMessage msg2 = new FacesMessage("Password o usuario incorrecto",null);  
	        FacesContext.getCurrentInstance().addMessage(null, msg2);  
			
			return "index";
		}
		if(pacientes.get(0).getPassword().equals(passwordPaciente)) {
			
			paciente = pacientes.get(0);
			HttpSession session = SessionUtils.getSession();
			userPaciente=pacientes.get(0).getNombre()+" "+pacientes.get(0).getApellidoPaterno()+" "+pacientes.get(0).getApellidoMaterno();
			session.setAttribute("username",userPaciente);
			
			return "adminPaciente";
		}else {
			FacesMessage msg2 = new FacesMessage("Password o usuario incorrecto",null);  
	        FacesContext.getCurrentInstance().addMessage(null, msg2);  
			return "index";
			
			
		}
		
		
		
		
		
		
	}
	
	//logout event, invalidate session
		public String logout() {
			HttpSession session = SessionUtils.getSession();
			session.invalidate();
			return "index";
		}
}
  
 
Creamos la clase PacienteBean
  
  package mx.com.tutosoftware.medicalconsulting.bean;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.RowEditEvent;

import mx.com.tutosoftware.medicalconsulting.domain.Domicilio;
import mx.com.tutosoftware.medicalconsulting.domain.Paciente;
import mx.com.tutosoftware.medicalconsulting.service.PacienteService;




@ManagedBean
@SessionScoped
@ViewScoped
public class PacienteBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String dni;
	private String nombre;
	private String apellidoPaterno;
	private String apellidoMaterno;
	private String mail;
	private String telefono;
	private String password;
	private String calle;
	private String numero;
	private String colonia;
	private String municipio;
	private String estado;
	private String codigoPostal;
	private List<Paciente> pacientes;
	
	@ManagedProperty(value = "#{pacienteService}")
	PacienteService pacienteServicio;
	
	
	@PostConstruct
	public void init() {
		pacientes=pacienteServicio.mostrarPacientes();
	}
	
	
	

	public String getDni() {
		return dni;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellidoPaterno() {
		return apellidoPaterno;
	}

	public void setApellidoPaterno(String apellidoPaterno) {
		this.apellidoPaterno = apellidoPaterno;
	}

	public String getApellidoMaterno() {
		return apellidoMaterno;
	}

	public void setApellidoMaterno(String apellidoMaterno) {
		this.apellidoMaterno = apellidoMaterno;
	}

	public String getMail() {
		return mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getCalle() {
		return calle;
	}

	public void setCalle(String calle) {
		this.calle = calle;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getColonia() {
		return colonia;
	}

	public void setColonia(String colonia) {
		this.colonia = colonia;
	}

	public String getMunicipio() {
		return municipio;
	}

	public void setMunicipio(String municipio) {
		this.municipio = municipio;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getCodigoPostal() {
		return codigoPostal;
	}

	public void setCodigoPostal(String codigoPostal) {
		this.codigoPostal = codigoPostal;
	}

	public List<Paciente> getPacientes() {
		return pacientes;
	}

	public void setPacientes(List<Paciente> pacientes) {
		this.pacientes = pacientes;
	}

	public PacienteService getPacienteServicio() {
		return pacienteServicio;
	}

	public void setPacienteServicio(PacienteService pacienteServicio) {
		this.pacienteServicio = pacienteServicio;
	}
	
	
	
	public void guardarPaciente() {
		Paciente paciente = new Paciente();
		paciente.setDni(dni);
		paciente.setNombre(nombre);
		paciente.setApellidoPaterno(apellidoPaterno);
		paciente.setApellidoMaterno(apellidoMaterno);
		paciente.setMail(mail);
		paciente.setTelefono(telefono);
		paciente.setPassword(password);
		Domicilio domicilio=new Domicilio();
		domicilio.setCalle(calle);
		domicilio.setColonia(colonia);
		domicilio.setMunicipio(municipio);
		domicilio.setNumero(numero);
		domicilio.setEstado(estado);
		domicilio.setCodigoPostal(codigoPostal);
		paciente.setDomicilio(domicilio);
		
		System.out.println(dni);
		
		
		
		pacienteServicio.agregarPaciente(paciente);
		pacientes=pacienteServicio.mostrarPacientes();
		limpiarFormulario();
		
		
		
		
		
	}
	
	
public void onEdit(RowEditEvent event) {  
		

		
		
		pacienteServicio.actualizarPaciente((Paciente)event.getObject());
		
		FacesMessage msg = new FacesMessage("Paciente Actualizado",((Paciente) event.getObject()).getDni());  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
		
		
		
	}
	
	
	
	public void onCancel(RowEditEvent event) {
		FacesMessage msg = new FacesMessage("Paciente Eliminado",((Paciente) event.getObject()).getDni());  
        FacesContext.getCurrentInstance().addMessage(null, msg); 
		pacienteServicio.eliminarPaciente((Paciente)event.getObject());
		pacientes=pacienteServicio.mostrarPacientes();
		 
		
	}
	
	
	
      public void limpiarFormulario() {
    	
    	dni=" ";
        nombre=" ";
    	apellidoPaterno=" ";
    	apellidoMaterno=" ";
    	mail=" ";
    	telefono=" ";
    	password=" ";
    	calle=" ";
    	numero=" ";
    	colonia=" ";
    	municipio=" ";
    	estado=" ";
        codigoPostal=" ";
    	
    }

}
  
  
  
 
La siguiente clase seria ProfesionalBean
 
 package mx.com.tutosoftware.medicalconsulting.bean;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.RowEditEvent;

import mx.com.tutosoftware.medicalconsulting.domain.Domicilio;
import mx.com.tutosoftware.medicalconsulting.domain.Profesional;
import mx.com.tutosoftware.medicalconsulting.service.ProfesionalService;



@ManagedBean
@SessionScoped
@ViewScoped
public class ProfesionalBean implements Serializable{
	
	private static final long serialVersionUID = 1L;
	private String dni;
	private String nombre;
	private String apellidoPaterno;
	private String apellidoMaterno;
	private String mail;
	private String telefono;
	private String password;
	private String calle;
	private String numero;
	private String colonia;
	private String municipio;
	private String estado;
	private String codigoPostal;
	private List<Profesional> medicos;
	
	
	@ManagedProperty(value = "#{profesionalService}")
	ProfesionalService profesionalServicio;

	
	
	
	@PostConstruct
	public void init() {
		medicos=profesionalServicio.mostrarProfesionales();
	}
	
	
	
	
	public ProfesionalService getProfesionalServicio() {
		return profesionalServicio;
	}
	public void setProfesionalServicio(ProfesionalService profesionalServicio) {
		this.profesionalServicio = profesionalServicio;
	}
	
	
	
	public String getDni() {
		return dni;
	}
	public void setDni(String dni) {
		this.dni = dni;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getApellidoPaterno() {
		return apellidoPaterno;
	}
	public void setApellidoPaterno(String apellidoPaterno) {
		this.apellidoPaterno = apellidoPaterno;
	}
	public String getApellidoMaterno() {
		return apellidoMaterno;
	}
	public void setApellidoMaterno(String apellidoMaterno) {
		this.apellidoMaterno = apellidoMaterno;
	}
	public String getMail() {
		return mail;
	}
	public void setMail(String mail) {
		this.mail = mail;
	}
	public String getTelefono() {
		return telefono;
	}
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getCalle() {
		return calle;
	}
	public void setCalle(String calle) {
		this.calle = calle;
	}
	public String getNumero() {
		return numero;
	}
	public void setNumero(String numero) {
		this.numero = numero;
	}
	public String getColonia() {
		return colonia;
	}
	public void setColonia(String colonia) {
		this.colonia = colonia;
	}
	public String getMunicipio() {
		return municipio;
	}
	public void setMunicipio(String municipio) {
		this.municipio = municipio;
	}
	public String getEstado() {
		return estado;
	}
	public void setEstado(String estado) {
		this.estado = estado;
	}
	public String getCodigoPostal() {
		return codigoPostal;
	}
	public void setCodigoPostal(String codigoPostal) {
		this.codigoPostal = codigoPostal;
	}
	



	public List<Profesional> getMedicos() {
		return medicos;
	}




	public void setMedicos(List<Profesional> medicos) {
		this.medicos = medicos;
	}




	public void guardarProfesional() {
		Profesional profesional = new Profesional();
		profesional.setDni(dni);
		profesional.setNombre(nombre);
		profesional.setApellidoPaterno(apellidoPaterno);
		profesional.setApellidoMaterno(apellidoMaterno);
		profesional.setMail(mail);
		profesional.setTelefono(telefono);
		profesional.setPassword(password);
		Domicilio domicilio=new Domicilio();
		domicilio.setCalle(calle);
		domicilio.setColonia(colonia);
		domicilio.setMunicipio(municipio);
		domicilio.setNumero(numero);
		domicilio.setEstado(estado);
		domicilio.setCodigoPostal(codigoPostal);
		profesional.setDomicilio(domicilio);
		
		System.out.println(dni);
		
		
		
		profesionalServicio.agregarProfesional(profesional);
		medicos=profesionalServicio.mostrarProfesionales();
		limpiarFormulario();
		
		
		
		
		
	}
	
	
	public void onEdit(RowEditEvent event) {  
		

		
		
		profesionalServicio.actualizarProfesional((Profesional)event.getObject());
		
		FacesMessage msg = new FacesMessage("Profesional Actualizado",((Profesional) event.getObject()).getDni());  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
		
		
		
	}
	
	
	
	public void onCancel(RowEditEvent event) {
		FacesMessage msg = new FacesMessage("Profesional Eliminado",((Profesional) event.getObject()).getDni());  
        FacesContext.getCurrentInstance().addMessage(null, msg); 
		profesionalServicio.eliminarProfesional((Profesional)event.getObject());
		medicos=profesionalServicio.mostrarProfesionales();
		 
		
	}
	
	
	
	
	
    public void limpiarFormulario() {
    	
    	dni=" ";
        nombre=" ";
    	apellidoPaterno=" ";
    	apellidoMaterno=" ";
    	mail=" ";
    	telefono=" ";
    	password=" ";
    	calle=" ";
    	numero=" ";
    	colonia=" ";
    	municipio=" ";
    	estado=" ";
        codigoPostal=" ";
    	
    }
	
	
	
	
	
	
	
	
}
 
  
  
  
  
 
La siguiente clase seria TurnoBean
 
   package mx.com.tutosoftware.medicalconsulting.bean;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import mx.com.tutosoftware.medicalconsulting.domain.Cita;
import mx.com.tutosoftware.medicalconsulting.domain.Turno;
import mx.com.tutosoftware.medicalconsulting.service.CitaService;
import mx.com.tutosoftware.medicalconsulting.service.TurnoService;






@ManagedBean
@SessionScoped
@ViewScoped
public class TurnoBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@ManagedProperty(value = "#{login}")
	private Login login;
	@ManagedProperty(value = "#{turnoService}")
	TurnoService turnoService;
	@ManagedProperty(value = "#{citaService}")
	CitaService citaService;
	
	private Date horarioInicio;
	private Date horarioFinal;
	private int duracionConsulta;
	private List<Turno> turnos;
    private List<Cita> pacientes;
	private String dni;
	private Turno turnoDisponible;
	
	@PostConstruct
    public void init() {
		
		turnos=turnoService.mostrarTurno(getDni());
    	
    	
    	
    }
	
	

	public Login getLogin() {
		return login;
	}
	public void setLogin(Login login) {
		this.login = login;
	}
 
    public TurnoService getTurnoService() {
		return turnoService;
	}



	public void setTurnoService(TurnoService turnoService) {
		this.turnoService = turnoService;
	}




	public CitaService getCitaService() {
		return citaService;
	}



	public void setCitaService(CitaService citaService) {
		this.citaService = citaService;
	}



	public String getDni() {
		dni=login.getProfesional().getDni();
		return dni;
	}
	public void setDni(String dni) {
		this.dni = dni;
	}
	
    
	
	



	public Turno getTurnoDisponible() {
		return turnoDisponible;
	}



	public void setTurnoDisponible(Turno turnoDisponible) {
		this.turnoDisponible = turnoDisponible;
	}



	public Date getHorarioInicio() {
		return horarioInicio;
	}



	public void setHorarioInicio(Date horarioInicio) {
		this.horarioInicio = horarioInicio;
	}



	public Date getHorarioFinal() {
		return horarioFinal;
	}



	public void setHorarioFinal(Date horarioFinal) {
		this.horarioFinal = horarioFinal;
	}



	public int getDuracionConsulta() {
		return duracionConsulta;
	}



	public void setDuracionConsulta(int duracionConsulta) {
		this.duracionConsulta = duracionConsulta;
	}



	public List<Turno> getTurnos() {
		return turnos;
	}



	public void setTurnos(List<Turno> turnos) {
		this.turnos = turnos;
	}



	public List<Cita> getPacientes() {
		return pacientes;
	}



	public void setPacientes(List<Cita> pacientes) {
		this.pacientes = pacientes;
	}



	public void guardarTurno() {
		Calendar calendario =Calendar.getInstance(TimeZone.getTimeZone("UTC"));
		
		
		int hora1,hora2,dia,mes,year,dia2,mes2,year2;
		calendario.setTime(horarioInicio);
		hora1=calendario.get(Calendar.HOUR_OF_DAY);
		dia=calendario.get(Calendar.DATE);
		mes=calendario.get(Calendar.MONTH);
		year=calendario.get(Calendar.YEAR);
		
		
		
		System.out.println("Es mes es"+mes);
		
		calendario.setTime(horarioFinal);
		hora2=calendario.get(Calendar.HOUR_OF_DAY);
		dia2=calendario.get(Calendar.DATE);
		mes2=calendario.get(Calendar.MONTH);
		year2=calendario.get(Calendar.YEAR);
		
		
		
		if(dia != dia2  || mes != mes2   || year != year2){
			
			FacesMessage msg = new FacesMessage("Las fechas deben ser iguales",null);  
	        FacesContext.getCurrentInstance().addMessage(null, msg);  
			
		}
		
		
		
		else if(hora1>hora2 || hora1 == hora2) {
			FacesMessage msg = new FacesMessage("La hora1 es mayor que la hora2 o son iguales",null);  
	        FacesContext.getCurrentInstance().addMessage(null, msg);  
			
			
		}
		
		
		else {
		
		
		
		if(duracionConsulta == 15) {
		int duracion = (hora2-hora1)*4;
		int suma=0;
	
		System.out.println("La duracion es:"+duracion);
		for(int i=0;i<duracion;i++) {
			Cita cita = new Cita();
			cita.setDni(dni);
			
			
			cita.setHorario(sumaCita(horarioInicio,suma));
			cita.setNombrePaciente("");
			cita.setStatus("Disponible");
			citaService.agregarCita(cita);
			suma=suma+15;
		}
		
		}
		else if(duracionConsulta==30) {
			
			int duracion = (hora2-hora1)*2;
			int suma=0;
			
			System.out.println("La duracion es:"+duracion);
			for(int i=0;i<duracion;i++) {
				Cita cita = new Cita();
				cita.setDni(dni);
				
				
				cita.setHorario(sumaCita(horarioInicio,suma));
				cita.setNombrePaciente("");
				cita.setStatus("Disponible");
				citaService.agregarCita(cita);
				suma=suma+30;
				}
			
		}else {
			
			int duracion = hora2-hora1;
			int suma=0;
			
			System.out.println("La duracion es:"+duracion);
			for(int i=0;i<duracion;i++) {
				Cita cita = new Cita();
				cita.setDni(dni);
				
				
				cita.setHorario(sumaCita(horarioInicio,suma));
				cita.setNombrePaciente("");
				cita.setStatus("Disponible");
				citaService.agregarCita(cita);
				suma=suma+60;
				}
			
			
		}
		
		
		
		
		
		
		
		Turno turno = new Turno();
		turno.setDni(dni);
		turno.setHorarioInicio(conversorUTC(horarioInicio));
		turno.setHorarioFinal(conversorUTC(horarioFinal));
		turno.setDuracionConsulta(duracionConsulta);
		turnoService.agregarTurno(turno);
		turnos=turnoService.mostrarTurno(dni);
		limpiarFormulario();
		
		
		}
		
	}
	
	
	
	
	
	
	
	
	public Date conversorUTC(Date fecha) {
		//En Mexico es UTC-6 y mongodb guarda en UTC Hay que restar 6 horas
		Calendar calendar=Calendar.getInstance(TimeZone.getTimeZone("UTC"));
	    calendar.setTime(fecha);
	    
	    return calendar.getTime();
		
		
		
		
	}
	
	public Date sumaCita(Date fecha,int duracion) {
		
		Calendar calendar=Calendar.getInstance();
	    calendar.setTime(fecha);
		calendar.add(Calendar.MINUTE,duracion);
		return calendar.getTime();
	}
	
	
	public void mostrarPacientes() {
		System.out.println("Estoy haciendo el evento");
		pacientes=citaService.busquedaCitas(turnoDisponible.getHorarioInicio(),turnoDisponible.getHorarioFinal(),turnoDisponible.getDni());
	}
	
	
	
	
	
	public void limpiarFormulario() {
		horarioInicio=null;
		horarioFinal=null;
	}
	
       
}
   
  
 
La siguiente clase seria AgendaBean
 
 package mx.com.tutosoftware.medicalconsulting.bean;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

import mx.com.tutosoftware.medicalconsulting.domain.Cita;
import mx.com.tutosoftware.medicalconsulting.domain.Profesional;
import mx.com.tutosoftware.medicalconsulting.domain.Turno;
import mx.com.tutosoftware.medicalconsulting.service.CitaService;
import mx.com.tutosoftware.medicalconsulting.service.ProfesionalService;
import mx.com.tutosoftware.medicalconsulting.service.TurnoService;



@ManagedBean
@SessionScoped
@ViewScoped
public class AgendaBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
    private List<Profesional> medicos;
    private List<Turno> turnos;
    private List<Cita> horarios;
    private List<Cita> citasAgendadas;
    
    
    
	
     @ManagedProperty(value = "#{profesionalService}")
	ProfesionalService profesionalServicio;
     
     @ManagedProperty(value = "#{turnoService}")
 	TurnoService turnoService; 
     
     @ManagedProperty(value = "#{citaService}")
 	CitaService citaService;
     
    
     
     private String dni;
     private String nombrePaciente;
     private Turno horario;
     private Date horarioInicio;
     private boolean medicoDiseable = false;
     
     @PostConstruct
 	public void init() {
 		medicos=profesionalServicio.mostrarProfesionales();
 	}
     
     
     
     

	public List<Profesional> getMedicos() {
		return medicos;
	}

	public void setMedicos(List<Profesional> medicos) {
		this.medicos = medicos;
	}

	public List<Turno> getTurnos() {
		return turnos;
	}





	public void setTurnos(List<Turno> turnos) {
		this.turnos = turnos;
	}





	public List<Cita> getHorarios() {
		return horarios;
	}





	public void setHorarios(List<Cita> horarios) {
		this.horarios = horarios;
	}





	public List<Cita> getCitasAgendadas() {
		return citasAgendadas;
	}





	public void setCitasAgendadas(List<Cita> citasAgendadas) {
		this.citasAgendadas = citasAgendadas;
	}





	public ProfesionalService getProfesionalServicio() {
		return profesionalServicio;
	}

	public void setProfesionalServicio(ProfesionalService profesionalServicio) {
		this.profesionalServicio = profesionalServicio;
	}





	public TurnoService getTurnoService() {
		return turnoService;
	}





	public void setTurnoService(TurnoService turnoService) {
		this.turnoService = turnoService;
	}





	public CitaService getCitaService() {
		return citaService;
	}





	public void setCitaService(CitaService citaService) {
		this.citaService = citaService;
	}













	public String getDni() {
		return dni;
	}





	public void setDni(String dni) {
		this.dni = dni;
	}
	
	
	
	



	 public String getNombrePaciente() {
		
		return nombrePaciente;
	}





	public void setNombrePaciente(String nombrePaciente) {
		this.nombrePaciente = nombrePaciente;
	}





	public Turno getHorario() {
		return horario;
	}





	public void setHorario(Turno horario) {
		this.horario = horario;
	}





	public Date getHorarioInicio() {
		return horarioInicio;
	}





	public void setHorarioInicio(Date horarioInicio) {
		this.horarioInicio = horarioInicio;
	}





	
	public boolean isMedicoDiseable() {
		return medicoDiseable;
	}





	public void setMedicoDiseable(boolean medicoDiseable) {
		this.medicoDiseable = medicoDiseable;
	}





	public void mostrarFechasDisponibles() {
		System.out.println("DNI:"+dni);
		turnos = turnoService.mostrarTurnoFechaMayorHoyDni(dni);
		horarios=null;
		
	}
	
	public void mostrarHorario(Turno t) {
		
		horarios=citaService.busquedaCitaHorarioDni(t.getHorarioInicio(),t.getHorarioFinal(),t.getDni());
		
	}
	
	
	public void agendarCita(Cita c) {
		System.out.println("nombrePaciente:"+nombrePaciente);
		c.setNombrePaciente(nombrePaciente);
		c.setStatus("Ocupado");
		citaService.actualizarCita(c);
		horarios=citaService.busquedaCitaHorarioDni(horario.getHorarioInicio(),horario.getHorarioFinal(),horario.getDni());
		citasAgendadas=citaService.mostrarCitasAgendadas(horario.getDni(), nombrePaciente);
		
	}
	
	
	public void mostrarCitas() {
		citasAgendadas=citaService.mostrarCitasAgendadas(nombrePaciente);
		horarios=null;
	}
	
	public void cancelarCita(Cita c) {
		c.setNombrePaciente("");
		c.setStatus("Disponible");
		citaService.actualizarCita(c);
		citasAgendadas=citaService.mostrarCitasAgendadas(nombrePaciente);
		horarios=null;
		
	}
	

}