br.gov.jfrj.siga.vraptor.ServicoController.java Source code

Java tutorial

Introduction

Here is the source code for br.gov.jfrj.siga.vraptor.ServicoController.java

Source

/*******************************************************************************
 * Copyright (c) 2006 - 2011 SJRJ.
 * 
 *     This file is part of SIGA.
 * 
 *     SIGA is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * 
 *     SIGA is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 * 
 *     You should have received a copy of the GNU General Public License
 *     along with SIGA.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/

/*
 * Criado em 23/11/2005
 */

package br.gov.jfrj.siga.vraptor;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Query;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.view.Results;
import br.gov.jfrj.siga.base.AplicacaoException;
import br.gov.jfrj.siga.cp.CpConfiguracao;
import br.gov.jfrj.siga.cp.CpServico;
import br.gov.jfrj.siga.cp.CpSituacaoConfiguracao;
import br.gov.jfrj.siga.cp.CpTipoConfiguracao;
import br.gov.jfrj.siga.cp.bl.Cp;
import br.gov.jfrj.siga.cp.bl.SituacaoFuncionalEnum;
import br.gov.jfrj.siga.dp.CpTipoLotacao;
import br.gov.jfrj.siga.dp.DpLotacao;
import br.gov.jfrj.siga.dp.DpPessoa;
import br.gov.jfrj.siga.dp.dao.CpDao;
import br.gov.jfrj.siga.libs.rpc.FaultMethodResponseRPC;
import br.gov.jfrj.siga.libs.rpc.SimpleMethodResponseRPC;
import br.gov.jfrj.siga.vraptor.suporte.ConfiguracaoConfManual;

//MIGRAO VRAPTOR DA CLASSE WEB-WORK "package br.gov.jfrj.webwork.action.SelfConfigAction"

@Resource
public class ServicoController extends SigaController {

    // preparao do ambiente
    private CpTipoConfiguracao cpTipoConfiguracaoUtilizador;
    private CpTipoConfiguracao cpTipoConfiguracaoAConfigurar;
    private List<CpServico> cpServicosDisponiveis;
    /*private CpSituacaoConfiguracao cpSituacaoPadrao;
        
    private List<CpSituacaoConfiguracao> cpSituacoesPossiveis;
    */
    // edio
    private DpLotacao dpLotacaoConsiderada;
    private List<DpPessoa> dpPessoasDaLotacao;
    private List<CpConfiguracao> cpConfiguracoesAdotadas;
    // gravao - parametros
    private String idPessoaConfiguracao;
    private String idServicoConfiguracao;
    private String idSituacaoConfiguracao;
    private Long idTipoConfiguracao;

    // gravao - retorno
    private String respostaXMLStringRPC;
    private String resultadoRetornoAjax;
    private String mensagemRetornoAjax;
    private String idPessoaRetornoAjax;
    private String idServicoRetornoAjax;
    private String idSituacaoRetornoAjax;
    //

    public ServicoController(HttpServletRequest request, Result result, SigaObjects so, EntityManager em) {
        super(request, result, CpDao.getInstance(), so, em);

        result.on(AplicacaoException.class).forwardTo(this).appexception();
        result.on(Exception.class).forwardTo(this).exception();

        result.on(AplicacaoException.class).forwardTo(this).appexception();
        result.on(Exception.class).forwardTo(this).exception();
    }

