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

Java tutorial

Introduction

Here is the source code for br.gov.jfrj.siga.vraptor.ExClassificacaoController.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  13/09/2005
 *
 * To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package br.gov.jfrj.siga.vraptor;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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

import org.apache.commons.beanutils.PropertyUtils;

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.base.Texto;
import br.gov.jfrj.siga.ex.ExClassificacao;
import br.gov.jfrj.siga.ex.ExTemporalidade;
import br.gov.jfrj.siga.ex.ExTipoDestinacao;
import br.gov.jfrj.siga.ex.ExVia;
import br.gov.jfrj.siga.ex.SigaExProperties;
import br.gov.jfrj.siga.ex.bl.Ex;
import br.gov.jfrj.siga.ex.util.MascaraUtil;
import br.gov.jfrj.siga.hibernate.ExDao;
import br.gov.jfrj.siga.model.Selecionavel;
import br.gov.jfrj.siga.persistencia.ExClassificacaoDaoFiltro;

@Resource
public class ExClassificacaoController
        extends SigaSelecionavelControllerSupport<ExClassificacao, ExClassificacaoDaoFiltro> {
    private String[] nivelSelecionado;
    private Integer nivelAlterado;

    public ExClassificacaoController(HttpServletRequest request, Result result, SigaObjects so, EntityManager em) {
        super(request, result, ExDao.getInstance(), so, em);
        int totalItens = getTotalDeNiveis();
        nivelSelecionado = new String[totalItens];
    }

    @Override
    public ExClassificacaoDaoFiltro createDaoFiltro() {
        final ExClassificacaoDaoFiltro flt = new ExClassificacaoDaoFiltro();

        if (nivelAlterado != null) {
            for (int i = nivelAlterado; i < nivelSelecionado.length - 1; i++) {
                nivelSelecionado[i + 1] = null;
            }

        }

        String codigoSelecionado = null;
        for (int i = nivelSelecionado.length - 1; i >= 0; i--) {
            if (nivelSelecionado[i] != null && !nivelSelecionado[i].equals("-1")) {
                codigoSelecionado = nivelSelecionado[i];
                break;
            }
        }

        if (codigoSelecionado != null) {
            flt.setSigla(codigoSelecionado);
        }

        flt.setDescricao(getNome());
        return flt;
    }

    @Get("app/expediente/classificacao/listar")
    public void lista() {
        assertAcesso("DOC:Mdulo de Documentos;FE:Ferramentas;PC:Plano de Classificao");
        result.include("classificacaoVigente", getClassificacaoVigente());
    }

    @Get("app/classificacao/buscar")
    public void busca(final String sigla, final String postback, final Integer paramoffset, final String nome,
            final String[] nivelSelecionado, final Integer nivelAlterado, final Boolean discriminarVias)
            throws Exception {
        setNome(nome);
        this.nivelAlterado = nivelAlterado;
        this.nivelSelecionado = nivelSelecionado != null ? nivelSelecionado : this.nivelSelecionado;
        getP().setOffset(paramoffset);
        aBuscar(sigla, postback);
        final String[] listaNiveis = new String[getTotalDeNiveis()];
        final String[] nomeNivel = new String[getTotalDeNiveis()];
        final List<String> listaNomes = SigaExProperties.getExClassificacaoNomesNiveis();
        final List<ExClassificacao>[] classificacoesDoNivel = new List[getTotalDeNiveis()];
        for (int i = 0; i < listaNiveis.length; i++) {
            listaNiveis[i] = String.valueOf(i);
            nomeNivel[i] = listaNomes.get(i + 1);
            classificacoesDoNivel[i] = getClassificacoesDoNivel(i);
        }

        result.include("listaNiveis", listaNiveis);
        result.include("nomeDoNivel", nomeNivel);
        result.include("classificacoesDoNivel", classificacoesDoNivel);
        result.include("nivelSelecionado", nivelSelecionado);
        result.include("discriminarVias", discriminarVias);
        result.include("itens", getItens());
        result.include("tamanho", getTamanho());
        result.include("nome", getNome());
    }

    @Get("app/classificacao/selecionar")
    public void selecionar(String sigla) throws Exception {
        String resultado = super.aSelecionar(sigla);
        if (resultado == "ajax_retorno") {
            result.include("sel", getSel());
            result.use(Results.page()).forwardTo("/WEB-INF/jsp/ajax_retorno.jsp");
        } else {
            result.use(Results.page()).forwardTo("/WEB-INF/jsp/ajax_vazio.jsp");
        }
    }

    @Get("app/expediente/classificacao/editar")
    public ExClassificacao edita(ExClassificacao exClassificacao, String codificacao, String acao)
            throws Exception {
        assertAcesso("DOC:Mdulo de Documentos;FE:Ferramentas;PC:Plano de Classificao");
        ExClassificacao exClass = null;
        if (codificacao != null && exClassificacao == null) {
            exClass = buscarExClassificacao(codificacao);
        } else {
            exClass = exClassificacao;
        }

        if (exClass == null && !acao.equals("nova_classificacao")) {
            throw new AplicacaoException("A classificao documental no est disponvel: " + codificacao);
        }

        result.include("listaExTipoDestinacao", getListaExTipoDestinacao());
        result.include("listaExTemporalidade", getListaExTemporalidade());
        result.include("idTpDestinacao", -1);
        result.include("idTemporalidadeArqCorr", -1);
        result.include("idTemporalidadeArqInterm", -1);
        result.include("idTpDestinacaoFinal", -1);
        result.include("exibirAdicaoDeVia", exibirAdicaoDeVia(codificacao));
        result.include("acao", acao);
        result.include("mascaraEntrada", MascaraUtil.getInstance().getMascaraEntrada());
        result.include("mascaraSaida", MascaraUtil.getInstance().getMascaraSaida());
        result.include("mascaraJavascript", SigaExProperties.getExClassificacaoMascaraJavascript());
        return exClass;
    }

    @Get("app/expediente/classificacao/gravar")
    public void gravar(ExClassificacao exClassificacao, String codificacaoAntiga, String acao) throws Exception {
        assertAcesso("DOC:Mdulo de Documentos;FE:Ferramentas;PC:Plano de Classificao");

        if (exClassificacao.getCodificacao().length() == 0
                || exClassificacao.getDescrClassificacao().length() == 0) {
            throw new AplicacaoException("Preencha o cdigo da classificao e a descrio!");
        }

        if (acao.equals("nova_classificacao")) {
            ExClassificacao exClassExistente = buscarExClassificacao(exClassificacao.getCodificacao());
            if (exClassExistente != null) {
                throw new AplicacaoException(
                        "A classificao documental j existe: " + exClassExistente.getCodificacao());
            }
        }

        dao().iniciarTransacao();
        try {

            if (exClassificacao.getCodificacao().length() == 0
                    || exClassificacao.getDescrClassificacao().length() == 0) {
                throw new AplicacaoException("Preencha o cdigo da classificao e a descrio!");
            }

            if (acao.equals("nova_classificacao")) {
                Ex.getInstance().getBL().incluirExClassificacao(exClassificacao, getIdentidadeCadastrante());
            } else {
                ExClassificacao exClassAntiga = buscarExClassificacao(codificacaoAntiga);
                if (exClassAntiga != null
                        && !exClassAntiga.getCodificacao().equals(exClassificacao.getCodificacao())) {
                    ExClassificacao exClass = new ExClassificacao();
                    exClass.setCodificacao(exClassificacao.getCodificacao());
                    exClass.setDescrClassificacao(exClassificacao.getDescrClassificacao());
                    exClass.setObs(exClassificacao.getObs());
                    Ex.getInstance().getBL().moverClassificacao(exClass, exClassAntiga, getIdentidadeCadastrante());
                } else {
                    ExClassificacao exClassNovo = Ex.getInstance().getBL().getCopia(exClassAntiga);
                    exClassNovo.setCodificacao(exClassificacao.getCodificacao());
                    exClassNovo.setDescrClassificacao(exClassificacao.getDescrClassificacao());
                    exClassNovo.setObs(exClassificacao.getObs());
                    Ex.getInstance().getBL().alterarExClassificacao(exClassNovo, exClassAntiga,
                            dao().consultarDataEHoraDoServidor(), getIdentidadeCadastrante());
                    System.out.println(exClassNovo);
                    System.out.println(exClassAntiga);
                    System.out.println(exClassificacao);
                }

            }

            dao().commitTransacao();
            setMensagem("Classificao salva!");
            result.redirectTo(
                    "editar?codificacao=" + exClassificacao.getCodificacao() + "&acao=editar_classificacao");
        } catch (Exception e) {
            dao().rollbackTransacao();
            throw new AplicacaoException(
                    "No foi possvel gravar classificao no banco de dados." + e.getMessage());
        }
    }

    @Get("app/expediente/classificacao/excluir")
    public void excluir(String codificacao) throws Exception {
        assertAcesso("DOC:Mdulo de Documentos;FE:Ferramentas;PC:Plano de Classificao");
        dao().iniciarTransacao();
        try {
            ExClassificacao exClass;
            exClass = buscarExClassificacao(codificacao);
            Ex.getInstance().getBL().excluirExClassificacao(exClass, getIdentidadeCadastrante());
            dao().commitTransacao();
            result.redirectTo(this).lista();
        } catch (Exception e) {
            dao().rollbackTransacao();
            throw new AplicacaoException(
                    "No foi possvel excluir classificao do banco de dados." + e.getMessage());
        }
    }

    @Post("app/expediente/classificacao/gravarVia")
    public void gravarVia(String acao, String codificacao, ExVia via, Long idDestino, Long idTemporalidadeArqCorr,
            Long idTemporalidadeArqInterm, Long idDestinacaoFinal) throws Exception {
        assertAcesso("DOC:Mdulo de Documentos;FE:Ferramentas;PC:Plano de Classificao");
        if (idDestino == null || idDestino <= 0) {
            throw new AplicacaoException("A destinao da via deve ser definida!");
        }
        dao().iniciarTransacao();
        try {

            Date dt = dao().consultarDataEHoraDoServidor();

            ExClassificacao exClassAntiga = buscarExClassificacao(codificacao);
            if (exClassAntiga == null) {
                throw new AplicacaoException("Erro ao obter a classificao");
            }
            ExClassificacao exClassNovo = Ex.getInstance().getBL().getCopia(exClassAntiga);
            dao().gravarComHistorico(exClassNovo, exClassAntiga, dt, getIdentidadeCadastrante());

            ExVia exVia = null;
            ExVia exViaGravar = null;
            Date dtHist = null;
            Boolean removerViaAntiga = false;
            if (via.getId() == null) {
                // nova via

                exVia = new ExVia();
                exVia.setCodVia(String.valueOf(exClassAntiga.getExViaSet().size() + 1));
                exViaGravar = exVia;
                exVia = null;
                dtHist = null;
            } else {
                // alterar via existente
                exVia = dao().consultar(via.getId(), ExVia.class, false);
                ExVia exViaNova = new ExVia();
                try {
                    PropertyUtils.copyProperties(exViaNova, exVia);
                    // novo id
                    exViaNova.setId(null);
                    exViaNova.setCodVia(exVia.getCodVia());
                    exViaGravar = exViaNova;
                    dtHist = dt;
                    removerViaAntiga = true;

                } catch (Exception e) {
                    throw new AplicacaoException("Erro ao copiar as propriedades da via anterior.");
                }

            }
            ExTipoDestinacao destino = !idDestino.equals(-1L)
                    ? dao().consultar(idDestino, ExTipoDestinacao.class, false)
                    : null;

            ExTipoDestinacao destFinal = !idDestinacaoFinal.equals(-1L)
                    ? dao().consultar(idDestinacaoFinal, ExTipoDestinacao.class, false)
                    : null;

            ExTemporalidade tempCorrente = !idTemporalidadeArqCorr.equals(-1L)
                    ? dao().consultar(idTemporalidadeArqCorr, ExTemporalidade.class, false)
                    : null;

            ExTemporalidade tempInterm = !idTemporalidadeArqInterm.equals(-1L)
                    ? dao().consultar(idTemporalidadeArqInterm, ExTemporalidade.class, false)
                    : null;

            exViaGravar.setExClassificacao(exClassNovo);
            exViaGravar.setExTipoDestinacao(destino);
            exViaGravar.setExDestinacaoFinal(destFinal);
            exViaGravar.setTemporalidadeCorrente(tempCorrente);
            exViaGravar.setTemporalidadeIntermediario(tempInterm);
            exViaGravar.setObs(via.getObs());

            dao().gravarComHistorico(exViaGravar, exVia, dtHist, getIdentidadeCadastrante());

            exClassNovo.getExViaSet().add(exViaGravar);

            if (removerViaAntiga) {
                exClassAntiga.getExViaSet().remove(exVia);
            }

            Ex.getInstance().getBL().copiarReferencias(exClassNovo, exClassAntiga, dt, getIdentidadeCadastrante());
            dao().commitTransacao();
            //result.redirectTo("editar?codificacao="+codificacao+"&acao="+acao);
            result.forwardTo(this).edita(exClassNovo, codificacao, acao);
        } catch (Exception e) {
            dao().rollbackTransacao();
            throw new AplicacaoException("No foi possvel gravar via no banco de dados." + e.getMessage());
        }
    }

    @Get("app/expediente/classificacao/excluirVia")
    public void excluirVia(Long idVia, String codificacao, String acao) throws Exception {
        assertAcesso("DOC:Mdulo de Documentos;FE:Ferramentas;PC:Plano de Classificao");
        dao().iniciarTransacao();
        try {
            ExVia exVia = dao().consultar(idVia, ExVia.class, false);
            dao().excluirComHistorico(exVia, null, getIdentidadeCadastrante());

            ExClassificacao exClassAntiga = buscarExClassificacao(codificacao);
            if (exClassAntiga == null) {
                throw new AplicacaoException("Erro ao obter a classificao");
            }

            ExClassificacao exClassNovo = Ex.getInstance().getBL().getCopia(exClassAntiga);
            Ex.getInstance().getBL().alterarExClassificacao(exClassNovo, exClassAntiga,
                    dao().consultarDataEHoraDoServidor(), getIdentidadeCadastrante());

            dao().commitTransacao();

        } catch (Exception e) {
            dao().rollbackTransacao();
            throw new AplicacaoException("No foi possvel excluir via do banco de dados." + e.getMessage());
        }
        result.redirectTo("editar?codificacao=" + codificacao + "&acao=" + acao);
    }

    @Override
    public Selecionavel selecionarPorNome(final ExClassificacaoDaoFiltro flt) throws AplicacaoException {

        // Procura por nome
        flt.setDescricao(Texto.removeAcentoMaiusculas(flt.getSigla()));
        flt.setSigla(null);
        final List l = ExDao.getInstance().consultarPorFiltro(flt);
        if (l != null)
            if (l.size() == 1)
                return (ExClassificacao) l.get(0);
        return null;
    }

    @Override
    public Selecionavel selecionarVerificar(Selecionavel sel) throws AplicacaoException {
        return (sel != null && ((ExClassificacao) sel).isIntermediaria()) ? null : sel;
    }

    private List<ExClassificacao> getClassificacaoVigente() {
        return ExDao.getInstance().consultarExClassificacaoVigente();
    }

    private List<ExTipoDestinacao> getListaExTipoDestinacao() {
        return ExDao.getInstance().listarExTiposDestinacao();
    }

    private List<ExTemporalidade> getListaExTemporalidade() {
        return ExDao.getInstance().listarAtivos(ExTemporalidade.class, "descTemporalidade");
    }

    private ExClassificacao buscarExClassificacao(String codificacao) {
        return ExDao.getInstance().consultarExClassificacao(codificacao);
    }

    private Integer getTotalDeNiveis() {
        return MascaraUtil.getInstance().getTotalDeNiveisDaMascara();
    }

    private boolean exibirAdicaoDeVia(String codificacao) {
        Integer i = SigaExProperties.getExClassificacaoNivelMinimoDeEnquadramento();
        if (codificacao != null) {
            if (i != null)
                return MascaraUtil.getInstance().calcularNivel(codificacao) >= i;
            else
                return MascaraUtil.getInstance().isUltimoNivel(codificacao);
        }

        return false;
    }

    private List<ExClassificacao> getClassificacoesDoNivel(Integer nivel) {
        List<ExClassificacao> result = new ArrayList<ExClassificacao>();

        // se primeira lista, carrega incondicionalmente
        if (nivel == 0) {
            return ExDao.getInstance()
                    .listarExClassificacaoPorNivel(MascaraUtil.getInstance().getMscTodosDoNivel(1));
        }

        // se lista do nvel anterior est definido, carrega lista baseando-se
        // na anterior
        String nivelListaAnterior = nivelSelecionado[nivel - 1];
        if (nivelListaAnterior != null && !nivelListaAnterior.equals("-1")) {
            return ExDao.getInstance().listarExClassificacaoPorNivel(
                    MascaraUtil.getInstance().getMscFilho(nivelListaAnterior, false), nivelListaAnterior);
        }

        return result;
    }

}