package br.usp.ime.academicdevoir.controller; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import br.com.caelum.vraptor.Resource; import br.com.caelum.vraptor.Result; import br.com.caelum.vraptor.Validator; import br.usp.ime.academicdevoir.dao.AlunoDao; import br.usp.ime.academicdevoir.dao.DisciplinaDao; import br.usp.ime.academicdevoir.dao.TurmaDao; import br.usp.ime.academicdevoir.entidade.Aluno; import br.usp.ime.academicdevoir.entidade.Turma; import br.usp.ime.academicdevoir.entidade.Usuario; import br.usp.ime.academicdevoir.infra.Public; import br.usp.ime.academicdevoir.infra.Criptografia; import br.usp.ime.academicdevoir.infra.Privilegio; import br.usp.ime.academicdevoir.infra.UsuarioSession; @Resource /** * Controlador de alunos. * @author Vinicius Rezende */ public class AlunosController { /** * @uml.property name="result" * @uml.associationEnd multiplicity="(1 1)" */ private final Result result; /** * @uml.property name="alunoDao" * @uml.associationEnd multiplicity="(1 1)" */ private AlunoDao alunoDao; /** * @uml.property name="disciplinaDao" * @uml.associationEnd multiplicity="(1 1)" */ private DisciplinaDao disciplinaDao; /** * @uml.property name="turmaDao" * @uml.associationEnd multiplicity="(1 1)" */ private TurmaDao turmaDao; /** * @uml.property name="usuarioSession" * @uml.associationEnd multiplicity="(1 1)" */ private UsuarioSession usuarioSession; private Validator validator; /** * @param result * para interação com o jsp do aluno. * @param alunoDao * para interação com o banco de dados * @param disciplinaDao * para interação com o banco de dados * @param turmaDao * para interação com o banco de dados * @param usuarioSession * para controle de permissões */ public AlunosController(Result result, Validator validator, AlunoDao alunoDao, DisciplinaDao disciplinaDao, TurmaDao turmaDao, UsuarioSession usuarioSession) { this.result = result; this.validator = validator; this.alunoDao = alunoDao; this.disciplinaDao = disciplinaDao; this.turmaDao = turmaDao; this.usuarioSession = usuarioSession; } /** * Método associado à home page do aluno. */ public void home() { result.redirectTo(AlunosController.class).listaTurmas( usuarioSession.getUsuario().getId()); } /** * Método associado ao .jsp que lista os alunos cadastrados no banco de * dados. */ public void lista() { result.include("listaDeAlunos", alunoDao.listaTudo()); } /** * Método associado ao .jsp que lista as turmas em que o aluno está * matriculado. * * @param idAluno * id do aluno */ public void listaTurmas(Long idAluno) { result.include("aluno", alunoDao.carrega(idAluno)); } /** * Método está associado ao .jsp do formulário de cadastro de um aluno no * sistema. */ @Public public void cadastro() { } /** * Cadastra novo aluno no sitema * * @param novo */ @Public public void cadastra(final Aluno novo) { validator.validate(novo); validator.onErrorUsePageOf(AlunosController.class).cadastro(); novo.setSenha(new Criptografia().geraMd5(novo.getSenha())); alunoDao.salvaAluno(novo); result.redirectTo(AlunosController.class).lista(); } /** * Método associado ao .jsp com formulário para alteração de cadastro de * aluno. * * @param id * identificador do aluno */ public void alteracao(Long id) { Usuario u = usuarioSession.getUsuario(); if (!(u.getPrivilegio() == Privilegio.ADMINISTRADOR || u.getId() .longValue() == id)) { result.redirectTo(LoginController.class).acessoNegado(); return; } result.include("aluno", alunoDao.carrega(id)); } /** * Altera um aluno no banco de dados com o id fornecido e set o nome do * aluno para novoNome, o email para novoEmail e a senha para novaSenha. * * @param id */ public void altera(Long id, String novoNome, String novoEmail, String novaSenha) { Aluno a; Usuario u = usuarioSession.getUsuario(); if (!(u.getPrivilegio() == Privilegio.ADMINISTRADOR || u.getPrivilegio() == Privilegio.PROFESSOR || u.getId() .longValue() == id)) { result.redirectTo(LoginController.class).acessoNegado(); return; } a = alunoDao.carrega(id); a.setNome(novoNome); a.setEmail(novoEmail); a.setSenha(novaSenha); validator.validate(a); validator.onErrorUsePageOf(AlunosController.class).alteracao(id); a.setSenha(new Criptografia().geraMd5(novaSenha)); alunoDao.atualizaAluno(a); result.redirectTo(AlunosController.class).home(); } /** * Método associado ao .jsp com formulário para remoção de cadastro de * aluno. TODO podemos remover esse método e o jsp correspondente? */ public void remocao() { Usuario u = usuarioSession.getUsuario(); if (!(u.getPrivilegio() == Privilegio.ADMINISTRADOR)) result.redirectTo(LoginController.class).acessoNegado(); } /** * Remove um aluno do banco de dados com o id fornecido. * * @param id */ public void remove(final Long id) { Aluno aluno; Usuario u = usuarioSession.getUsuario(); if (!(u.getPrivilegio() == Privilegio.ADMINISTRADOR || u.getId() .longValue() == id)) { result.redirectTo(LoginController.class).acessoNegado(); return; } aluno = alunoDao.carrega(id); alunoDao.removeAluno(aluno); result.redirectTo(AlunosController.class).lista(); } /** * Método associado ao .jsp com formulário para matricula do aluno. */ public void matricula() { result.include("listaDeDisciplinas", disciplinaDao.listaTudo()); } /** * Inscreve o aluno na turma com o id fornecido. * * @param idTurma * @param idAluno */ public void inscreve(Long idAluno, Long idTurma) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date atual = new Date(); sdf.format(atual); Aluno aluno; Turma turma; Usuario u = usuarioSession.getUsuario(); if (!(u.getPrivilegio() == Privilegio.ADMINISTRADOR || u.getPrivilegio() == Privilegio.PROFESSOR || u.getId() .longValue() == idAluno)) { result.redirectTo(LoginController.class).acessoNegado(); return; } if (idTurma < 0) { result.redirectTo(AlunosController.class).matricula(); return; } aluno = alunoDao.carrega(idAluno); turma = turmaDao.carrega(idTurma); if (turma.getTemPrazo().equalsIgnoreCase("nao") || turma.getPrazoDeMatricula().after(atual)) { Collection<Turma> listaDeTurmas = aluno.getTurmas(); if (!listaDeTurmas.contains(turma)) alunoDao.inscreve(aluno, turma); result.redirectTo(AlunosController.class).listaTurmas(idAluno); return; } else { result.redirectTo(AlunosController.class).listaTurmas(idAluno); return; } } /** * Remove a matricula do aluno na turma. * * @param idAluno * id do aluno * @param idTurma * id da turma */ public void removeMatricula(Long idAluno, Long idTurma) { Aluno aluno; Turma turma; Usuario u = usuarioSession.getUsuario(); if (!(u.getPrivilegio() == Privilegio.ADMINISTRADOR || u.getPrivilegio() == Privilegio.PROFESSOR || u.getId() .longValue() == idAluno)) { result.redirectTo(LoginController.class).acessoNegado(); return; } aluno = alunoDao.carrega(idAluno); turma = turmaDao.carrega(idTurma); alunoDao.removeMatricula(aluno, turma); result.redirectTo(AlunosController.class).listaTurmas(idAluno); } }