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.AdministradorDao;
import br.usp.ime.academicdevoir.dao.DisciplinaDao;
import br.usp.ime.academicdevoir.entidade.Administrador;
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 })
@Resource
public class AdministradorController {
/**
* @uml.property name="result"
* @uml.associationEnd multiplicity="(1 1)"
*/
private final Result result;
private UsuarioSession usuarioSession;
private AdministradorDao administradorDao;
private DisciplinaDao disciplinaDao;
private Validator validator;
public AdministradorController(Result result,
AdministradorDao administradorDao, UsuarioSession usuario,
DisciplinaDao disciplinaDao, Validator validator) {
this.result = result;
this.administradorDao = administradorDao;
this.usuarioSession = usuario;
this.validator = validator;
this.disciplinaDao = disciplinaDao;
}
public void home() {
}
@Permission({ Privilegio.ADMINISTRADOR })
/**
* 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) {
result.redirectTo(LoginController.class).acessoNegado();
return;
}
result.include("administrador", administradorDao.carrega(id));
}
@Permission({ Privilegio.ADMINISTRADOR })
/**
* 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) {
result.redirectTo(LoginController.class).acessoNegado();
return;
}
Administrador a;
a = administradorDao.carrega(id);
a.setNome(novoNome);
a.setEmail(novoEmail);
a.setSenha(novaSenha);
validator.validate(a);
validator.onErrorUsePageOf(AdministradorController.class).alteracao(id);
a.setSenha(new Criptografia().geraMd5(novaSenha));
administradorDao.atualizaAdministrador(a);
result.redirectTo(AdministradorController.class).home();
}
public void listaDisciplinas() {
result.redirectTo(AdministradorController.class).lista();
}
public void lista() {
result.include("listaDisciplinas", disciplinaDao.listaTudo());
}
}