    @Get("/app/gi/servico/editar")
    public void edita() throws Exception {
        ConfiguracaoConfManual configuracaoConfManual = new ConfiguracaoConfManual(dao, obterLotacaoEfetiva());
        setDpPessoasDaLotacao(new ArrayList<DpPessoa>());
        setCpConfiguracoesAdotadas(new ArrayList<CpConfiguracao>());
        setCpTipoConfiguracaoUtilizador(obterCpTipoConfiguracaoUtilizador());
        setCpTipoConfiguracaoAConfigurar(
                obterCpTipoConfiguracaoAConfigurar(CpTipoConfiguracao.TIPO_CONFIG_UTILIZAR_SERVICO));
        setCpServicosDisponiveis(obterServicosDaLotacaoEfetiva());

        if (seUsuarioPodeExecutar()) {
            DpLotacao t_dltLotacao = obterLotacaoEfetiva();
            dpLotacaoConsiderada = t_dltLotacao;
            if (t_dltLotacao != null) {
                // TODO: _LAGS - verificar opo para sublotaes
                setDpPessoasDaLotacao(dao().pessoasPorLotacao(t_dltLotacao.getIdLotacao(), false, false,
                        SituacaoFuncionalEnum.ATIVOS_E_CEDIDOS));
                setCpConfiguracoesAdotadas(obterConfiguracoesDasPessoasDaLotacaoConsiderada());
            }
        } else {
            throw new AplicacaoException("Acesso no permitido !");

        }

        result.include("configuracaoConfManual", configuracaoConfManual);
        result.include("cpServicosDisponiveis", cpServicosDisponiveis);
        result.include("idTpConfUtilizarSvc", CpTipoConfiguracao.TIPO_CONFIG_UTILIZAR_SERVICO);
        result.include("idTpConfUtilizarSvcOutraLot",
                CpTipoConfiguracao.TIPO_CONFIG_UTILIZAR_SERVICO_OUTRA_LOTACAO);
        result.include("dpPessoasDaLotacao", dpPessoasDaLotacao);
        result.include("cpConfiguracoesAdotadas", cpConfiguracoesAdotadas);
        result.include("cpTipoConfiguracaoAConfigurar", cpTipoConfiguracaoAConfigurar);
        result.include("dscTpConfiguracao", cpTipoConfiguracaoAConfigurar.getDscTpConfiguracao());
        result.include("pessoasGrupoSegManual",
                Cp.getInstance().getConf().getPessoasGrupoSegManual(obterLotacaoEfetiva()));
    }

    /**
     * Retorna as configuraes para as pessoas da lotao considerada   
     *  
     */
    private List<CpConfiguracao> obterConfiguracoesDasPessoasDaLotacaoConsiderada() throws AplicacaoException {
        ArrayList<CpConfiguracao> t_arlConfig = new ArrayList<CpConfiguracao>();
        for (DpPessoa t_dppPessoa : dpPessoasDaLotacao) {
            for (CpServico t_cpsServico : cpServicosDisponiveis) {
                CpConfiguracao t_cfgConfigPessoaLotacao = obterConfiguracao(dpLotacaoConsiderada, t_dppPessoa,
                        cpTipoConfiguracaoAConfigurar, t_cpsServico);
                if (t_cfgConfigPessoaLotacao == null) {
                    CpConfiguracao t_cpcConfigNovo = new CpConfiguracao();
                    t_cpcConfigNovo.setLotacao(dpLotacaoConsiderada);
                    t_cpcConfigNovo.setDpPessoa(t_dppPessoa);
                    t_cpcConfigNovo.setCpTipoConfiguracao(cpTipoConfiguracaoAConfigurar);
                    t_cpcConfigNovo.setCpServico(t_cpsServico);
                    t_cpcConfigNovo.setCpSituacaoConfiguracao(obterSituacaoPadrao(t_cpsServico));
                    t_arlConfig.add(t_cpcConfigNovo);
                } else {
                    t_arlConfig.add(t_cfgConfigPessoaLotacao);
                }
            }
        }
        return t_arlConfig;
    }

    /**
     *  Retorna a situacao padro para um dado servico
     * 
     */
    private CpSituacaoConfiguracao obterSituacaoPadrao(CpServico p_cpsServico) {
        return p_cpsServico.getCpTipoServico().getSituacaoDefault();
    }

    /**
     *  Retorna se o usurio ou quem ele substitui pode
     *  pode executar a interface
     */
    private boolean seUsuarioPodeExecutar() {
        // TODO: _LAGS - obterPessoaEfetiva() e ver se  diretor
        /// ID_TIPO_CONFIGURACAO_PODE_EXECUTAR_SERVICO = new Long(202);
        return true;
    }

