package br.com.doctors.controller.administracao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.caelum.vraptor.Get; import br.com.caelum.vraptor.Path; import br.com.caelum.vraptor.Post; import br.com.caelum.vraptor.Put; import br.com.caelum.vraptor.Resource; import br.com.caelum.vraptor.Result; import br.com.caelum.vraptor.Validator; import br.com.caelum.vraptor.validator.Validations; import br.com.doctors.dao.administracao.ConvenioDao; import br.com.doctors.dao.administracao.PacienteDao; import br.com.doctors.dao.administracao.PerfilUsuarioDao; import br.com.doctors.modelo.administracao.Convenio; import br.com.doctors.modelo.administracao.Paciente; import com.google.common.base.Strings; /*** * * @author Renato * */ @Resource public class PacientesController { private PacienteDao daoPacientes; private Result result; private Validator validator; private ConvenioDao daoConvenio; private PerfilUsuarioDao daoPerfilUsuario; public PacientesController(ConvenioDao daoConvenio, PacienteDao daoPaciente, PerfilUsuarioDao daoPerfilUsuario, Result result, Validator validator) { this.daoPacientes = daoPaciente; this.result = result; this.validator = validator; this.daoConvenio = daoConvenio; this.daoPerfilUsuario = daoPerfilUsuario; } @Get @Path({"/pacientes"}) public void list() { result.include("pacientes", daoPacientes.listaTudo()); } @Get @Path("/pacientes/novo") public void cadastro() { result.include("convenios", daoConvenio.listaTudo() ); } @Post @Path("/pacientes") public void adiciona(final Paciente paciente, Collection<Long> conveniosId, String opcaoConvenios){ System.out.println("Tipo de Perfil: " + paciente.getPerfil()); if (conveniosId != null && opcaoConvenios.equalsIgnoreCase("conveniado")){ // recuperar cada id, e adicionar ao paciente List<Convenio> conveniosList = carregaConvenios(conveniosId); paciente.setConvenios(conveniosList); } validator.checking(getCadastroValidations(paciente)); validator.onErrorUsePageOf(this).cadastro(); daoPerfilUsuario.adiciona(paciente.getPerfil()); daoPacientes.adiciona(paciente); result.redirectTo(PacientesController.class).list(); } private List<Convenio> carregaConvenios(Collection<Long> conveniosId) { List<Convenio> conveniosList = new ArrayList<Convenio>(); for( Long id : conveniosId ){ conveniosList.add(daoConvenio.carrega(id)); } return conveniosList; } private Validations getCadastroValidations(final Paciente paciente) { return new Validations(){{ that(paciente.getNome() != null && paciente.getNome().length() >= 3, "paciente.nome", "nome.obrigatorio"); that(!Strings.isNullOrEmpty(paciente.getPerfil().getLogin() ), "paciente.perfil.login", "campo.obrigatorio", "Login"); that(!Strings.isNullOrEmpty(paciente.getPerfil().getSenha()), "paciente.perfil.senha", "campo.obrigatorio", "Senha"); that(!daoPerfilUsuario.loginJaExiste(paciente.getPerfil().getLogin()), "paciente.perfil.login", "login.ja.existe", paciente.getPerfil().getLogin()); }}; } @Get @Path("/pacientes/{id}") public Paciente edit(Long id){ result.include("convenios", daoConvenio.listaTudo() ); return daoPacientes.carrega(id); } @Put @Path("/pacientes/{paciente.id}") public void alterar(final Paciente paciente, Collection<Long> conveniosId, String opcaoConvenios){ if (conveniosId != null && opcaoConvenios.equalsIgnoreCase("conveniado")){ List<Convenio> convenios = carregaConvenios(conveniosId); paciente.setConvenios(convenios); } validator.checking(getEdicaoValidations(paciente)); validator.onErrorUsePageOf(this).edit(paciente.getId()); // System.out.println(paciente.getPerfil()); // System.out.println("---------------------------------"); paciente.setPerfil(daoPerfilUsuario.carrega(paciente.getPerfil().getId())); daoPacientes.atualiza(paciente); result.redirectTo(PacientesController.class).list(); } private Validations getEdicaoValidations(final Paciente paciente) { return new Validations(){{ that(paciente.getNome() != null && paciente.getNome().length() >= 3, "paciente.nome", "nome.obrigatorio"); }}; } @Path("/pacientes/remover/{id}") public void remover(Long id){ Paciente paciente = daoPacientes.carrega(id); daoPacientes.remove(paciente); result.redirectTo(PacientesController.class).list(); } }