package br.usp.ime.academicdevoir.controller; import java.util.Calendar; import java.util.List; import br.com.caelum.vraptor.Path; import br.com.caelum.vraptor.Resource; import br.com.caelum.vraptor.Result; import br.usp.ime.academicdevoir.dao.AlunoDao; import br.usp.ime.academicdevoir.dao.DisciplinaDao; import br.usp.ime.academicdevoir.dao.ListaDeExerciciosDao; import br.usp.ime.academicdevoir.dao.TurmaDao; import br.usp.ime.academicdevoir.entidade.Aluno; import br.usp.ime.academicdevoir.entidade.Disciplina; import br.usp.ime.academicdevoir.entidade.ListaDeExercicios; import br.usp.ime.academicdevoir.entidade.Turma; import br.usp.ime.academicdevoir.entidade.Usuario; import br.usp.ime.academicdevoir.infra.Permission; import br.usp.ime.academicdevoir.infra.Privilegio; import br.usp.ime.academicdevoir.infra.UsuarioSession; @Resource /** * Controlador de turmas. */ public class TurmasController { /** * @uml.property name="result" * @uml.associationEnd multiplicity="(1 1)" */ private final Result result; /** * @uml.property name="turmaDao" * @uml.associationEnd multiplicity="(1 1)" */ private TurmaDao turmaDao; /** * @uml.property name="disciplinaDao" * @uml.associationEnd multiplicity="(1 1)" */ private DisciplinaDao disciplinaDao; /** * @uml.property name="alunoDao" * @uml.associationEnd multiplicity="(1 1)" */ private AlunoDao alunoDao; /** * @uml.property name="usuarioSession" * @uml.associationEnd multiplicity="(1 1)" */ private UsuarioSession usuarioSession; private ListaDeExerciciosDao listaDeExerciciosDao; /** * @param result * para interação com o jsp da turma. * @param turmaDao * para interação com o banco de dados * @param disciplinaDao * para interação com o banco de dados * @param alunoDao * para interação com o banco de dados */ public TurmasController(Result result, TurmaDao turmaDao, DisciplinaDao disciplinaDao, AlunoDao alunoDao, ListaDeExerciciosDao listaDeExerciciosDao, UsuarioSession usuarioSession) { this.result = result; this.turmaDao = turmaDao; this.disciplinaDao = disciplinaDao; this.alunoDao = alunoDao; this.listaDeExerciciosDao = listaDeExerciciosDao; this.usuarioSession = usuarioSession; } /** * Método associado à home page da turma com id fornecido. * * @param id */ @Path("/turmas/home/{id}") public void home(Long id) { Turma turma = turmaDao.carrega(id); result.include("turma", turma); result.include("listaDeListas", turma.getListas()); } /** * Método associado ao menu da pagina da turma. */ public void menu() { } /** * Método associado ao .jsp que lista as turmas cadastradas no banco de * dados. */ public void lista() { result.include("listaDeTurmas", turmaDao.listaTudo()); } /** * Método associado ao .jsp que lista os alunos inscritos na turma * * @param idTurma * id da turma */ public void listaAlunos(long idTurma) { result.include("turma", turmaDao.carrega(idTurma)); } /** * Método associado ao .jsp que lista os alunos e listas de uma turma * * @param idTurma * id da turma */ public void listaAlunosEListas(long idTurma) { result.include("turma", turmaDao.carrega(idTurma)); } @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) /** * Método está associado ao .jsp do formulário de cadastro de uma turma no * sistema. */ public void cadastro(long idDisciplina) { List<Disciplina> listaDeDisciplinas = disciplinaDao.listaTudo(); if(listaDeDisciplinas.isEmpty()) { result.redirectTo(DisciplinasController.class).cadastro(); return; } //result.include("listaDeDisciplinas", listaDeDisciplinas); result.include("idDisciplina", idDisciplina); Calendar dataDeHoje = Calendar.getInstance(); result.include("diaAtual", dataDeHoje.get(Calendar.DAY_OF_MONTH)); result.include("mesAtual", dataDeHoje.get(Calendar.MONTH) + 1); result.include("anoAtual", dataDeHoje.get(Calendar.YEAR)); } @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) /** * Cadastra uma turma nova no sistema. * * @param nova */ public void cadastra(Turma nova, final List<Integer> prazoDeMatricula) { if(nova.getDisciplina() == null) { result.redirectTo(DisciplinasController.class).cadastro(); return; } nova.setPrazoDeMatricula(prazoDeMatricula); turmaDao.salvaTurma(nova); result.redirectTo(ProfessoresController.class).listaTurmas(nova.getProfessor().getId()); } @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) /** * Método associado ao .jsp com formulário para alteração de cadastro de * turma. */ public void alteracao(Long id) { Turma turma = turmaDao.carrega(id); Usuario u = usuarioSession.getUsuario(); if(u.getPrivilegio() == Privilegio.PROFESSOR && u.getId() != turma.getProfessor().getId()) { result.redirectTo(LoginController.class).acessoNegado(); return; } result.include("turma", turma); Calendar dataDeHoje = Calendar.getInstance(); result.include("diaAtual", dataDeHoje.get(Calendar.DAY_OF_MONTH)); result.include("mesAtual", dataDeHoje.get(Calendar.MONTH) + 1); result.include("anoAtual", dataDeHoje.get(Calendar.YEAR)); } @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) /** * Altera uma turma no banco de dados com o id fornecido e set o nome da * turma para novoNome. * * @param id */ public void altera(Long id, String novoNome, String novoTemPrazo, List<Integer> prazoDeMatricula) { Turma turma = turmaDao.carrega(id); Usuario u = usuarioSession.getUsuario(); if(u.getPrivilegio() == Privilegio.PROFESSOR && u.getId() != turma.getProfessor().getId()) { result.redirectTo(LoginController.class).acessoNegado(); return; } if (!novoNome.equals("")) turma.setNome(novoNome); turma.setTemPrazo(novoTemPrazo); turma.setPrazoDeMatricula(prazoDeMatricula); turmaDao.atualizaTurma(turma); result.redirectTo(TurmasController.class).home(turma.getId()); } @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) /** * Método associado ao .jsp com formulário para remoção de cadastro de * turma. */ public void remocao() { } @Permission({ Privilegio.ADMINISTRADOR, Privilegio.PROFESSOR }) /** * Remove uma turma do banco de dados com o id fornecido. * * @param id */ public void remove(final Long id) { Turma turma = turmaDao.carrega(id); Usuario u = usuarioSession.getUsuario(); if(u.getPrivilegio() == Privilegio.PROFESSOR && u.getId() != turma.getProfessor().getId()) { result.redirectTo(LoginController.class).acessoNegado(); return; } List<ListaDeExercicios> listasDeExercicios = turma.getListas(); for (ListaDeExercicios lista : listasDeExercicios) listaDeExerciciosDao.remove(lista); turmaDao.removeTurma(turma); result.redirectTo(ProfessoresController.class).listaTurmas(u.getId()); } /** * 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 = alunoDao.carrega(idAluno); Turma turma = turmaDao.carrega(idTurma); Usuario u = usuarioSession.getUsuario(); if(u.getPrivilegio() != Privilegio.ADMINISTRADOR && !(u.getId() == turma.getProfessor().getId() || u.getId() == aluno.getId())) { result.redirectTo(LoginController.class).acessoNegado(); return; } alunoDao.removeMatricula(aluno, turma); result.redirectTo(TurmasController.class).listaAlunos(idTurma); } }