/*
*
* Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute
- Graduate School and Research in Engineering.
* See the file license.txt for copyright permission.
*
*/
package actions;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modelo.TipoUsuario;
import modelo.Usuario;
import service.TipoUsuarioAppService;
import service.UsuarioAppService;
import service.controleTransacao.FabricaDeAppService;
import service.exception.AplicacaoException;
import util.SelectOneDataModel;
import DAO.exception.ObjetoNaoEncontradoException;
/**
* UsuarioActions � uma classe relacionada � manipula��o de tela, ou seja, a intera��o do usus�rio
* de fato dar-se-� atrav�s de objetos do tipo UsuarioActions quando na tela de Usuario.
* Objetos do tipo "actions" nome aqui adotado tamb�m s�o popularmente conhecidos como managebeans
* em outras palavras beans gerenci�veis.
*
* @author marques.araujo
*
*/
public class UsuarioActions extends BaseActions{
// Componentes de Controle
private DataModel listaUsuarios;
private SelectOneDataModel<TipoUsuario> comboTiposUsuario;
// Variaveis de Tela
private Usuario usuarioCorrente;
private String confirmacaoSenha;
private String opcaoRelatorioEscolhido;
private boolean exclusaoUsuarioLogado;
private boolean permitirAlterarStatus;
// Services
private UsuarioAppService usuarioService;
private TipoUsuarioAppService tipoUsuarioService;
// Paginas
public final String PAGINA_LIST = "listUsuario";
public final String PAGINA_NEW = "newUsuario";
public final String PAGINA_SHOW = "showUsuario";
public final String PAGINA_EDIT = "editUsuario";
public UsuarioActions(){
try {
usuarioService = FabricaDeAppService.getAppService(UsuarioAppService.class);
tipoUsuarioService = FabricaDeAppService.getAppService(TipoUsuarioAppService.class);
} catch (Exception e) {
}
}
public String preparaInclusao(){
usuarioCorrente = new Usuario();
return PAGINA_NEW;
}
public String inclui(){
usuarioCorrente.setTipoUsuario(comboTiposUsuario.getObjetoSelecionado());
try {
usuarioService.inclui(usuarioCorrente, confirmacaoSenha);
} catch (AplicacaoException ex) {
error(ex.getMessage());
return PAGINA_NEW;
}
info("usuario.SUCESSO_INCLUSAO");
listaUsuarios = null;
return PAGINA_LIST;
}
public String mostra(){
usuarioCorrente = (Usuario) listaUsuarios.getRowData();
comboTiposUsuario = SelectOneDataModel.criaComObjetoSelecionadoSemTextoInicial(tipoUsuarioService.recuperaListaDeTipoUsuario(), usuarioCorrente.getTipoUsuario());
try {
usuarioCorrente = usuarioService.recuperaComPlanos(usuarioCorrente);
} catch (ObjetoNaoEncontradoException ex){
}
return PAGINA_SHOW;
}
public String preparaAlteracao(){
usuarioCorrente = (Usuario) listaUsuarios.getRowData();
comboTiposUsuario = SelectOneDataModel.criaComObjetoSelecionadoSemTextoInicial(tipoUsuarioService.recuperaListaDeTipoUsuario(), usuarioCorrente.getTipoUsuario());
permitirAlterarStatus=true;
return PAGINA_EDIT;
}
public String altera(){
try{
usuarioCorrente.setTipoUsuario(comboTiposUsuario.getObjetoSelecionado());
usuarioService.altera(usuarioCorrente, sessaoUsuarioCorrente.getUsuarioLogado(), confirmacaoSenha);
} catch (AplicacaoException ex){
error(ex.getMessage());
listaUsuarios = null;
return PAGINA_EDIT;
}
info("usuario.SUCESSO_ALTERACAO");
listaUsuarios = null;
return PAGINA_LIST;
}
public String cancelar(){
return PAGINA_LIST;
}
public void preparaExclusao(){
usuarioCorrente = (Usuario) listaUsuarios.getRowData();
}
public String exclui(){
try {
usuarioService.exclui(usuarioCorrente);
} catch (AplicacaoException e) {
error(e.getMessage());
return PAGINA_LIST;
}
info("usuario.SUCESSO_EXCLUSAO");
listaUsuarios = null;
return PAGINA_LIST;
}
public void imprimirEmPdfOuHthml(){
String url = "/GeraRelatorioDeUsuarios";
FacesContext context = FacesContext.getCurrentInstance();
List<Usuario> listaDeUsuarios = null;
try {
listaDeUsuarios = usuarioService.recuperaListaDeUsuarios();
if(listaDeUsuarios.isEmpty()){
throw new AplicacaoException();
}
ServletContext sc = (ServletContext) context.getExternalContext().getContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
HttpServletResponse response=(HttpServletResponse)context.getExternalContext().getResponse();
request.setAttribute("opcaoRelatorioEscolhido",opcaoRelatorioEscolhido);
rd.forward(request, response);
}catch (Exception e) {
e.printStackTrace();
}
finally{
context.responseComplete();
}
}
public void imprimir(){
try{
List<Usuario> listaDeUsuarios = usuarioService.recuperaListaDeUsuarios();
usuarioService.gerarRelatorio(listaDeUsuarios);
} catch (AplicacaoException re){
error("usuario.USUARIOS_INEXISTENTES");
}
}
// ================================== M�todos get() e set() ================================== //
/**
* Este m�todo retorna uma lista de ususarios.
* @return DataModel
*
*/
public DataModel getListaUsuarios() {
if (listaUsuarios == null){
listaUsuarios = new ListDataModel(usuarioService.recuperaUsuariosComTipo());
}
return listaUsuarios;
}
public Usuario getUsuarioCorrente() {
return usuarioCorrente;
}
/**
* Este metodo retorna os tipos de usuarios dispon�veis.
* @return SelectOneDataModel<TipoUsuario>
*/
public SelectOneDataModel<TipoUsuario> getComboTiposUsuario() {
if (comboTiposUsuario == null){
comboTiposUsuario = SelectOneDataModel.criaSemTextoInicial(tipoUsuarioService.recuperaListaDeTipoUsuario());
}
return comboTiposUsuario;
}
public void setListaUsuarios(DataModel listaUsuarios) {
this.listaUsuarios = listaUsuarios;
}
public void setUsuarioCorrente(Usuario usuarioCorrente) {
this.usuarioCorrente = usuarioCorrente;
}
public void setComboTiposUsuario(SelectOneDataModel<TipoUsuario> comboTiposUsuario) {
this.comboTiposUsuario = comboTiposUsuario;
}
public void setConfirmacaoSenha(String confirmacaoSenha) {
this.confirmacaoSenha = confirmacaoSenha;
}
public String getConfirmacaoSenha() {
return confirmacaoSenha;
}
public void setExclusaoUsuarioLogado(boolean exclusaoUsuarioLogado) {
this.exclusaoUsuarioLogado = exclusaoUsuarioLogado;
}
/**
* Este metodo identifica se o usuario esta logado a partir do metodo equals.
* @return boolean
*
*/
public boolean isExclusaoUsuarioLogado() {
return sessaoUsuarioCorrente.getUsuarioLogado().equals((Usuario) listaUsuarios.getRowData());
}
public boolean isPermitirAlterarStatus() {
return permitirAlterarStatus;
}
public void setPermitirAlterarStatus(boolean permitirAlterarStatus) {
this.permitirAlterarStatus = permitirAlterarStatus;
}
public String getOpcaoRelatorioEscolhido() {
return opcaoRelatorioEscolhido;
}
public void setOpcaoRelatorioEscolhido(String opcaoRelatorioEscolhido) {
this.opcaoRelatorioEscolhido = opcaoRelatorioEscolhido;
}
}