package br.usp.ime.academicdevoir.controller;
//import java.util.List;
import java.util.Collection;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.usp.ime.academicdevoir.dao.DisciplinaDao;
import br.usp.ime.academicdevoir.dao.TurmaDao;
import br.usp.ime.academicdevoir.entidade.Disciplina;
import br.usp.ime.academicdevoir.entidade.Turma;
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 disciplinas.
*/
public class DisciplinasController {
/**
* @uml.property name="result"
* @uml.associationEnd multiplicity="(1 1)"
*/
private final Result result;
/**
* @uml.property name="disciplinaDao"
* @uml.associationEnd multiplicity="(1 1)"
*/
private DisciplinaDao disciplinaDao;
/**
* @uml.property name="usuarioSession"
* @uml.associationEnd multiplicity="(1 1)"
*/
private TurmaDao turmaDao;
/**
* @param result
* para interação com o jsp da disciplina.
* @param disciplinaDao
* para interação com o banco de dados
* @param usuarioSession
* para controle de permissões
*/
public DisciplinasController(Result result, DisciplinaDao disciplinaDao,
TurmaDao turmaDao,
UsuarioSession usuarioSession) {
this.result = result;
this.disciplinaDao = disciplinaDao;
this.turmaDao = turmaDao;
}
// FIXME Arrumar home da disciplina
@Get
@Path("/disciplinas/home/{id}")
/**
* Método associado à home page da disciplina com o id fornecido.
* @param id identificador da disciplina
*/
public void home(Long id) {
Disciplina d = disciplinaDao.carrega(id);
result.include("disciplina", d);
result.include("listaDeTurmas", d.getTurmas());
}
/**
* Método associado ao .jsp que lista as disciplinas.
*/
public void lista() {
result.include("lista", disciplinaDao.listaTudo());
}
/**
* Método está associado ao .jsp do formulário de cadastro de uma disciplina
* no sistema.
*/
public void cadastro() {
}
/**
* Cadastra uma disciplina nova no sistema.
*
* @param nova
*/
public void cadastra(final Disciplina nova) {
disciplinaDao.salvaDisciplina(nova);
result.redirectTo(DisciplinasController.class).lista();
}
@Get
@Path("/disciplinas/alteracao/{id}")
/**
* Método associado ao .jsp com formulário para alteração de cadastro de
* disciplina com o id fornecido.
* @param id
*/
public void alteracao(Long id) {
result.include("disciplina", disciplinaDao.carrega(id));
}
/**
* Altera uma disciplina no banco de dados com o id fornecido e set o nome
* da disciplina para novoNome.
*
* @param id
*/
public void altera(Long id, String novoNome) {
Disciplina d;
d = disciplinaDao.carrega(id);
if (!novoNome.equals(""))
d.setNome(novoNome);
disciplinaDao.atualizaDisciplina(d);
result.redirectTo(DisciplinasController.class).lista();
}
/**
* Método associado ao .jsp com formulário para remoção de cadastro de
* disciplina.
*/
public void remocao() {
}
/**
* Remove uma disciplina do banco de dados com o id fornecido.
*
* @param id
*/
public void remove(final Long id) {
Disciplina disciplina;
disciplina = disciplinaDao.carrega(id);
Collection<Turma> listaDeTurmas = disciplina.getTurmas();
for (Turma turma : listaDeTurmas)
turmaDao.removeTurma(turma);
disciplinaDao.removeDisciplina(disciplina);
result.redirectTo(DisciplinasController.class).lista();
}
}