package br.usp.ime.academicdevoir.controller; import br.com.caelum.vraptor.Resource; import br.com.caelum.vraptor.Result; import br.com.caelum.vraptor.Validator; import br.usp.ime.academicdevoir.dao.ProfessorDao; import br.usp.ime.academicdevoir.entidade.Professor; import br.usp.ime.academicdevoir.entidade.Usuario; import br.usp.ime.academicdevoir.infra.Criptografia; import br.usp.ime.academicdevoir.infra.Permission; import br.usp.ime.academicdevoir.infra.Privilegio; import br.usp.ime.academicdevoir.infra.UsuarioSession; @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) @Resource /** * Controlador de professores. */ public class ProfessoresController { /** * @uml.property name="result" * @uml.associationEnd multiplicity="(1 1)" */ private final Result result; /** * @uml.property name="professorDao" * @uml.associationEnd multiplicity="(1 1)" */ private ProfessorDao professorDao; /** * @uml.property name="usuarioSession" * @uml.associationEnd multiplicity="(1 1)" */ private UsuarioSession usuarioSession; private Validator validator; /** * @param result para interação com o jsp do professor. * @param professorDao para interação com o banco de dados * @param usuarioSession para controle de permissões */ public ProfessoresController(Result result, Validator validator, ProfessorDao professorDao, UsuarioSession usuarioSession) { this.result = result; this.validator = validator; this.professorDao = professorDao; this.usuarioSession = usuarioSession; } /** * Método associado ao menu da pagina do professor. */ public void menu() { } /** * Método associado à home page do professor. */ public void home() { result.redirectTo(ProfessoresController.class).listaTurmas(usuarioSession.getUsuario().getId()); } /** * Método associado ao .jsp que lista os professores. */ public void lista() { result.include("listaDeProfessores", professorDao.listaTudo()); } /** * Método associado ao .jsp que lista as turmas do professor * @param idProfessor id do professor */ public void listaTurmas(Long idProfessor) { result.include("professor", professorDao.carrega(idProfessor)); } @Permission(Privilegio.ADMINISTRADOR) /** * Método está associado ao .jsp do formulário de cadastro de um professor no sistema. */ public void cadastro() { } @Permission(Privilegio.ADMINISTRADOR) /** * Cadastra novo professor no sitema * * @param novo */ public void cadastra(final Professor novo) { validator.validate(novo); validator.onErrorUsePageOf(ProfessoresController.class).cadastro(); novo.setSenha(new Criptografia().geraMd5(novo.getSenha())); professorDao.salvaProfessor(novo); result.redirectTo(ProfessoresController.class).lista(); } @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) /** * Método associado ao .jsp com formulário para alteração de cadastro de * professor. * * @param id identificador do professor */ public void alteracao(Long id) { Usuario u = usuarioSession.getUsuario(); if ((u.getId().longValue() != id) && (u.getPrivilegio() == Privilegio.PROFESSOR)) { result.redirectTo(LoginController.class).acessoNegado(); return; } result.include("professor", professorDao.carrega(id)); } @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) /** * Altera um professor no banco de dados com o id fornecido e set o nome * do professor para novoNome, o email para novoEmail e a senha para novaSenha. * * @param id * @param novoNome * @param novoEmail * @param novaSenha */ public void altera(Long id, String novoNome, String novoEmail, String novaSenha) { Usuario u = usuarioSession.getUsuario(); if ((u.getId().longValue() != id) && (u.getPrivilegio() == Privilegio.PROFESSOR)) { result.redirectTo(LoginController.class).acessoNegado(); return; } Professor p; p = professorDao.carrega(id); p.setNome(novoNome); p.setEmail(novoEmail); p.setSenha(novaSenha); validator.validate(p); validator.onErrorUsePageOf(ProfessoresController.class).alteracao(id); p.setSenha(new Criptografia().geraMd5(novaSenha)); professorDao.atualizaProfessor(p); result.redirectTo(ProfessoresController.class).home(); } @Permission(Privilegio.ADMINISTRADOR) /** * Remove um professor do banco de dados com o id fornecido. * * @param id */ public void remove(final Long id) { Professor professor; professor = professorDao.carrega(id); professorDao.removeProfessor(professor); result.redirectTo(ProfessoresController.class).lista(); } @Permission(Privilegio.ADMINISTRADOR) public void mudarTipo(Long id) { professorDao.alteraTipo(id); result.redirectTo(ProfessoresController.class).lista(); } public void mudanca () { } }