    /**
     * Retorna a configurao para a pessoa, lotao e cpTipoConfiguracaoAConfigurar  
     *  
     */
    private CpConfiguracao obterConfiguracao(DpLotacao p_dltLotacao, DpPessoa p_dpsPessoa,
            CpTipoConfiguracao p_ctcTipoConfig, CpServico p_cpsServico) {
        CpConfiguracao t_cfgConfigExemplo = new CpConfiguracao();
        t_cfgConfigExemplo.setLotacao(p_dltLotacao);
        t_cfgConfigExemplo.setDpPessoa(p_dpsPessoa);
        t_cfgConfigExemplo.setCpTipoConfiguracao(p_ctcTipoConfig);
        t_cfgConfigExemplo.setCpServico(p_cpsServico);

        CpConfiguracao cpConf = null;
        try {
            cpConf = Cp.getInstance().getConf().buscaConfiguracao(t_cfgConfigExemplo, new int[] { 0 }, null);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return cpConf;

    }

    /**
    *@param dpPessoasDaLotacao the dpPessoasDaLotacao to set
    */
    public void setDpPessoasDaLotacao(List<DpPessoa> dpPessoasDaLotacao) {
        this.dpPessoasDaLotacao = dpPessoasDaLotacao;
    }

    /**
     * @param cpConfiguracoesAdotadas the cpConfiguracoesAdotadas to set
     */
    public void setCpConfiguracoesAdotadas(List<CpConfiguracao> cpConfiguracoesAdotadas) {
        this.cpConfiguracoesAdotadas = cpConfiguracoesAdotadas;
    }

    /**
     *  Retorna o tipo de configurao que o utilizador da interface  
     *  tem permisso
     */
    private CpTipoConfiguracao obterCpTipoConfiguracaoUtilizador() {
        CpTipoConfiguracao t_tcfTipo = dao.consultar(CpTipoConfiguracao.TIPO_CONFIG_HABILITAR_SERVICO_DE_DIRETORIO
        //CpTipoConfiguracao.TIPO_CONFIG_UTILIZAR_SERVICO
                , CpTipoConfiguracao.class, false);

        return t_tcfTipo;
    }

    /**
    * @param cpTipoConfiguracaoUtilizador the cpTipoConfiguracaoUtilizador to set
    */
    public void setCpTipoConfiguracaoUtilizador(CpTipoConfiguracao cpTipoConfiguracaoUtilizador) {
        this.cpTipoConfiguracaoUtilizador = cpTipoConfiguracaoUtilizador;
    }

    /**
    *  Retorna o tipo de configurao a Configurar  
    *  
    */
    private CpTipoConfiguracao obterCpTipoConfiguracaoAConfigurar(Long idTipoConfiguracao) {
        CpTipoConfiguracao t_tcfTipo = dao.consultar(idTipoConfiguracao, CpTipoConfiguracao.class, false);
        return t_tcfTipo;
    }

    /**
    * @param cpTipoConfiguracaoAConfigurar the cpTipoConfiguracaoAConfigurar to set
    */
    public void setCpTipoConfiguracaoAConfigurar(CpTipoConfiguracao cpTipoConfiguracaoAConfigurar) {
        this.cpTipoConfiguracaoAConfigurar = cpTipoConfiguracaoAConfigurar;
    }

    /**
    *  Obtm, os servicos da lotao efetiva
    */
    @SuppressWarnings("unchecked")
    private ArrayList<CpServico> obterServicosDaLotacaoEfetiva() {
        CpTipoLotacao t_ctlTipoLotacao = obterTipoDeLotacaoEfetiva();
        final Query query = dao.getSessao().getNamedQuery("consultarCpConfiguracoesPorTipoLotacao");
        query.setLong("idTpLotacao", t_ctlTipoLotacao.getIdTpLotacao());
        ArrayList<CpConfiguracao> t_arlConfigServicos = (ArrayList<CpConfiguracao>) query.list();
        ArrayList<CpServico> t_arlServicos = new ArrayList<CpServico>();
        for (CpConfiguracao t_cfgConfiguracao : t_arlConfigServicos) {
            t_arlServicos.add(t_cfgConfiguracao.getCpServico());
        }
        return t_arlServicos;
    }

    /**
    * @param cpServicosDisponiveis the cpServicosDisponiveis to set
    */
    public void setCpServicosDisponiveis(List<CpServico> cpServicosDisponiveis) {
        this.cpServicosDisponiveis = cpServicosDisponiveis;
    }

    /**
    *  Retorna o tipo de lotao do usurio 
    *  ou o tipo de lotao na qual ele substitui algum
    */
    private CpTipoLotacao obterTipoDeLotacaoEfetiva() {
        /*Cdigo definitivo
        * return obterLotacaoEfetiva().getCpTipoLotacao();
        * abaixo codigo temporrio : usado nos testes iniciais
        */
        //return dao.consultar(100L, CpTipoLotacao.class, false);
        return obterLotacaoEfetiva().getCpTipoLotacao();
    }

    /**
     *  Retorna a lotao do usurio ou a lotao na qual ele
     *  substitui algum
     */
    private DpLotacao obterLotacaoEfetiva() {
        if (getLotaTitular() != null) {
            if (getLotaTitular().getIdLotacao() != getCadastrante().getLotacao().getIdLotacao()) {
                return getLotaTitular();
            }
        }
        if (getCadastrante() != null) {
            return getCadastrante().getLotacao();
        }
        return null;
    }

    @Post("/app/gi/servico/inserirPessoaExtra")
    public void aInserirPessoaExtra() throws Exception {
        DpPessoa pes = dao.consultar(paramLong("pessoaExtra_pessoaSel.id"), DpPessoa.class, false);
        if (pes.getLotacao().equivale(obterLotacaoEfetiva())) {
            throw new AplicacaoException("A pessoa selecionada deve ser de outra lotao!");
        }

        /*
         * MELHORAR: Permite a incluso apenas de pessoas ativas. 
         * Isso deve ser melhorado, pois ainda no existe uma referncia nem mapeamento no hibernate
         *  para a descrio da situao funciona da pessoa. 
         * */
        if (!pes.getSituacaoFuncionalPessoa().equals("1")) {
            if (pes.getSituacaoFuncionalPessoa().equals("2")) {
                throw new AplicacaoException(
                        "No  possvel inserir uma pessoa que est CEDIDA!<br/>Por favor, abra um chamado para o suporte tcnico.");
            } else {
                throw new AplicacaoException("A pessoa no est com situao funcional ATIVA! Situao atual: "
                        + pes.getSituacaoFuncionalPessoa()
                        + "<br/>Por favor, abra um chamado para o suporte tcnico.");
            }

        }

        CpTipoConfiguracao tpConf = obterCpTipoConfiguracaoAConfigurar(
                CpTipoConfiguracao.TIPO_CONFIG_UTILIZAR_SERVICO_OUTRA_LOTACAO);
        Cp.getInstance().getBL().configurarAcesso(null, pes.getOrgaoUsuario(), obterLotacaoEfetiva(), pes, null,
                null, tpConf, getIdentidadeCadastrante());
        result.redirectTo(this).edita();
    }

    @Get("/app/gi/servico/excluir-pessoa-extra/{id}")
    public void excluirPessoaExtra(Long id) throws Exception {
        DpPessoa pes = dao().consultar(id, DpPessoa.class, false);
        CpTipoConfiguracao tpConf = obterCpTipoConfiguracaoAConfigurar(
                CpTipoConfiguracao.TIPO_CONFIG_UTILIZAR_SERVICO_OUTRA_LOTACAO);
        Cp.getInstance().getConf().excluirPessoaExtra(pes, obterLotacaoEfetiva(), tpConf,
                getIdentidadeCadastrante());

        result.redirectTo(this).edita();
    }

    @Get("/app/gi/servico/gravar")
    public void gravar(String idPessoaConfiguracao, String idServicoConfiguracao, String idSituacaoConfiguracao,
            Long idTipoConfiguracao, HttpServletResponse response) throws Exception {
        this.idPessoaConfiguracao = idPessoaConfiguracao;
        this.idServicoConfiguracao = idServicoConfiguracao;
        this.idSituacaoConfiguracao = idSituacaoConfiguracao;
        this.idTipoConfiguracao = idTipoConfiguracao;

        if (seUsuarioPodeExecutar()) {
            try {
                DpLotacao t_dplLotacao = obterLotacaoEfetiva();
                Long t_lngIdPessoa = Long.parseLong(idPessoaConfiguracao);
                DpPessoa t_dppPessoa = dao().consultar(t_lngIdPessoa, DpPessoa.class, false);
                Long t_lngIdServico = Long.parseLong(idServicoConfiguracao);
                CpServico t_cpsServico = dao().consultar(t_lngIdServico, CpServico.class, false);
                Long t_lngIdSituacao = Long.parseLong(idSituacaoConfiguracao);
                CpSituacaoConfiguracao t_cstSituacao = dao().consultar(t_lngIdSituacao,
                        CpSituacaoConfiguracao.class, false);
                Cp.getInstance().getBL().configurarAcesso(null, t_dplLotacao.getOrgaoUsuario(), t_dplLotacao,
                        t_dppPessoa, t_cpsServico, t_cstSituacao,
                        obterCpTipoConfiguracaoAConfigurar(idTipoConfiguracao), getIdentidadeCadastrante());
                // pesquisa novamente o item gravado
                CpConfiguracao t_cfgConfigGravada = obterConfiguracao(t_dplLotacao, t_dppPessoa,
                        obterCpTipoConfiguracaoAConfigurar(idTipoConfiguracao), t_cpsServico);

                t_cfgConfigGravada.toString();
                // devolve os ids como confirmao
                HashMap<String, String> t_hmpRetorno = new HashMap<String, String>();
                t_hmpRetorno.put("idpessoa",
                        /*idPessoaConfiguracao*/ String.valueOf(t_cfgConfigGravada.getDpPessoa().getIdPessoa()));
                t_hmpRetorno.put("idservico",
                        /*idServicoConfiguracao*/String.valueOf(t_cfgConfigGravada.getCpServico().getIdServico()));
                t_hmpRetorno.put("idsituacao", /*idSituacaoConfiguracao*/String
                        .valueOf(t_cfgConfigGravada.getCpSituacaoConfiguracao().getIdSitConfiguracao()));
                SimpleMethodResponseRPC t_smrResposta = new SimpleMethodResponseRPC();
                t_smrResposta.setMembersFrom(t_hmpRetorno);
                setRespostaXMLStringRPC(t_smrResposta.toXMLString());
            } catch (Exception e) {
                CpDao.rollbackTransacao();
                FaultMethodResponseRPC t_fmrRetorno = new FaultMethodResponseRPC();
                t_fmrRetorno.set(0, e.getMessage());
                setRespostaXMLStringRPC(t_fmrRetorno.toXMLString());
            }
        } else {
            FaultMethodResponseRPC t_fmrRetorno = new FaultMethodResponseRPC();
            t_fmrRetorno.set(0, "Acesso no permitido !");
            setRespostaXMLStringRPC(t_fmrRetorno.toXMLString());
        }
        result.use(Results.http()).body(getRespostaXMLStringRPC());
    }

    public String getRespostaXMLStringRPC() {
        return respostaXMLStringRPC;
    }

    public void setRespostaXMLStringRPC(String respostaXMLStringRPC) {
        this.respostaXMLStringRPC = respostaXMLStringRPC;
    }
}